diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 5d8023ba..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ - -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project, and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -education, socio-economic status, nationality, personal appearance, race, -religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at https://knowstreaming.com/support-center . All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 06577128..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,150 +0,0 @@ - - - -# 为KnowStreaming做贡献 - - -欢迎👏🏻来到KnowStreaming!本文档是关于如何为KnowStreaming做出贡献的指南。 - -如果您发现不正确或遗漏的内容, 请留下意见/建议。 - -## 行为守则 -请务必阅读并遵守我们的 [行为准则](./CODE_OF_CONDUCT.md). - - - -## 贡献 - -**KnowStreaming** 欢迎任何角色的新参与者,包括 **User** 、**Contributor**、**Committer**、**PMC** 。 - -我们鼓励新人积极加入 **KnowStreaming** 项目,从User到Contributor、Committer ,甚至是 PMC 角色。 - -为了做到这一点,新人需要积极地为 **KnowStreaming** 项目做出贡献。以下介绍如何对 **KnowStreaming** 进行贡献。 - - -### 创建/打开 Issue - -如果您在文档中发现拼写错误、在代码中**发现错误**或想要**新功能**或想要**提供建议**,您可以在 GitHub 上[创建一个Issue](https://github.com/didi/KnowStreaming/issues/new/choose) 进行报告。 - - -如果您想直接贡献, 您可以选择下面标签的问题。 - -- [contribution welcome](https://github.com/didi/KnowStreaming/labels/contribution%20welcome) : 非常需要解决/新增 的Issues -- [good first issue](https://github.com/didi/KnowStreaming/labels/good%20first%20issue): 对新人比较友好, 新人可以拿这个Issue来练练手热热身。 - - 请注意,任何 PR 都必须与有效issue相关联。否则,PR 将被拒绝。 - - - -### 开始你的贡献 - -**分支介绍** - -我们将 `dev`分支作为开发分支, 说明这是一个不稳定的分支。 - -此外,我们的分支模型符合 [https://nvie.com/posts/a-successful-git-branching-model/](https://nvie.com/posts/a-successful-git-branching-model/). 我们强烈建议新人在创建PR之前先阅读上述文章。 - - - -**贡献流程** - -为方便描述,我们这里定义一下2个名词: - -自己Fork出来的仓库是私人仓库, 我们这里称之为 :**分叉仓库** -Fork的源项目,我们称之为:**源仓库** - - -现在,如果您准备好创建PR, 以下是贡献者的工作流程: - -1. Fork [KnowStreaming](https://github.com/didi/KnowStreaming) 项目到自己的仓库 - -2. 从源仓库的`dev`拉取并创建自己的本地分支,例如: `dev` -3. 在本地分支上对代码进行修改 -4. Rebase 开发分支, 并解决冲突 -5. commit 并 push 您的更改到您自己的**分叉仓库** -6. 创建一个 Pull Request 到**源仓库**的`dev`分支中。 -7. 等待回复。如果回复的慢,请无情的催促。 - - -更为详细的贡献流程请看:[贡献流程](./docs/contributer_guide/贡献流程.md) - -创建Pull Request时: - -1. 请遵循 PR的 [模板](./.github/PULL_REQUEST_TEMPLATE.md) -2. 请确保 PR 有相应的issue。 -3. 如果您的 PR 包含较大的更改,例如组件重构或新组件,请编写有关其设计和使用的详细文档(在对应的issue中)。 -4. 注意单个 PR 不能太大。如果需要进行大量更改,最好将更改分成几个单独的 PR。 -5. 在合并PR之前,尽量的将最终的提交信息清晰简洁, 将多次修改的提交尽可能的合并为一次提交。 -6. 创建 PR 后,将为PR分配一个或多个reviewers。 - - -如果您的 PR 包含较大的更改,例如组件重构或新组件,请编写有关其设计和使用的详细文档。 - - -# 代码审查指南 - -Commiter将轮流review代码,以确保在合并前至少有一名Commiter - -一些原则: - -- 可读性——重要的代码应该有详细的文档。API 应该有 Javadoc。代码风格应与现有风格保持一致。 -- 优雅:新的函数、类或组件应该设计得很好。 -- 可测试性——单元测试用例应该覆盖 80% 的新代码。 -- 可维护性 - 遵守我们的编码规范。 - - -# 开发者 - -## 成为Contributor - -只要成功提交并合并PR , 则为Contributor - -贡献者名单请看:[贡献者名单](./docs/contributer_guide/开发者名单.md) - -## 尝试成为Commiter - -一般来说, 贡献8个重要的补丁并至少让三个不同的人来Review他们(您需要3个Commiter的支持)。 -然后请人给你提名, 您需要展示您的 - -1. 至少8个重要的PR和项目的相关问题 -2. 与团队合作的能力 -3. 了解项目的代码库和编码风格 -4. 编写好代码的能力 - -当前的Commiter可以通过在KnowStreaming中的Issue标签 `nomination`(提名)来提名您 - -1. 你的名字和姓氏 -2. 指向您的Git个人资料的链接 -3. 解释为什么你应该成为Commiter -4. 详细说明提名人与您合作的3个PR以及相关问题,这些问题可以证明您的能力。 - -另外2个Commiter需要支持您的**提名**,如果5个工作日内没有人反对,您就是提交者,如果有人反对或者想要更多的信息,Commiter会讨论并通常达成共识(5个工作日内) 。 - - -# 开源奖励计划 - - -我们非常欢迎开发者们为KnowStreaming开源项目贡献一份力量,相应也将给予贡献者激励以表认可与感谢。 - - -## 参与贡献 - -1. 积极参与 Issue 的讨论,如答疑解惑、提供想法或报告无法解决的错误(Issue) -2. 撰写和改进项目的文档(Wiki) -3. 提交补丁优化代码(Coding) - - -## 你将获得 - -1. 加入KnowStreaming开源项目贡献者名单并展示 -2. KnowStreaming开源贡献者证书(纸质&电子版) -3. KnowStreaming贡献者精美大礼包(KnowStreamin/滴滴 周边) - - -## 相关规则 - -- Contributer和Commiter都会有对应的证书和对应的礼包 -- 每季度有KnowStreaming项目团队评选出杰出贡献者,颁发相应证书。 -- 年末进行年度评选 - -贡献者名单请看:[贡献者名单](./docs/contributer_guide/开发者名单.md) \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8f526268..00000000 --- a/README.md +++ /dev/null @@ -1,157 +0,0 @@ - -

- - -

- -

- 产品官网 | - 下载地址 | - 文档资源 | - 体验环境 -

- -

- - - LastCommit - - - - - License - - - - - License - - - - - Issues - - - - - Slack - - -

- - ---- - - -## `Know Streaming` 简介 - -`Know Streaming`是一套云原生的Kafka管控平台,脱胎于众多互联网内部多年的Kafka运营实践经验,专注于Kafka运维管控、监控告警、资源治理、多活容灾等核心场景。在用户体验、监控、运维管控上进行了平台化、可视化、智能化的建设,提供一系列特色的功能,极大地方便了用户和运维人员的日常使用,让普通运维人员都能成为Kafka专家。 - -我们现在正在收集 Know Streaming 用户信息,以帮助我们进一步改进 Know Streaming。 -请在 [issue#663](https://github.com/didi/KnowStreaming/issues/663) 上提供您的使用信息来支持我们:[谁在使用 Know Streaming](https://github.com/didi/KnowStreaming/issues/663) - - - -整体具有以下特点: - -- 👀  **零侵入、全覆盖** - - 无需侵入改造 `Apache Kafka` ,一键便能纳管 `0.10.x` ~ `3.x.x` 众多版本的Kafka,包括 `ZK` 或 `Raft` 运行模式的版本,同时在兼容架构上具备良好的扩展性,帮助您提升集群管理水平; - -- 🌪️  **零成本、界面化** - - 提炼高频 CLI 能力,设计合理的产品路径,提供清新美观的 GUI 界面,支持 Cluster、Broker、Zookeeper、Topic、ConsumerGroup、Message、ACL、Connect 等组件 GUI 管理,普通用户5分钟即可上手; - -- 👏  **云原生、插件化** - - 基于云原生构建,具备水平扩展能力,只需要增加节点即可获取更强的采集及对外服务能力,提供众多可热插拔的企业级特性,覆盖可观测性生态整合、资源治理、多活容灾等核心场景; - -- 🚀  **专业能力** - - 集群管理:支持一键纳管,健康分析、核心组件观测 等功能; - - 观测提升:多维度指标观测大盘、观测指标最佳实践 等功能; - - 异常巡检:集群多维度健康巡检、集群多维度健康分 等功能; - - 能力增强:集群负载均衡、Topic扩缩副本、Topic副本迁移 等功能; - - -  -**产品图** - -

- - - -

- - - - -## 文档资源 - -**`开发相关手册`** - -- [打包编译手册](docs/install_guide/源码编译打包手册.md) -- [单机部署手册](docs/install_guide/单机部署手册.md) -- [版本升级手册](docs/install_guide/版本升级手册.md) -- [本地源码启动手册](docs/dev_guide/本地源码启动手册.md) - -**`产品相关手册`** - -- [产品使用指南](docs/user_guide/用户使用手册.md) -- [2.x与3.x新旧对比手册](docs/user_guide/新旧对比手册.md) -- [FAQ](docs/user_guide/faq.md) - - -**点击 [这里](https://doc.knowstreaming.com/product),也可以从官网获取到更多文档** - - - - - -## 成为社区贡献者 - -1. [贡献源码](https://doc.knowstreaming.com/product/10-contribution) 了解如何成为 Know Streaming 的贡献者 -2. [具体贡献流程](https://doc.knowstreaming.com/product/10-contribution#102-贡献流程) -3. [开源激励计划](https://doc.knowstreaming.com/product/10-contribution#105-开源激励计划) -4. [贡献者名单](https://doc.knowstreaming.com/product/10-contribution#106-贡献者名单) - - -获取KnowStreaming开源社区证书。 - -## 加入技术交流群 - -**`1、知识星球`** - -

- -

- -
-
-
-
-
-
-
-
- -👍 我们正在组建国内最大,最权威的 **[Kafka中文社区](https://z.didi.cn/5gSF9)** - -在这里你可以结交各大互联网的 Kafka大佬 以及 4000+ Kafka爱好者,一起实现知识共享,实时掌控最新行业资讯,期待 👏   您的加入中~ https://z.didi.cn/5gSF9 - -有问必答~! 互动有礼~! - -PS: 提问请尽量把问题一次性描述清楚,并告知环境信息情况~!如使用版本、操作步骤、报错/警告信息等,方便大V们快速解答~ - -  - -**`2、微信群`** - -微信加群:添加`mike_zhangliang`、`PenceXie` 、`szzdzhp001`的微信号备注KnowStreaming加群。 -
- -加群之前有劳点一下 star,一个小小的 star 是对KnowStreaming作者们努力建设社区的动力。 - -感谢感谢!!! - -wx - -## Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=didi/KnowStreaming&type=Date)](https://star-history.com/#didi/KnowStreaming&Date) diff --git a/Releases_Notes.md b/Releases_Notes.md deleted file mode 100644 index a606ef72..00000000 --- a/Releases_Notes.md +++ /dev/null @@ -1,572 +0,0 @@ - -## v3.3.0 - -**问题修复** -- 修复 Connect 的 JMX-Port 配置未生效问题; -- 修复 不存在 Connector 时,OverView 页面的数据一直处于加载中的问题; -- 修复 Group 分区信息,分页时展示不全的问题; -- 修复采集副本指标时,参数传递错误的问题; -- 修复用户信息修改后,用户列表会抛出空指针异常的问题; -- 修复 Topic 详情页面,查看消息时,选择分区不生效问题; -- 修复对 ZK 客户端进行配置后不生效的问题; -- 修复 connect 模块,指标中缺少健康巡检项通过数的问题; -- 修复 connect 模块,指标获取方法存在映射错误的问题; -- 修复 connect 模块,max 纬度指标获取错误的问题; -- 修复 Topic 指标大盘 TopN 指标显示信息错误的问题; -- 修复 Broker Similar Config 显示错误的问题; -- 修复解析 ZK 四字命令时,数据类型设置错误导致空指针的问题; -- 修复新增 Topic 时,清理策略选项版本控制错误的问题; -- 修复新接入集群时 Controller-Host 信息不显示的问题; -- 修复 Connector 和 MM2 列表搜索不生效的问题; -- 修复 Zookeeper 页面,Leader 显示存在异常的问题; -- 修复前端打包失败的问题; - - -**产品优化** -- ZK Overview 页面补充默认展示的指标; -- 统一初始化 ES 索引模版的脚本为 init_es_template.sh,同时新增缺失的 connect 索引模版初始化脚本,去除多余的 replica 和 zookeper 索引模版初始化脚本; -- 指标大盘页面,优化指标筛选操作后,无指标数据的指标卡片由不显示改为显示,并增加无数据的兜底; -- 删除从 ES 读写 replica 指标的相关代码; -- 优化 Topic 健康巡检的日志,明确错误的原因; -- 优化无 ZK 模块时,巡检详情忽略对 ZK 的展示; -- 优化本地缓存大小为可配置; -- Task 模块中的返回中,补充任务的分组信息; -- FAQ 补充 Ldap 的配置说明; -- FAQ 补充接入 Kerberos 认证的 Kafka 集群的配置说明; -- ks_km_kafka_change_record 表增加时间纬度的索引,优化查询性能; -- 优化 ZK 健康巡检的日志,便于问题的排查; - -**功能新增** -- 新增基于滴滴 Kafka 的 Topic 复制功能(需使用滴滴 Kafka 才可具备该能力); -- Topic 指标大盘,新增 Topic 复制相关的指标; -- 新增基于 TestContainers 的单测; - - -**Kafka MM2 Beta版 (v3.3.0版本新增发布)** -- MM2 任务的增删改查; -- MM2 任务的指标大盘; -- MM2 任务的健康状态; - ---- - - -## v3.2.0 - -**问题修复** -- 修复健康巡检结果更新至 DB 时,出现死锁问题; -- 修复 KafkaJMXClient 类中,logger错误的问题; -- 后端修复 Topic 过期策略在 0.10.1.0 版本能多选的问题,实际应该只能二选一; -- 修复接入集群时,不填写集群配置会报错的问题; -- 升级 spring-context 至 5.3.19 版本,修复安全漏洞; -- 修复 Broker & Topic 修改配置时,多版本兼容配置的版本信息错误的问题; -- 修复 Topic 列表的健康分为健康状态; -- 修复 Broker LogSize 指标存储名称错误导致查询不到的问题; -- 修复 Prometheus 中,缺少 Group 部分指标的问题; -- 修复因缺少健康状态指标导致集群数错误的问题; -- 修复后台任务记录操作日志时,因缺少操作用户信息导致出现异常的问题; -- 修复 Replica 指标查询时,DSL 错误的问题; -- 关闭 errorLogger,修复错误日志重复输出的问题; -- 修复系统管理更新用户信息失败的问题; -- 修复因原AR信息丢失,导致迁移任务一直处于执行中的错误; -- 修复集群 Topic 列表实时数据查询时,出现失败的问题; -- 修复集群 Topic 列表,页面白屏问题; -- 修复副本变更时,因AR数据异常,导致数组访问越界的问题; - - -**产品优化** -- 优化健康巡检为按照资源维度多线程并发处理; -- 统一日志输出格式,并优化部分输出的日志; -- 优化 ZK 四字命令结果解析过程中,容易引起误解的 WARN 日志; -- 优化 Zookeeper 详情中,目录结构的搜索文案; -- 优化线程池的名称,方便第三方系统进行相关问题的分析; -- 去除 ESClient 的并发访问控制,降低 ESClient 创建数及提升利用率; -- 优化 Topic Messages 抽屉文案; -- 优化 ZK 健康巡检失败时的错误日志信息; -- 提高 Offset 信息获取的超时时间,降低并发过高时出现请求超时的概率; -- 优化 Topic & Partition 元信息的更新策略,降低对 DB 连接的占用; -- 优化 Sonar 代码扫码问题; -- 优化分区 Offset 指标的采集; -- 优化前端图表相关组件逻辑; -- 优化产品主题色; -- Consumer 列表刷新按钮新增 hover 提示; -- 优化配置 Topic 的消息大小时的测试弹框体验; -- 优化 Overview 页面 TopN 查询的流程; - - -**功能新增** -- 新增页面无数据排查文档; -- 增加 ES 索引删除的功能; -- 支持拆分API服务和Job服务部署; - - -**Kafka Connect Beta版 (v3.2.0版本新增发布)** -- Connect 集群的纳管; -- Connector 的增删改查; -- Connect 集群 & Connector 的指标大盘; - - ---- - - -## v3.1.0 - -**Bug修复** -- 修复重置 Group Offset 的提示信息中,缺少Dead状态也可进行重置的描述; -- 修复新建 Topic 后,立即查看 Topic Messages 信息时,会提示 Topic 不存在的问题; -- 修复副本变更时,优先副本选举未被正常处罚执行的问题; -- 修复 git 目录不存在时,打包不能正常进行的问题; -- 修复 KRaft 模式的 Kafka 集群,JMX PORT 显示 -1 的问题; - - -**体验优化** -- 优化Cluster、Broker、Topic、Group的健康分为健康状态; -- 去除健康巡检配置中的权重信息; -- 错误提示页面展示优化; -- 前端打包编译依赖默认使用 taobao 镜像; -- 重新设计优化导航栏的 icon ; - - -**新增** -- 个人头像下拉信息中,新增产品版本信息; -- 多集群列表页面,新增集群健康状态分布信息; - - -**Kafka ZK 部分 (v3.1.0版本正式发布)** -- 新增 ZK 集群的指标大盘信息; -- 新增 ZK 集群的服务状态概览信息; -- 新增 ZK 集群的服务节点列表信息; -- 新增 Kafka 在 ZK 的存储数据查看功能; -- 新增 ZK 的健康巡检及健康状态计算; - - - ---- - - -## v3.0.1 - -**Bug修复** -- 修复重置 Group Offset 时,提示信息中缺少 Dead 状态也可进行重置的信息; -- 修复 Ldap 某个属性不存在时,会直接抛出空指针导致登陆失败的问题; -- 修复集群 Topic 列表页,健康分详情信息中,检查时间展示错误的问题; -- 修复更新健康检查结果时,出现死锁的问题; -- 修复 Replica 索引模版错误的问题; -- 修复 FAQ 文档中的错误链接; -- 修复 Broker 的 TopN 指标不存在时,页面数据不展示的问题; -- 修复 Group 详情页,图表时间范围选择不生效的问题; - - -**体验优化** -- 集群 Group 列表按照 Group 维度进行展示; -- 优化避免因 ES 中该指标不存在,导致日志中出现大量空指针的问题; -- 优化全局 Message & Notification 展示效果; -- 优化 Topic 扩分区名称 & 描述展示; - - -**新增** -- Broker 列表页面,新增 JMX 是否成功连接的信息; - - -**ZK 部分(未完全发布)** -- 后端补充 Kafka ZK 指标采集,Kafka ZK 信息获取相关功能; -- 增加本地缓存,避免同一采集周期内 ZK 指标重复采集; -- 增加 ZK 节点采集失败跳过策略,避免不断对存在问题的节点不断尝试; -- 修复 zkAvgLatency 指标转 Long 时抛出异常问题; -- 修复 ks_km_zookeeper 表中,role 字段类型错误问题; - ---- - -## v3.0.0 - -**Bug修复** -- 修复 Group 指标防重复采集不生效问题 -- 修复自动创建 ES 索引模版失败问题 -- 修复 Group+Topic 列表中存在已删除Topic的问题 -- 修复使用 MySQL-8 ,因兼容问题, start_time 信息为 NULL 时,会导致创建任务失败的问题 -- 修复 Group 信息表更新时,出现死锁的问题 -- 修复图表补点逻辑与图表时间范围不适配的问题 - - -**体验优化** -- 按照资源类别,拆分健康巡检任务 -- 优化 Group 详情页的指标为实时获取 -- 图表拖拽排序支持用户级存储 -- 多集群列表 ZK 信息展示兼容无 ZK 情况 -- Topic 详情消息预览支持复制功能 -- 部分内容大数字支持千位分割符展示 - - -**新增** -- 集群信息中,新增 Zookeeper 客户端配置字段 -- 集群信息中,新增 Kafka 集群运行模式字段 -- 新增 docker-compose 的部署方式 - ---- - -## v3.0.0-beta.3 - -**文档** -- FAQ 补充权限识别失败问题的说明 -- 同步更新文档,保持与官网一致 - - -**Bug修复** -- Offset 信息获取时,过滤掉无 Leader 的分区 -- 升级 oshi-core 版本至 5.6.1 版本,修复 Windows 系统获取系统指标失败问题 -- 修复 JMX 连接被关闭后,未进行重建的问题 -- 修复因 DB 中 Broker 信息不存在导致 TotalLogSize 指标获取时抛空指针问题 -- 修复 dml-logi.sql 中,SQL 注释错误的问题 -- 修复 startup.sh 中,识别操作系统类型错误的问题 -- 修复配置管理页面删除配置失败的问题 -- 修复系统管理应用文件引用路径 -- 修复 Topic Messages 详情提示信息点击跳转 404 的问题 -- 修复扩副本时,当前副本数不显示问题 - - -**体验优化** -- Topic-Messages 页面,增加返回数据的排序以及按照Earliest/Latest的获取方式 -- 优化 GroupOffsetResetEnum 类名为 OffsetTypeEnum,使得类名含义更准确 -- 移动 KafkaZKDAO 类,及 Kafka Znode 实体类的位置,使得 Kafka Zookeeper DAO 更加内聚及便于识别 -- 后端补充 Overview 页面指标排序的功能 -- 前端 Webpack 配置优化 -- Cluster Overview 图表取消放大展示功能 -- 列表页增加手动刷新功能 -- 接入/编辑集群,优化 JMX-PORT,Version 信息的回显,优化JMX信息的展示 -- 提高登录页面图片展示清晰度 -- 部分样式和文案优化 - ---- - -## v3.0.0-beta.2 - -**文档** -- 新增登录系统对接文档 -- 优化前端工程打包构建部分文档说明 -- FAQ补充KnowStreaming连接特定JMX IP的说明 - - -**Bug修复** -- 修复logi_security_oplog表字段过短,导致删除Topic等操作无法记录的问题 -- 修复ES查询时,抛java.lang.NumberFormatException: For input string: "{"value":0,"relation":"eq"}" 问题 -- 修复LogStartOffset和LogEndOffset指标单位错误问题 -- 修复进行副本变更时,旧副本数为NULL的问题 -- 修复集群Group列表,在第二页搜索时,搜索时返回的分页信息错误问题 -- 修复重置Offset时,返回的错误信息提示不一致的问题 -- 修复集群查看,系统查看,LoadRebalance等页面权限点缺失问题 -- 修复查询不存在的Topic时,错误信息提示不明显的问题 -- 修复Windows用户打包前端工程报错的问题 -- package-lock.json锁定前端依赖版本号,修复因依赖自动升级导致打包失败等问题 -- 系统管理子应用,补充后端返回的Code码拦截,解决后端接口返回报错不展示的问题 -- 修复用户登出后,依旧可以访问系统的问题 -- 修复巡检任务配置时,数值显示错误的问题 -- 修复Broker/Topic Overview 图表和图表详情问题 -- 修复Job扩缩副本任务明细数据错误的问题 -- 修复重置Offset时,分区ID,Offset数值无限制问题 -- 修复扩缩/迁移副本时,无法选中Kafka系统Topic的问题 -- 修复Topic的Config页面,编辑表单时不能正确回显当前值的问题 -- 修复Broker Card返回数据后依旧展示加载态的问题 - - - -**体验优化** -- 优化默认用户密码为 admin/admin -- 缩短新增集群后,集群信息加载的耗时 -- 集群Broker列表,增加Controller角色信息 -- 副本变更任务结束后,增加进行优先副本选举的操作 -- Task模块任务分为Metrics、Common、Metadata三类任务,每类任务配备独立线程池,减少对Job模块的线程池,以及不同类任务之间的相互影响 -- 删除代码中存在的多余无用文件 -- 自动新增ES索引模版及近7天索引,减少用户搭建时需要做的事项 -- 优化前端工程打包流程 -- 优化登录页文案,页面左侧栏内容,单集群详情样式,Topic列表趋势图等 -- 首次进入Broker/Topic图表详情时,进行预缓存数据从而优化体验 -- 优化Topic详情Partition Tab的展示 -- 多集群列表页增加编辑功能 -- 优化副本变更时,迁移时间支持分钟级别粒度 -- logi-security版本升级至2.10.13 -- logi-elasticsearch-client版本升级至1.0.24 - - -**能力提升** -- 支持Ldap登录认证 - ---- - -## v3.0.0-beta.1 - -**文档** -- 新增Task模块说明文档 -- FAQ补充 `Specified key was too long; max key length is 767 bytes ` 错误说明 -- FAQ补充 `出现ESIndexNotFoundException报错` 错误说明 - - -**Bug修复** -- 修复 Consumer 点击 Stop 未停止检索的问题 -- 修复创建/编辑角色权限报错问题 -- 修复多集群管理/单集群详情均衡卡片状态错误问题 -- 修复版本列表未排序问题 -- 修复Raft集群Controller信息不断记录问题 -- 修复部分版本消费组描述信息获取失败问题 -- 修复分区Offset获取失败的日志中,缺少Topic名称信息问题 -- 修复GitHub图地址错误,及图裂问题 -- 修复Broker默认使用的地址和注释不一致问题 -- 修复 Consumer 列表分页不生效问题 -- 修复操作记录表operation_methods字段缺少默认值问题 -- 修复集群均衡表中move_broker_list字段无效的问题 -- 修复KafkaUser、KafkaACL信息获取时,日志一直重复提示不支持问题 -- 修复指标缺失时,曲线出现掉底的问题 - - -**体验优化** -- 优化前端构建时间和打包体积,增加依赖打包的分包策略 -- 优化产品样式和文案展示 -- 优化ES客户端数为可配置 -- 优化日志中大量出现的MySQL Key冲突日志 - - -**能力提升** -- 增加周期任务,用于主动创建缺少的ES模版及索引的能力,减少额外的脚本操作 -- 增加JMX连接的Broker地址可选择的能力 - ---- - -## v3.0.0-beta.0 - -**1、多集群管理** - -- 增加健康监测体系、关键组件&指标 GUI 展示 -- 增加 2.8.x 以上 Kafka 集群接入,覆盖 0.10.x-3.x -- 删除逻辑集群、共享集群、Region 概念 - -**2、Cluster 管理** - -- 增加集群概览信息、集群配置变更记录 -- 增加 Cluster 健康分,健康检查规则支持自定义配置 -- 增加 Cluster 关键指标统计和 GUI 展示,支持自定义配置 -- 增加 Cluster 层 I/O、Disk 的 Load Reblance 功能,支持定时均衡任务(企业版) -- 删除限流、鉴权功能 -- 删除 APPID 概念 - -**3、Broker 管理** - -- 增加 Broker 健康分 -- 增加 Broker 关键指标统计和 GUI 展示,支持自定义配置 -- 增加 Broker 参数配置功能,需重启生效 -- 增加 Controller 变更记录 -- 增加 Broker Datalogs 记录 -- 删除 Leader Rebalance 功能 -- 删除 Broker 优先副本选举 - -**4、Topic 管理** - -- 增加 Topic 健康分 -- 增加 Topic 关键指标统计和 GUI 展示,支持自定义配置 -- 增加 Topic 参数配置功能,可实时生效 -- 增加 Topic 批量迁移、Topic 批量扩缩副本功能 -- 增加查看系统 Topic 功能 -- 优化 Partition 分布的 GUI 展示 -- 优化 Topic Message 数据采样 -- 删除 Topic 过期概念 -- 删除 Topic 申请配额功能 - -**5、Consumer 管理** - -- 优化了 ConsumerGroup 展示形式,增加 Consumer Lag 的 GUI 展示 - -**6、ACL 管理** - -- 增加原生 ACL GUI 配置功能,可配置生产、消费、自定义多种组合权限 -- 增加 KafkaUser 功能,可自定义新增 KafkaUser - -**7、消息测试(企业版)** - -- 增加生产者消息模拟器,支持 Data、Flow、Header、Options 自定义配置(企业版) -- 增加消费者消息模拟器,支持 Data、Flow、Header、Options 自定义配置(企业版) - -**8、Job** - -- 优化 Job 模块,支持任务进度管理 - -**9、系统管理** - -- 优化用户、角色管理体系,支持自定义角色配置页面及操作权限 -- 优化审计日志信息 -- 删除多租户体系 -- 删除工单流程 - ---- - -## v2.6.0 - -版本上线时间:2022-01-24 - -### 能力提升 -- 增加简单回退工具类 - -### 体验优化 -- 补充周期任务说明文档 -- 补充集群安装部署使用说明文档 -- 升级Swagger、SpringFramework、SpringBoot、EChats版本 -- 优化Task模块的日志输出 -- 优化corn表达式解析失败后退出无任何日志提示问题 -- Ldap用户接入时,增加部门及邮箱信息等 -- 对Jmx模块,增加连接失败后的回退机制及错误日志优化 -- 增加线程池、客户端池可配置 -- 删除无用的jmx_prometheus_javaagent-0.14.0.jar -- 优化迁移任务名称 -- 优化创建Region时,Region容量信息不能立即被更新问题 -- 引入lombok -- 更新视频教程 -- 优化kcm_script.sh脚本中的LogiKM地址为可通过程序传入 -- 第三方接口及网关接口,增加是否跳过登录的开关 -- extends模块相关配置调整为非必须在application.yml中配置 - -### bug修复 -- 修复批量往DB写入空指标数组时报SQL语法异常的问题 -- 修复网关增加配置及修改配置时,version不变化问题 -- 修复集群列表页,提示框遮挡问题 -- 修复对高版本Broker元信息协议解析失败的问题 -- 修复Dockerfile执行时提示缺少application.yml文件的问题 -- 修复逻辑集群更新时,会报空指针的问题 - - -## v2.5.0 - -版本上线时间:2021-07-10 - -### 体验优化 -- 更改产品名为LogiKM -- 更新产品图标 - - -## v2.4.1+ - -版本上线时间:2021-05-21 - -### 能力提升 -- 增加直接增加权限和配额的接口(v2.4.1) -- 增加接口调用可绕过登录的功能(v2.4.1) - -### 体验优化 -- Tomcat 版本提升至8.5.66(v2.4.2) -- op接口优化,拆分util接口为topic、leader两类接口(v2.4.1) -- 简化Gateway配置的Key长度(v2.4.1) - -### bug修复 -- 修复页面展示版本错误问题(v2.4.2) - - -## v2.4.0 - -版本上线时间:2021-05-18 - - -### 能力提升 - -- 增加App与Topic自动化审批开关 -- Broker元信息中增加Rack信息 -- 升级MySQL 驱动,支持MySQL 8+ -- 增加操作记录查询界面 - -### 体验优化 - -- FAQ告警组说明优化 -- 用户手册共享及 独享集群概念优化 -- 用户管理界面,前端限制用户删除自己 - -### bug修复 - -- 修复op-util类中创建Topic失败的接口 -- 周期同步Topic到DB的任务修复,将Topic列表查询从缓存调整为直接查DB -- 应用下线审批失败的功能修复,将权限为0(无权限)的数据进行过滤 -- 修复登录及权限绕过的漏洞 -- 修复研发角色展示接入集群、暂停监控等按钮的问题 - - -## v2.3.0 - -版本上线时间:2021-02-08 - - -### 能力提升 - -- 新增支持docker化部署 -- 可指定Broker作为候选controller -- 可新增并管理网关配置 -- 可获取消费组状态 -- 增加集群的JMX认证 - -### 体验优化 - -- 优化编辑用户角色、修改密码的流程 -- 新增consumerID的搜索功能 -- 优化“Topic连接信息”、“消费组重置消费偏移”、“修改Topic保存时间”的文案提示 -- 在相应位置增加《资源申请文档》链接 - -### bug修复 - -- 修复Broker监控图表时间轴展示错误的问题 -- 修复创建夜莺监控告警规则时,使用的告警周期的单位不正确的问题 - - - -## v2.2.0 - -版本上线时间:2021-01-25 - - - -### 能力提升 - -- 优化工单批量操作流程 -- 增加获取Topic75分位/99分位的实时耗时数据 -- 增加定时任务,可将无主未落DB的Topic定期写入DB - -### 体验优化 - -- 在相应位置增加《集群接入文档》链接 -- 优化物理集群、逻辑集群含义 -- 在Topic详情页、Topic扩分区操作弹窗增加展示Topic所属Region的信息 -- 优化Topic审批时,Topic数据保存时间的配置流程 -- 优化Topic/应用申请、审批时的错误提示文案 -- 优化Topic数据采样的操作项文案 -- 优化运维人员删除Topic时的提示文案 -- 优化运维人员删除Region的删除逻辑与提示文案 -- 优化运维人员删除逻辑集群的提示文案 -- 优化上传集群配置文件时的文件类型限制条件 - -### bug修复 - -- 修复填写应用名称时校验特殊字符出错的问题 -- 修复普通用户越权访问应用详情的问题 -- 修复由于Kafka版本升级,导致的数据压缩格式无法获取的问题 -- 修复删除逻辑集群或Topic之后,界面依旧展示的问题 -- 修复进行Leader rebalance操作时执行结果重复提示的问题 - - -## v2.1.0 - -版本上线时间:2020-12-19 - - - -### 体验优化 - -- 优化页面加载时的背景样式 -- 优化普通用户申请Topic权限的流程 -- 优化Topic申请配额、申请分区的权限限制 -- 优化取消Topic权限的文案提示 -- 优化申请配额表单的表单项名称 -- 优化重置消费偏移的操作流程 -- 优化创建Topic迁移任务的表单内容 -- 优化Topic扩分区操作的弹窗界面样式 -- 优化集群Broker监控可视化图表样式 -- 优化创建逻辑集群的表单内容 -- 优化集群安全协议的提示文案 - -### bug修复 - -- 修复偶发性重置消费偏移失败的问题 - - - - diff --git a/bin/init_es_template.sh b/bin/init_es_template.sh deleted file mode 100644 index e570d285..00000000 --- a/bin/init_es_template.sh +++ /dev/null @@ -1,1036 +0,0 @@ -esaddr=127.0.0.1 -port=8060 -curl -s --connect-timeout 10 -o /dev/null http://${esaddr}:${port}/_cat/nodes >/dev/null 2>&1 -if [ "$?" != "0" ];then - echo "Elasticserach 访问失败, 请安装完后检查并重新执行该脚本 " - exit -fi - -curl -s --connect-timeout 10 -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${esaddr}:${port}/_template/ks_kafka_broker_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_broker_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "brokerId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "NetworkProcessorAvgIdle" : { - "type" : "float" - }, - "UnderReplicatedPartitions" : { - "type" : "float" - }, - "BytesIn_min_15" : { - "type" : "float" - }, - "HealthCheckTotal" : { - "type" : "float" - }, - "RequestHandlerAvgIdle" : { - "type" : "float" - }, - "connectionsCount" : { - "type" : "float" - }, - "BytesIn_min_5" : { - "type" : "float" - }, - "HealthScore" : { - "type" : "float" - }, - "BytesOut" : { - "type" : "float" - }, - "BytesOut_min_15" : { - "type" : "float" - }, - "BytesIn" : { - "type" : "float" - }, - "BytesOut_min_5" : { - "type" : "float" - }, - "TotalRequestQueueSize" : { - "type" : "float" - }, - "MessagesIn" : { - "type" : "float" - }, - "TotalProduceRequests" : { - "type" : "float" - }, - "HealthCheckPassed" : { - "type" : "float" - }, - "TotalResponseQueueSize" : { - "type" : "float" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${esaddr}:${port}/_template/ks_kafka_cluster_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_cluster_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "Connections" : { - "type" : "double" - }, - "BytesIn_min_15" : { - "type" : "double" - }, - "PartitionURP" : { - "type" : "double" - }, - "HealthScore_Topics" : { - "type" : "double" - }, - "EventQueueSize" : { - "type" : "double" - }, - "ActiveControllerCount" : { - "type" : "double" - }, - "GroupDeads" : { - "type" : "double" - }, - "BytesIn_min_5" : { - "type" : "double" - }, - "HealthCheckTotal_Topics" : { - "type" : "double" - }, - "Partitions" : { - "type" : "double" - }, - "BytesOut" : { - "type" : "double" - }, - "Groups" : { - "type" : "double" - }, - "BytesOut_min_15" : { - "type" : "double" - }, - "TotalRequestQueueSize" : { - "type" : "double" - }, - "HealthCheckPassed_Groups" : { - "type" : "double" - }, - "TotalProduceRequests" : { - "type" : "double" - }, - "HealthCheckPassed" : { - "type" : "double" - }, - "TotalLogSize" : { - "type" : "double" - }, - "GroupEmptys" : { - "type" : "double" - }, - "PartitionNoLeader" : { - "type" : "double" - }, - "HealthScore_Brokers" : { - "type" : "double" - }, - "Messages" : { - "type" : "double" - }, - "Topics" : { - "type" : "double" - }, - "PartitionMinISR_E" : { - "type" : "double" - }, - "HealthCheckTotal" : { - "type" : "double" - }, - "Brokers" : { - "type" : "double" - }, - "Replicas" : { - "type" : "double" - }, - "HealthCheckTotal_Groups" : { - "type" : "double" - }, - "GroupRebalances" : { - "type" : "double" - }, - "MessageIn" : { - "type" : "double" - }, - "HealthScore" : { - "type" : "double" - }, - "HealthCheckPassed_Topics" : { - "type" : "double" - }, - "HealthCheckTotal_Brokers" : { - "type" : "double" - }, - "PartitionMinISR_S" : { - "type" : "double" - }, - "BytesIn" : { - "type" : "double" - }, - "BytesOut_min_5" : { - "type" : "double" - }, - "GroupActives" : { - "type" : "double" - }, - "MessagesIn" : { - "type" : "double" - }, - "GroupReBalances" : { - "type" : "double" - }, - "HealthCheckPassed_Brokers" : { - "type" : "double" - }, - "HealthScore_Groups" : { - "type" : "double" - }, - "TotalResponseQueueSize" : { - "type" : "double" - }, - "Zookeepers" : { - "type" : "double" - }, - "LeaderMessages" : { - "type" : "double" - }, - "HealthScore_Cluster" : { - "type" : "double" - }, - "HealthCheckPassed_Cluster" : { - "type" : "double" - }, - "HealthCheckTotal_Cluster" : { - "type" : "double" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "type" : "date" - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${esaddr}:${port}/_template/ks_kafka_group_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_group_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "6" - } - }, - "mappings" : { - "properties" : { - "group" : { - "type" : "keyword" - }, - "partitionId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "topic" : { - "type" : "keyword" - }, - "metrics" : { - "properties" : { - "HealthScore" : { - "type" : "float" - }, - "Lag" : { - "type" : "float" - }, - "OffsetConsumed" : { - "type" : "float" - }, - "HealthCheckTotal" : { - "type" : "float" - }, - "HealthCheckPassed" : { - "type" : "float" - } - } - }, - "groupMetric" : { - "type" : "keyword" - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${esaddr}:${port}/_template/ks_kafka_partition_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_partition_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "6" - } - }, - "mappings" : { - "properties" : { - "brokerId" : { - "type" : "long" - }, - "partitionId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "topic" : { - "type" : "keyword" - }, - "metrics" : { - "properties" : { - "LogStartOffset" : { - "type" : "float" - }, - "Messages" : { - "type" : "float" - }, - "LogEndOffset" : { - "type" : "float" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${esaddr}:${port}/_template/ks_kafka_topic_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_topic_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "6" - } - }, - "mappings" : { - "properties" : { - "brokerId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "topic" : { - "type" : "keyword" - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "BytesIn_min_15" : { - "type" : "float" - }, - "Messages" : { - "type" : "float" - }, - "BytesRejected" : { - "type" : "float" - }, - "PartitionURP" : { - "type" : "float" - }, - "HealthCheckTotal" : { - "type" : "float" - }, - "ReplicationCount" : { - "type" : "float" - }, - "ReplicationBytesOut" : { - "type" : "float" - }, - "ReplicationBytesIn" : { - "type" : "float" - }, - "FailedFetchRequests" : { - "type" : "float" - }, - "BytesIn_min_5" : { - "type" : "float" - }, - "HealthScore" : { - "type" : "float" - }, - "LogSize" : { - "type" : "float" - }, - "BytesOut" : { - "type" : "float" - }, - "BytesOut_min_15" : { - "type" : "float" - }, - "FailedProduceRequests" : { - "type" : "float" - }, - "BytesIn" : { - "type" : "float" - }, - "BytesOut_min_5" : { - "type" : "float" - }, - "MessagesIn" : { - "type" : "float" - }, - "TotalProduceRequests" : { - "type" : "float" - }, - "HealthCheckPassed" : { - "type" : "float" - } - } - }, - "brokerAgg" : { - "type" : "keyword" - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${SERVER_ES_ADDRESS}/_template/ks_kafka_zookeeper_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_zookeeper_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "AvgRequestLatency" : { - "type" : "double" - }, - "MinRequestLatency" : { - "type" : "double" - }, - "MaxRequestLatency" : { - "type" : "double" - }, - "OutstandingRequests" : { - "type" : "double" - }, - "NodeCount" : { - "type" : "double" - }, - "WatchCount" : { - "type" : "double" - }, - "NumAliveConnections" : { - "type" : "double" - }, - "PacketsReceived" : { - "type" : "double" - }, - "PacketsSent" : { - "type" : "double" - }, - "EphemeralsCount" : { - "type" : "double" - }, - "ApproximateDataSize" : { - "type" : "double" - }, - "OpenFileDescriptorCount" : { - "type" : "double" - }, - "MaxFileDescriptorCount" : { - "type" : "double" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "type" : "date" - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${SERVER_ES_ADDRESS}/_template/ks_kafka_connect_cluster_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_connect_cluster_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "connectClusterId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "ConnectorCount" : { - "type" : "float" - }, - "TaskCount" : { - "type" : "float" - }, - "ConnectorStartupAttemptsTotal" : { - "type" : "float" - }, - "ConnectorStartupFailurePercentage" : { - "type" : "float" - }, - "ConnectorStartupFailureTotal" : { - "type" : "float" - }, - "ConnectorStartupSuccessPercentage" : { - "type" : "float" - }, - "ConnectorStartupSuccessTotal" : { - "type" : "float" - }, - "TaskStartupAttemptsTotal" : { - "type" : "float" - }, - "TaskStartupFailurePercentage" : { - "type" : "float" - }, - "TaskStartupFailureTotal" : { - "type" : "float" - }, - "TaskStartupSuccessPercentage" : { - "type" : "float" - }, - "TaskStartupSuccessTotal" : { - "type" : "float" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${SERVER_ES_ADDRESS}/_template/ks_kafka_connect_connector_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_connect_connector_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "connectClusterId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "connectorName" : { - "type" : "keyword" - }, - "connectorNameAndClusterId" : { - "type" : "keyword" - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "HealthState" : { - "type" : "float" - }, - "ConnectorTotalTaskCount" : { - "type" : "float" - }, - "HealthCheckPassed" : { - "type" : "float" - }, - "HealthCheckTotal" : { - "type" : "float" - }, - "ConnectorRunningTaskCount" : { - "type" : "float" - }, - "ConnectorPausedTaskCount" : { - "type" : "float" - }, - "ConnectorFailedTaskCount" : { - "type" : "float" - }, - "ConnectorUnassignedTaskCount" : { - "type" : "float" - }, - "BatchSizeAvg" : { - "type" : "float" - }, - "BatchSizeMax" : { - "type" : "float" - }, - "OffsetCommitAvgTimeMs" : { - "type" : "float" - }, - "OffsetCommitMaxTimeMs" : { - "type" : "float" - }, - "OffsetCommitFailurePercentage" : { - "type" : "float" - }, - "OffsetCommitSuccessPercentage" : { - "type" : "float" - }, - "PollBatchAvgTimeMs" : { - "type" : "float" - }, - "PollBatchMaxTimeMs" : { - "type" : "float" - }, - "SourceRecordActiveCount" : { - "type" : "float" - }, - "SourceRecordActiveCountAvg" : { - "type" : "float" - }, - "SourceRecordActiveCountMax" : { - "type" : "float" - }, - "SourceRecordPollRate" : { - "type" : "float" - }, - "SourceRecordPollTotal" : { - "type" : "float" - }, - "SourceRecordWriteRate" : { - "type" : "float" - }, - "SourceRecordWriteTotal" : { - "type" : "float" - }, - "OffsetCommitCompletionRate" : { - "type" : "float" - }, - "OffsetCommitCompletionTotal" : { - "type" : "float" - }, - "OffsetCommitSkipRate" : { - "type" : "float" - }, - "OffsetCommitSkipTotal" : { - "type" : "float" - }, - "PartitionCount" : { - "type" : "float" - }, - "PutBatchAvgTimeMs" : { - "type" : "float" - }, - "PutBatchMaxTimeMs" : { - "type" : "float" - }, - "SinkRecordActiveCount" : { - "type" : "float" - }, - "SinkRecordActiveCountAvg" : { - "type" : "float" - }, - "SinkRecordActiveCountMax" : { - "type" : "float" - }, - "SinkRecordLagMax" : { - "type" : "float" - }, - "SinkRecordReadRate" : { - "type" : "float" - }, - "SinkRecordReadTotal" : { - "type" : "float" - }, - "SinkRecordSendRate" : { - "type" : "float" - }, - "SinkRecordSendTotal" : { - "type" : "float" - }, - "DeadletterqueueProduceFailures" : { - "type" : "float" - }, - "DeadletterqueueProduceRequests" : { - "type" : "float" - }, - "LastErrorTimestamp" : { - "type" : "float" - }, - "TotalErrorsLogged" : { - "type" : "float" - }, - "TotalRecordErrors" : { - "type" : "float" - }, - "TotalRecordFailures" : { - "type" : "float" - }, - "TotalRecordsSkipped" : { - "type" : "float" - }, - "TotalRetries" : { - "type" : "float" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - -curl -s -o /dev/null -X POST -H 'cache-control: no-cache' -H 'content-type: application/json' http://${SERVER_ES_ADDRESS}/_template/ks_kafka_connect_mirror_maker_metric -d '{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_connect_mirror_maker_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "2" - } - }, - "mappings" : { - "properties" : { - "connectClusterId" : { - "type" : "long" - }, - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "connectorName" : { - "type" : "keyword" - }, - "connectorNameAndClusterId" : { - "type" : "keyword" - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "HealthState" : { - "type" : "float" - }, - "HealthCheckTotal" : { - "type" : "float" - }, - "ByteCount" : { - "type" : "float" - }, - "ByteRate" : { - "type" : "float" - }, - "RecordAgeMs" : { - "type" : "float" - }, - "RecordAgeMsAvg" : { - "type" : "float" - }, - "RecordAgeMsMax" : { - "type" : "float" - }, - "RecordAgeMsMin" : { - "type" : "float" - }, - "RecordCount" : { - "type" : "float" - }, - "RecordRate" : { - "type" : "float" - }, - "ReplicationLatencyMs" : { - "type" : "float" - }, - "ReplicationLatencyMsAvg" : { - "type" : "float" - }, - "ReplicationLatencyMsMax" : { - "type" : "float" - }, - "ReplicationLatencyMsMin" : { - "type" : "float" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "index" : true, - "type" : "date", - "doc_values" : true - } - } - }, - "aliases" : { } - }' - - -for i in {0..6}; -do - logdate=_$(date -d "${i} day ago" +%Y-%m-%d) - curl -s --connect-timeout 10 -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_broker_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_cluster_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_group_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_partition_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_zookeeper_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_connect_cluster_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_connect_connector_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_connect_mirror_maker_metric${logdate} && \ - curl -s -o /dev/null -X PUT http://${esaddr}:${port}/ks_kafka_topic_metric${logdate} || \ - exit 2 -done diff --git a/bin/shutdown.sh b/bin/shutdown.sh deleted file mode 100644 index c5317df8..00000000 --- a/bin/shutdown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -cd `dirname $0`/../libs -target_dir=`pwd` - -pid=`ps ax | grep -i 'ks-km' | grep ${target_dir} | grep java | grep -v grep | awk '{print $1}'` -if [ -z "$pid" ] ; then - echo "No ks-km running." - exit -1; -fi - -echo "The ks-km (${pid}) is running..." - -kill ${pid} - -echo "Send shutdown request to ks-km (${pid}) OK" diff --git a/bin/startup.sh b/bin/startup.sh deleted file mode 100644 index cbde7c56..00000000 --- a/bin/startup.sh +++ /dev/null @@ -1,82 +0,0 @@ -error_exit () -{ - echo "ERROR: $1 !!" - exit 1 -} - -[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java -[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java -[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME - -if [ -z "$JAVA_HOME" ]; then - if [ "Darwin" = "$(uname -s)" ]; then - - if [ -x '/usr/libexec/java_home' ] ; then - export JAVA_HOME=`/usr/libexec/java_home` - - elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then - export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" - fi - else - JAVA_PATH=`dirname $(readlink -f $(which javac))` - if [ "x$JAVA_PATH" != "x" ]; then - export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null` - fi - fi - if [ -z "$JAVA_HOME" ]; then - error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!" - fi -fi - - - - -export WEB_SERVER="ks-km" -export JAVA_HOME -export JAVA="$JAVA_HOME/bin/java" -export BASE_DIR=`cd $(dirname $0)/..; pwd` -export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/ - - -#=========================================================================================== -# JVM Configuration -#=========================================================================================== - -JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" -JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" - -## jdk版本高的情况 有些 参数废弃了 -JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') -if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then - JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/km_gc.log:time,tags:filecount=10,filesize=102400" -else - JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" - JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/km_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" - -fi - -JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/libs/${WEB_SERVER}.jar" -JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}" -JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/logback-spring.xml" -JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288" - - - -if [ ! -d "${BASE_DIR}/logs" ]; then - mkdir ${BASE_DIR}/logs -fi - -echo "$JAVA ${JAVA_OPT}" - -# check the start.out log output file -if [ ! -f "${BASE_DIR}/logs/start.out" ]; then - touch "${BASE_DIR}/logs/start.out" -fi - -# start -echo -e "---- 启动脚本 ------\n $JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & - - -nohup $JAVA ${JAVA_OPT} >> ${BASE_DIR}/logs/start.out 2>&1 & - -echo "${WEB_SERVER} is starting,you can check the ${BASE_DIR}/logs/start.out" diff --git a/docs/contribute_guide/assets/分支管理.drawio b/docs/contribute_guide/assets/分支管理.drawio deleted file mode 100644 index 0e7e3d37..00000000 --- a/docs/contribute_guide/assets/分支管理.drawio +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/contribute_guide/assets/分支管理.png b/docs/contribute_guide/assets/分支管理.png deleted file mode 100644 index 867fecd4..00000000 Binary files a/docs/contribute_guide/assets/分支管理.png and /dev/null differ diff --git a/docs/contribute_guide/assets/环境初始化.jpg b/docs/contribute_guide/assets/环境初始化.jpg deleted file mode 100644 index 31ff5f28..00000000 Binary files a/docs/contribute_guide/assets/环境初始化.jpg and /dev/null differ diff --git a/docs/contribute_guide/assets/申请合并.jpg b/docs/contribute_guide/assets/申请合并.jpg deleted file mode 100644 index d02a7f50..00000000 Binary files a/docs/contribute_guide/assets/申请合并.jpg and /dev/null differ diff --git a/docs/contribute_guide/assets/问题认领.jpg b/docs/contribute_guide/assets/问题认领.jpg deleted file mode 100644 index 62da4728..00000000 Binary files a/docs/contribute_guide/assets/问题认领.jpg and /dev/null differ diff --git a/docs/contribute_guide/代码规范.md b/docs/contribute_guide/代码规范.md deleted file mode 100644 index be0bcfd2..00000000 --- a/docs/contribute_guide/代码规范.md +++ /dev/null @@ -1 +0,0 @@ -TODO. \ No newline at end of file diff --git a/docs/contribute_guide/贡献名单.md b/docs/contribute_guide/贡献名单.md deleted file mode 100644 index 41481787..00000000 --- a/docs/contribute_guide/贡献名单.md +++ /dev/null @@ -1,100 +0,0 @@ -# 贡献名单 - -- [贡献名单](#贡献名单) - - [1、贡献者角色](#1贡献者角色) - - [1.1、Maintainer](#11maintainer) - - [1.2、Committer](#12committer) - - [1.3、Contributor](#13contributor) - - [2、贡献者名单](#2贡献者名单) - - -## 1、贡献者角色 - -KnowStreaming 开发者包含 Maintainer、Committer、Contributor 三种角色,每种角色的标准定义如下。 - -### 1.1、Maintainer - -Maintainer 是对 KnowStreaming 项目的演进和发展做出显著贡献的个人。具体包含以下的标准: - -- 完成多个关键模块或者工程的设计与开发,是项目的核心开发人员; -- 持续的投入和激情,能够积极参与社区、官网、issue、PR 等项目相关事项的维护; -- 在社区中具有有目共睹的影响力,能够代表 KnowStreaming 参加重要的社区会议和活动; -- 具有培养 Committer 和 Contributor 的意识和能力; - -### 1.2、Committer - -Committer 是具有 KnowStreaming 仓库写权限的个人,包含以下的标准: - -- 能够在长时间内做持续贡献 issue、PR 的个人; -- 参与 issue 列表的维护及重要 feature 的讨论; -- 参与 code review; - -### 1.3、Contributor - -Contributor 是对 KnowStreaming 项目有贡献的个人,标准为: - -- 提交过 PR 并被合并; - ---- - -## 2、贡献者名单 - -开源贡献者名单(不定期更新) - -在名单内,但是没有收到贡献者礼品的同学,可以联系:szzdzhp001 - -| 姓名 | Github | 角色 | 公司 | -| ------------------- | ---------------------------------------------------------- | ----------- | -------- | -| 张亮 | [@zhangliangboy](https://github.com/zhangliangboy) | Maintainer | 滴滴出行 | -| 谢鹏 | [@PenceXie](https://github.com/PenceXie) | Maintainer | 滴滴出行 | -| 赵情融 | [@zqrferrari](https://github.com/zqrferrari) | Maintainer | 滴滴出行 | -| 石臻臻 | [@shirenchuang](https://github.com/shirenchuang) | Maintainer | 滴滴出行 | -| 曾巧 | [@ZQKC](https://github.com/ZQKC) | Maintainer | 滴滴出行 | -| 孙超 | [@lucasun](https://github.com/lucasun) | Maintainer | 滴滴出行 | -| 洪华驰 | [@brodiehong](https://github.com/brodiehong) | Maintainer | 滴滴出行 | -| 许喆 | [@potaaaaaato](https://github.com/potaaaaaato) | Committer | 滴滴出行 | -| 郭宇航 | [@GraceWalk](https://github.com/GraceWalk) | Committer | 滴滴出行 | -| 李伟 | [@velee](https://github.com/velee) | Committer | 滴滴出行 | -| 张占昌 | [@zzccctv](https://github.com/zzccctv) | Committer | 滴滴出行 | -| 王东方 | [@wangdongfang-aden](https://github.com/wangdongfang-aden) | Committer | 滴滴出行 | -| 王耀波 | [@WYAOBO](https://github.com/WYAOBO) | Committer | 滴滴出行 | -| 赵寅锐 | [@ZHAOYINRUI](https://github.com/ZHAOYINRUI) | Maintainer | 字节跳动 | -| haoqi123 | [@haoqi123](https://github.com/haoqi123) | Contributor | 前程无忧 | -| chaixiaoxue | [@chaixiaoxue](https://github.com/chaixiaoxue) | Contributor | SYNNEX | -| 陆晗 | [@luhea](https://github.com/luhea) | Contributor | 竞技世界 | -| Mengqi777 | [@Mengqi777](https://github.com/Mengqi777) | Contributor | 腾讯 | -| ruanliang-hualun | [@ruanliang-hualun](https://github.com/ruanliang-hualun) | Contributor | 网易 | -| 17hao | [@17hao](https://github.com/17hao) | Contributor | | -| Huyueeer | [@Huyueeer](https://github.com/Huyueeer) | Contributor | INVENTEC | -| lomodays207 | [@lomodays207](https://github.com/lomodays207) | Contributor | 建信金科 | -| Super .Wein(星痕) | [@superspeedone](https://github.com/superspeedone) | Contributor | 韵达 | -| Hongten | [@Hongten](https://github.com/Hongten) | Contributor | Shopee | -| 徐正熙 | [@hyper-xx)](https://github.com/hyper-xx) | Contributor | 滴滴出行 | -| RichardZhengkay | [@RichardZhengkay](https://github.com/RichardZhengkay) | Contributor | 趣街 | -| 罐子里的茶 | [@gzldc](https://github.com/gzldc) | Contributor | 道富 | -| 陈忠玉 | [@paula](https://github.com/chenzhongyu11) | Contributor | 平安产险 | -| 杨光 | [@yaangvipguang](https://github.com/yangvipguang) | Contributor | -| 王亚聪 | [@wangyacongi](https://github.com/wangyacongi) | Contributor | -| Yang Jing | [@yangbajing](https://github.com/yangbajing) | Contributor | | -| 刘新元 Liu XinYuan | [@Liu-XinYuan](https://github.com/Liu-XinYuan) | Contributor | | -| Joker | [@LiubeyJokerQueue](https://github.com/JokerQueue) | Contributor | 丰巢 | -| Eason Lau | [@Liubey](https://github.com/Liubey) | Contributor | | -| hailanxin | [@hailanxin](https://github.com/hailanxin) | Contributor | | -| Qi Zhang | [@zzzhangqi](https://github.com/zzzhangqi) | Contributor | 好雨科技 | -| fengxsong | [@fengxsong](https://github.com/fengxsong) | Contributor | | -| 谢晓东 | [@Strangevy](https://github.com/Strangevy) | Contributor | 花生日记 | -| ZhaoXinlong | [@ZhaoXinlong](https://github.com/ZhaoXinlong) | Contributor | | -| xuehaipeng | [@xuehaipeng](https://github.com/xuehaipeng) | Contributor | | -| 孔令续 | [@mrazkong](https://github.com/mrazkong) | Contributor | | -| pierre xiong | [@pierre94](https://github.com/pierre94) | Contributor | | -| PengShuaixin | [@PengShuaixin](https://github.com/PengShuaixin) | Contributor | | -| 梁壮 | [@lz](https://github.com/silent-night-no-trace) | Contributor | | -| 张晓寅 | [@ahu0605](https://github.com/ahu0605) | Contributor | 电信数智 | -| 黄海婷 | [@Huanghaiting](https://github.com/Huanghaiting) | Contributor | 云徙科技 | -| 任祥德 | [@RenChauncy](https://github.com/RenChauncy) | Contributor | 探马企服 | -| 胡圣林 | [@slhu997](https://github.com/slhu997) | Contributor | | -| 史泽颖 | [@shizeying](https://github.com/shizeying) | Contributor | | -| 王玉博 | [@Wyb7290](https://github.com/Wyb7290) | Committer | | -| 伍璇 | [@Luckywustone](https://github.com/Luckywustone) | Contributor || -| 邓苑 | [@CatherineDY](https://github.com/CatherineDY) | Contributor || -| 封琼凤 | [@Luckywustone](https://github.com/fengqiongfeng) | Committer || diff --git a/docs/contribute_guide/贡献指南.md b/docs/contribute_guide/贡献指南.md deleted file mode 100644 index 37cf89bc..00000000 --- a/docs/contribute_guide/贡献指南.md +++ /dev/null @@ -1,167 +0,0 @@ -# 贡献指南 - -- [贡献指南](#贡献指南) - - [1、行为准则](#1行为准则) - - [2、仓库规范](#2仓库规范) - - [2.1、Issue 规范](#21issue-规范) - - [2.2、Commit-Log 规范](#22commit-log-规范) - - [2.3、Pull-Request 规范](#23pull-request-规范) - - [3、操作示例](#3操作示例) - - [3.1、初始化环境](#31初始化环境) - - [3.2、认领问题](#32认领问题) - - [3.3、处理问题 \& 提交解决](#33处理问题--提交解决) - - [3.4、请求合并](#34请求合并) - - [4、常见问题](#4常见问题) - - [4.1、如何将多个 Commit-Log 合并为一个?](#41如何将多个-commit-log-合并为一个) - - ---- - - -欢迎 👏🏻 👏🏻 👏🏻 来到 `KnowStreaming`。本文档是关于如何为 `KnowStreaming` 做出贡献的指南。如果您发现不正确或遗漏的内容, 请留下您的意见/建议。 - - ---- - - -## 1、行为准则 - -请务必阅读并遵守我们的:[行为准则](https://github.com/didi/KnowStreaming/blob/master/CODE_OF_CONDUCT.md)。 - - -## 2、仓库规范 - -### 2.1、Issue 规范 - -按要求,在 [创建Issue](https://github.com/didi/KnowStreaming/issues/new/choose) 中创建ISSUE即可。 - -需要重点说明的是: -- 提供出现问题的环境信息,包括使用的系统,使用的KS版本等; -- 提供出现问题的复现方式; - - -### 2.2、Commit-Log 规范 - -`Commit-Log` 包含三部分 `Header`、`Body`、`Footer`。其中 `Header` 是必须的,格式固定,`Body` 在变更有必要详细解释时使用。 - - -**1、`Header` 规范** - -`Header` 格式为 `[Type]Message(#IssueID)`, 主要有三部分组成,分别是`Type`、`Message`、`IssueID`, - -- `Type`:说明这个提交是哪一个类型的,比如有 Bugfix、Feature、Optimize等; -- `Message`:说明提交的信息,比如修复xx问题; -- `IssueID`:该提交,关联的Issue的编号; - - -实际例子:[`[Bugfix]修复新接入的集群,Controller-Host不显示的问题(#927)`](https://github.com/didi/KnowStreaming/pull/933/commits) - - - -**2、`Body` 规范** - -一般不需要,如果解决了较复杂问题,或者代码较多,需要 `Body` 说清楚解决的问题,解决的思路等信息。 - ---- - -**3、实际例子** - -``` -[Optimize]优化 MySQL & ES 测试容器的初始化(#906) - -主要的变更 -1、knowstreaming/knowstreaming-manager 容器; -2、knowstreaming/knowstreaming-mysql 容器调整为使用 mysql:5.7 容器; -3、初始化 mysql:5.7 容器后,增加初始化 MySQL 表及数据的动作; - -被影响的变更: -1、移动 km-dist/init/sql 下的MySQL初始化脚本至 km-persistence/src/main/resource/sql 下,以便项目测试时加载到所需的初始化 SQL; -2、删除无用的 km-dist/init/template 目录; -3、因为 km-dist/init/sql 和 km-dist/init/template 目录的调整,因此也调整 ReleaseKnowStreaming.xml 内的文件内容; -``` - - -**TODO : 后续有兴趣的同学,可以考虑引入 Git 的 Hook 进行更好的 Commit-Log 的管理。** - - -### 2.3、Pull-Request 规范 - -详细见:[PULL-REQUEST 模版](../../.github/PULL_REQUEST_TEMPLATE.md) - -需要重点说明的是: - -- 任何 PR 都必须与有效 ISSUE 相关联。否则, PR 将被拒绝; -- 一个分支只修改一件事,一个 PR 只修改一件事; - ---- - - -## 3、操作示例 - -本节主要介绍对 `KnowStreaming` 进行代码贡献时,相关的操作方式及操作命令。 - -名词说明: -- 主仓库:https://github.com/didi/KnowStreaming 这个仓库为主仓库。 -- 分仓库:Fork 到自己账号下的 KnowStreaming 仓库为分仓库; - - -### 3.1、初始化环境 - -1. `Fork KnowStreaming` 主仓库至自己账号下,见 https://github.com/didi/KnowStreaming 地址右上角的 `Fork` 按钮; -2. 克隆分仓库至本地:`git clone git@github.com:xxxxxxx/KnowStreaming.git`,该仓库的简写名通常是`origin`; -3. 添加主仓库至本地:`git remote add upstream https://github.com/didi/KnowStreaming`,`upstream`是主仓库在本地的简写名,可以随意命名,前后保持一致即可; -4. 拉取主仓库代码:`git fetch upstream`; -5. 拉取分仓库代码:`git fetch origin`; -6. 将主仓库的`master`分支,拉取到本地并命名为`github_master`:`git checkout -b upstream/master`; - -最后,我们来看一下初始化完成之后的大致效果,具体如下图所示: -![环境初始化](./assets/环境初始化.jpg) - - -至此,我们的环境就初始化好了。后续,`github_master` 分支就是主仓库的`master`分支,我们可以使用`git pull`拉取该分支的最新代码,还可以使用`git checkout -b xxx`拉取我们想要的分支。 - - - -### 3.2、认领问题 - -在文末评论说明自己要处理该问题即可,具体如下图所示: - -![问题认领](./assets/问题认领.jpg) - - -### 3.3、处理问题 & 提交解决 - -本节主要介绍一下处理问题 & 提交解决过程中的分支管理,具体如下图所示: - -![分支管理](./assets/分支管理.png) - -1. 切换到主分支:`git checkout github_master`; -2. 主分支拉最新代码:`git pull`; -3. 基于主分支拉新分支:`git checkout -b fix_928`; -4. 提交代码,安装commit的规范进行提交,例如:`git commit -m "[Optimize]优化xxx问题(#928)"`; -5. 提交到自己远端仓库:`git push --set-upstream origin fix_928`; -6. `GitHub` 页面发起 `Pull Request` 请求,管理员合入主仓库。这部分详细见下一节; - - -### 3.4、请求合并 - -代码在提交到 `GitHub` 分仓库之后,就可以在 `GitHub` 的网站创建 `Pull Request`,申请将代码合入主仓库了。 `Pull Request` 具体见下图所示: - -![申请合并](./assets/申请合并.jpg) - - - -[Pull Request 创建的例子](https://github.com/didi/KnowStreaming/pull/945) - - - ---- - - -## 4、常见问题 - -### 4.1、如何将多个 Commit-Log 合并为一个? - -可以使用 `git rebase -i` 命令进行解决。 - - diff --git a/docs/dev_guide/Task模块简介.md b/docs/dev_guide/Task模块简介.md deleted file mode 100644 index 688e033b..00000000 --- a/docs/dev_guide/Task模块简介.md +++ /dev/null @@ -1,264 +0,0 @@ -# Task模块简介 - -## 1、Task简介 - -在 KnowStreaming 中(下面简称KS),Task模块主要是用于执行一些周期任务,包括Cluster、Broker、Topic等指标的定时采集,集群元数据定时更新至DB,集群状态的健康巡检等。在KS中,与Task模块相关的代码,我们都统一存放在km-task模块中。 - -Task模块是基于 LogiCommon 中的Logi-Job组件实现的任务周期执行,Logi-Job 的功能类似 XXX-Job,它是 XXX-Job 在 KnowStreaming 的内嵌实现,主要用于简化 KnowStreaming 的部署。 -Logi-Job 的任务总共有两种执行模式,分别是: - -+ 广播模式:同一KS集群下,同一任务周期中,所有KS主机都会执行该定时任务。 -+ 抢占模式:同一KS集群下,同一任务周期中,仅有某一台KS主机会执行该任务。 - -KS集群范围定义:连接同一个DB,且application.yml中的spring.logi-job.app-name的名称一样的KS主机为同一KS集群。 - -## 2、使用指南 - -Task模块基于Logi-Job的广播模式与抢占模式,分别实现了任务的抢占执行、重复执行以及均衡执行,他们之间的差别是: - -+ 抢占执行:同一个KS集群,同一个任务执行周期中,仅有一台KS主机执行该任务; -+ 重复执行:同一个KS集群,同一个任务执行周期中,所有KS主机都执行该任务。比如3台KS主机,3个Kafka集群,此时每台KS主机都会去采集这3个Kafka集群的指标; -+ 均衡执行:同一个KS集群,同一个任务执行周期中,每台KS主机仅执行该任务的一部分,所有的KS主机共同协作完成了任务。比如3台KS主机,3个Kafka集群,稳定运行情况下,每台KS主机将仅采集1个Kafka集群的指标,3台KS主机共同完成3个Kafka集群指标的采集。 - -下面我们看一下具体例子。 - -### 2.1、抢占模式——抢占执行 - -功能说明: - -+ 同一个KS集群,同一个任务执行周期中,仅有一台KS主机执行该任务。 - -代码例子: - -```java -// 1、实现Job接口,重写excute方法; -// 2、在类上添加@Task注解,并且配置好信息,指定为随机抢占模式; -// 效果:KS集群中,每5秒,会有一台KS主机输出 "测试定时任务运行中"; -@Task(name = "TestJob", - description = "测试定时任务", - cron = "*/5 * * * * ?", - autoRegister = true, - consensual = ConsensualEnum.RANDOM, // 这里一定要设置为RANDOM - timeout = 6 * 60) -public class TestJob implements Job { - - @Override - public TaskResult execute(JobContext jobContext) throws Exception { - - System.out.println("测试定时任务运行中"); - return new TaskResult(); - - } - -} -``` - - - -### 2.2、广播模式——重复执行 - -功能说明: - -+ 同一个KS集群,同一个任务执行周期中,所有KS主机都执行该任务。比如3台KS主机,3个Kafka集群,此时每台KS主机都会去重复采集这3个Kafka集群的指标。 - -代码例子: - -```java -// 1、实现Job接口,重写excute方法; -// 2、在类上添加@Task注解,并且配置好信息,指定为广播抢占模式; -// 效果:KS集群中,每5秒,每台KS主机都会输出 "测试定时任务运行中"; -@Task(name = "TestJob", - description = "测试定时任务", - cron = "*/5 * * * * ?", - autoRegister = true, - consensual = ConsensualEnum.BROADCAST, // 这里一定要设置为BROADCAST - timeout = 6 * 60) -public class TestJob implements Job { - - @Override - public TaskResult execute(JobContext jobContext) throws Exception { - - System.out.println("测试定时任务运行中"); - return new TaskResult(); - - } - -} -``` - - - -### 2.3、广播模式——均衡执行 - -功能说明: - -+ 同一个KS集群,同一个任务执行周期中,每台KS主机仅执行该任务的一部分,所有的KS主机共同协作完成了任务。比如3台KS主机,3个Kafka集群,稳定运行情况下,每台KS主机将仅采集1个Kafka集群的指标,3台KS主机共同完成3个Kafka集群指标的采集。 - -代码例子: - -+ 该模式有点特殊,是KS基于Logi-Job的广播模式,做的一个扩展,以下为一个使用例子: - -```java -// 1、继承AbstractClusterPhyDispatchTask,实现processSubTask方法; -// 2、在类上添加@Task注解,并且配置好信息,指定为广播模式; -// 效果:在本样例中,每隔1分钟ks会将所有的kafka集群列表在ks集群主机内均衡拆分,每台主机会将分发到自身的Kafka集群依次执行processSubTask方法,实现KS集群的任务协同处理。 -@Task(name = "kmJobTask", - description = "km job 模块调度执行任务", - cron = "0 0/1 * * * ? *", - autoRegister = true, - consensual = ConsensualEnum.BROADCAST, - timeout = 6 * 60) -public class KMJobTask extends AbstractClusterPhyDispatchTask { - - @Autowired - private JobService jobService; - - @Override - protected TaskResult processSubTask(ClusterPhy clusterPhy, long triggerTimeUnitMs) throws Exception { - jobService.scheduleJobByClusterId(clusterPhy.getId()); - return TaskResult.SUCCESS; - } -} -``` - - - -## 3、原理简介 - -### 3.1、Task注解说明 - -```java -public @interface Task { - String name() default ""; //任务名称 - String description() default ""; //任务描述 - String owner() default "system"; //拥有者 - String cron() default ""; //定时执行的时间策略 - int retryTimes() default 0; //失败以后所能重试的最大次数 - long timeout() default 0; //在超时时间里重试 - //是否自动注册任务到数据库中 - //如果设置为false,需要手动去数据库km_task表注册定时任务信息。数据库记录和@Task注解缺一不可 - boolean autoRegister() default false; - //执行模式:广播、随机抢占 - //广播模式:同一集群下的所有服务器都会执行该定时任务 - //随机抢占模式:同一集群下随机一台服务器执行该任务 - ConsensualEnum consensual() default ConsensualEnum.RANDOM; - } -``` - -### 3.2、数据库表介绍 - -+ logi_task:记录项目中的定时任务信息,一个定时任务对应一条记录。 -+ logi_job:具体任务执行信息。 -+ logi_job_log:定时任务的执行日志。 -+ logi_worker:记录机器信息,实现集群控制。 - -### 3.3、均衡执行简介 - -#### 3.3.1、类关系图 - -这里以KMJobTask为例,简单介绍KM中的定时任务实现逻辑。 - -​ ![img](http://img-ys011.didistatic.com/static/dc2img/do1_knC85EtQ8Vbn1BcBzcjz) - -+ Job:使用logi组件实现定时任务,必须实现该接口。 -+ Comparable & EntufyIdInterface:比较接口,实现任务的排序逻辑。 -+ AbstractDispatchTask:实现广播模式下,任务的均衡分发。 -+ AbstractClusterPhyDispatchTask:对分发到当前服务器的集群列表进行枚举。 -+ KMJobTask:实现对单个集群的定时任务处理。 - -#### 3.3.2、关键类代码 - -+ **AbstractDispatchTask类** - -```java -// 实现Job接口的抽象类,进行任务的负载均衡执行 -public abstract class AbstractDispatchTask implements Job { - - // 罗列所有的任务 - protected abstract List listAllTasks(); - - // 执行被分配给该KS主机的任务 - protected abstract TaskResult processTask(List subTaskList, long triggerTimeUnitMs); - - // 被Logi-Job触发执行该方法 - // 该方法进行任务的分配 - @Override - public TaskResult execute(JobContext jobContext) { - try { - - long triggerTimeUnitMs = System.currentTimeMillis(); - - // 获取所有的任务 - List allTaskList = this.listAllTasks(); - - // 计算当前KS机器需要执行的任务 - List subTaskList = this.selectTask(allTaskList, jobContext.getAllWorkerCodes(), jobContext.getCurrentWorkerCode()); - - // 进行任务处理 - return this.processTask(subTaskList, triggerTimeUnitMs); - } catch (Exception e) { - // ... - } - } -} -``` - -+ **AbstractClusterPhyDispatchTask类** - -```java -// 继承AbstractDispatchTask的抽象类,对Kafka集群进行负载均衡执行 -public abstract class AbstractClusterPhyDispatchTask extends AbstractDispatchTask { - - // 执行被分配的任务,具体由子类实现 - protected abstract TaskResult processSubTask(ClusterPhy clusterPhy, long triggerTimeUnitMs) throws Exception; - - // 返回所有的Kafka集群 - @Override - public List listAllTasks() { - return clusterPhyService.listAllClusters(); - } - - // 执行被分配给该KS主机的Kafka集群任务 - @Override - public TaskResult processTask(List subTaskList, long triggerTimeUnitMs) { // ... } - -} -``` - -+ **KMJobTask类** - -```java -// 加上@Task注解,并配置任务执行信息 -@Task(name = "kmJobTask", - description = "km job 模块调度执行任务", - cron = "0 0/1 * * * ? *", - autoRegister = true, - consensual = ConsensualEnum.BROADCAST, - timeout = 6 * 60) -// 继承AbstractClusterPhyDispatchTask类 -public class KMJobTask extends AbstractClusterPhyDispatchTask { - - @Autowired - private JobService jobService; - - // 执行该Kafka集群的Job模块的任务 - @Override - protected TaskResult processSubTask(ClusterPhy clusterPhy, long triggerTimeUnitMs) throws Exception { - jobService.scheduleJobByClusterId(clusterPhy.getId()); - return TaskResult.SUCCESS; - } -} -``` - -#### 3.3.3、均衡执行总结 - -均衡执行的实现原理总结起来就是以下几点: - -+ Logi-Job设置为广播模式,触发所有的KS主机执行任务; -+ 每台KS主机,被触发执行后,按照统一的规则,对任务列表,KS集群主机列表进行排序。然后按照顺序将任务列表均衡的分配给排序后的KS集群主机。KS集群稳定运行情况下,这一步保证了每台KS主机之间分配到的任务列表不重复,不丢失。 -+ 最后每台KS主机,执行被分配到的任务。 - -## 4、注意事项 - -+ 不能100%保证任务在一个周期内,且仅且执行一次,可能出现重复执行或丢失的情况,所以必须严格是且仅且执行一次的任务,不建议基于Logi-Job进行任务控制。 -+ 尽量让Logi-Job仅负责任务的触发,后续的执行建议放到自己创建的线程池中进行。 diff --git a/docs/dev_guide/assets/connect_jmx_failed/check_jmx_opened.jpg b/docs/dev_guide/assets/connect_jmx_failed/check_jmx_opened.jpg deleted file mode 100644 index 1890983c..00000000 Binary files a/docs/dev_guide/assets/connect_jmx_failed/check_jmx_opened.jpg and /dev/null differ diff --git a/docs/dev_guide/assets/support_kerberos_zk/need_modify_code.png b/docs/dev_guide/assets/support_kerberos_zk/need_modify_code.png deleted file mode 100644 index c51c1c00..00000000 Binary files a/docs/dev_guide/assets/support_kerberos_zk/need_modify_code.png and /dev/null differ diff --git a/docs/dev_guide/assets/support_kerberos_zk/success_1.png b/docs/dev_guide/assets/support_kerberos_zk/success_1.png deleted file mode 100644 index f15ed55e..00000000 Binary files a/docs/dev_guide/assets/support_kerberos_zk/success_1.png and /dev/null differ diff --git a/docs/dev_guide/assets/support_kerberos_zk/success_2.png b/docs/dev_guide/assets/support_kerberos_zk/success_2.png deleted file mode 100644 index f15ed55e..00000000 Binary files a/docs/dev_guide/assets/support_kerberos_zk/success_2.png and /dev/null differ diff --git a/docs/dev_guide/assets/support_kerberos_zk/watch_user_acl.png b/docs/dev_guide/assets/support_kerberos_zk/watch_user_acl.png deleted file mode 100644 index b076316b..00000000 Binary files a/docs/dev_guide/assets/support_kerberos_zk/watch_user_acl.png and /dev/null differ diff --git a/docs/dev_guide/多版本兼容方案.md b/docs/dev_guide/多版本兼容方案.md deleted file mode 100644 index f41c01d4..00000000 --- a/docs/dev_guide/多版本兼容方案.md +++ /dev/null @@ -1,43 +0,0 @@ - -## 4.2、Kafka 多版本兼容方案 - -  当前 KnowStreaming 支持纳管多个版本的 kafka 集群,由于不同版本的 kafka 在指标采集、接口查询、行为操作上有些不一致,因此 KnowStreaming 需要一套机制来解决多 kafka 版本的纳管兼容性问题。 - -### 4.2.1、整体思路 - -  由于需要纳管多个 kafka 版本,而且未来还可能会纳管非 kafka 官方的版本,kafka 的版本号会存在着多种情况,所以首先要明确一个核心思想:KnowStreaming 提供尽可能多的纳管能力,但是不提供无限的纳管能力,每一个版本的 KnowStreaming 只纳管其自身声明的 kafka 版本,后续随着 KnowStreaming 自身版本的迭代,会逐步支持更多 kafka 版本的纳管接入。 - -### 4.2.2、构建版本兼容列表 - -  每一个版本的 KnowStreaming 都声明一个自身支持纳管的 kafka 版本列表,并且对 kafka 的版本号进行归一化处理,后续所有 KnowStreaming 对不同 kafka 集群的操作都和这个集群对应的版本号严格相关。 - -  KnowStreaming 对外提供自身所支持的 kafka 版本兼容列表,用以声明自身支持的版本范围。 - -  对于在集群接入过程中,如果希望接入当前 KnowStreaming 不支持的 kafka 版本的集群,KnowStreaming 建议在于的过程中选择相近的版本号接入。 - -### 4.2.3、构建版本兼容性字典 - -  在构建了 KnowStreaming 支持的 kafka 版本列表的基础上,KnowStreaming 在实现过程中,还会声明自身支持的所有兼容性,构建兼容性字典。 - -  当前 KnowStreaming 支持的 kafka 版本兼容性字典包括三个维度: - -- 指标采集:同一个指标在不同 kafka 版本下可能获取的方式不一样,不同版本的 kafka 可能会有不同的指标,因此对于指标采集的处理需要构建兼容性字典。 -- kafka api:同一个 kafka 的操作处理的方式在不同 kafka 版本下可能存在不一致,如:topic 的创建,因此 KnowStreaming 针对不同 kafka-api 的处理需要构建兼容性字典。 -- 平台操作:KnowStreaming 在接入不同版本的 kafka 集群的时候,在平台页面上会根据不同的 kafka 版。 - -兼容性字典的核心设计字段如下: - -| 兼容性维度 | 兼容项名称 | 最小 Kafka 版本号(归一化) | 最大 Kafka 版本号(归一化) | 处理器 | -| ---------- | ---------- | --------------------------- | --------------------------- | ------ | - -KS-KM 根据其需要纳管的 kafka 版本,按照上述三个维度构建了完善了兼容性字典。 - -### 4.2.4、兼容性问题 - -  KS-KM 的每个版本针对需要纳管的 kafka 版本列表,事先分析各个版本的差异性和产品需求,同时 KS-KM 构建了一套专门处理兼容性的服务,来进行兼容性的注册、字典构建、处理器分发等操作,其中版本兼容性处理器是来具体处理不同 kafka 版本差异性的地方。 - -​ ![registerHandler](http://img-ys011.didistatic.com/static/dc2img/do1_WxVTzndYE59ah5DFrMfn) - -  如上图所示,KS-KM 的 topic 服务在面对不同 kafka 版本时,其 topic 的创建、删除、扩容由于 kafka 版本自身的差异,导致 KnowStreaming 的处理也不一样,所以需要根据不同的 kafka 版本来实现不同的兼容性处理器,同时向 KnowStreaming 的兼容服务进行兼容性的注册,构建兼容性字典,后续在 KnowStreaming 的运行过程中,针对不同的 kafka 版本即可分发到不同的处理器中执行。 - -  后续随着 KnowStreaming 产品的发展,如果有新的兼容性的地方需要增加,只需要实现新版本的处理器,增加注册项即可。 diff --git a/docs/dev_guide/指标说明.md b/docs/dev_guide/指标说明.md deleted file mode 100644 index 1eb9a94b..00000000 --- a/docs/dev_guide/指标说明.md +++ /dev/null @@ -1,152 +0,0 @@ -## 3.3、指标说明 - -当前 KnowStreaming 支持针对 kafka 集群的多维度指标的采集和展示,同时也支持多个 kafka 版本的指标进行兼容,以下是 KnowStreaming 支持的指标说明。 - -现在对当前 KnowStreaming 支持的指标从指标名称、指标单位、指标说明、kafka 版本、企业/开源版指标 五个维度进行说明。 - -### 3.3.1、Cluster 指标 - -| 指标名称 | 指标单位 | 指标含义 | kafka 版本 | 企业/开源版指标 | -| ------------------------- | -------- | ------------------------------------ | ---------------- | --------------- | -| HealthScore | 分 | 集群总体的健康分 | 全部版本 | 开源版 | -| HealthCheckPassed | 个 | 集群总体健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal | 个 | 集群总体健康检查总数 | 全部版本 | 开源版 | -| HealthScore_Topics | 分 | 集群 Topics 的健康分 | 全部版本 | 开源版 | -| HealthCheckPassed_Topics | 个 | 集群 Topics 健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal_Topics | 个 | 集群 Topics 健康检查总数 | 全部版本 | 开源版 | -| HealthScore_Brokers | 分 | 集群 Brokers 的健康分 | 全部版本 | 开源版 | -| HealthCheckPassed_Brokers | 个 | 集群 Brokers 健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal_Brokers | 个 | 集群 Brokers 健康检查总数 | 全部版本 | 开源版 | -| HealthScore_Groups | 分 | 集群 Groups 的健康分 | 全部版本 | 开源版 | -| HealthCheckPassed_Groups | 个 | 集群 Groups 健康检查总数 | 全部版本 | 开源版 | -| HealthCheckTotal_Groups | 个 | 集群 Groups 健康检查总数 | 全部版本 | 开源版 | -| HealthScore_Cluster | 分 | 集群自身的健康分 | 全部版本 | 开源版 | -| HealthCheckPassed_Cluster | 个 | 集群自身健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal_Cluster | 个 | 集群自身健康检查总数 | 全部版本 | 开源版 | -| TotalRequestQueueSize | 个 | 集群中总的请求队列数 | 全部版本 | 开源版 | -| TotalResponseQueueSize | 个 | 集群中总的响应队列数 | 全部版本 | 开源版 | -| EventQueueSize | 个 | 集群中 Controller 的 EventQueue 大小 | 2.0.0 及以上版本 | 开源版 | -| ActiveControllerCount | 个 | 集群中存活的 Controller 数 | 全部版本 | 开源版 | -| TotalProduceRequests | 个 | 集群中的 Produce 每秒请求数 | 全部版本 | 开源版 | -| TotalLogSize | byte | 集群总的已使用的磁盘大小 | 全部版本 | 开源版 | -| ConnectionsCount | 个 | 集群的连接(Connections)个数 | 全部版本 | 开源版 | -| Zookeepers | 个 | 集群中存活的 zk 节点个数 | 全部版本 | 开源版 | -| ZookeepersAvailable | 是/否 | ZK 地址是否合法 | 全部版本 | 开源版 | -| Brokers | 个 | 集群的 broker 的总数 | 全部版本 | 开源版 | -| BrokersAlive | 个 | 集群的 broker 的存活数 | 全部版本 | 开源版 | -| BrokersNotAlive | 个 | 集群的 broker 的未存活数 | 全部版本 | 开源版 | -| Replicas | 个 | 集群中 Replica 的总数 | 全部版本 | 开源版 | -| Topics | 个 | 集群中 Topic 的总数 | 全部版本 | 开源版 | -| Partitions | 个 | 集群的 Partitions 总数 | 全部版本 | 开源版 | -| PartitionNoLeader | 个 | 集群中的 PartitionNoLeader 总数 | 全部版本 | 开源版 | -| PartitionMinISR_S | 个 | 集群中的小于 PartitionMinISR 总数 | 全部版本 | 开源版 | -| PartitionMinISR_E | 个 | 集群中的等于 PartitionMinISR 总数 | 全部版本 | 开源版 | -| PartitionURP | 个 | 集群中的未同步的 Partition 总数 | 全部版本 | 开源版 | -| MessagesIn | 条/s | 集群每条消息写入条数 | 全部版本 | 开源版 | -| Messages | 条 | 集群总的消息条数 | 全部版本 | 开源版 | -| LeaderMessages | 条 | 集群中 leader 总的消息条数 | 全部版本 | 开源版 | -| BytesIn | byte/s | 集群的每秒写入字节数 | 全部版本 | 开源版 | -| BytesIn_min_5 | byte/s | 集群的每秒写入字节数,5 分钟均值 | 全部版本 | 开源版 | -| BytesIn_min_15 | byte/s | 集群的每秒写入字节数,15 分钟均值 | 全部版本 | 开源版 | -| BytesOut | byte/s | 集群的每秒流出字节数 | 全部版本 | 开源版 | -| BytesOut_min_5 | byte/s | 集群的每秒流出字节数,5 分钟均值 | 全部版本 | 开源版 | -| BytesOut_min_15 | byte/s | 集群的每秒流出字节数,15 分钟均值 | 全部版本 | 开源版 | -| Groups | 个 | 集群中 Group 的总数 | 全部版本 | 开源版 | -| GroupActives | 个 | 集群中 ActiveGroup 的总数 | 全部版本 | 开源版 | -| GroupEmptys | 个 | 集群中 EmptyGroup 的总数 | 全部版本 | 开源版 | -| GroupRebalances | 个 | 集群中 RebalanceGroup 的总数 | 全部版本 | 开源版 | -| GroupDeads | 个 | 集群中 DeadGroup 的总数 | 全部版本 | 开源版 | -| Alive | 是/否 | 集群是否存活,1:存活;0:没有存活 | 全部版本 | 开源版 | -| AclEnable | 是/否 | 集群是否开启 Acl,1:是;0:否 | 全部版本 | 开源版 | -| Acls | 个 | ACL 数 | 全部版本 | 开源版 | -| AclUsers | 个 | ACL-KafkaUser 数 | 全部版本 | 开源版 | -| AclTopics | 个 | ACL-Topic 数 | 全部版本 | 开源版 | -| AclGroups | 个 | ACL-Group 数 | 全部版本 | 开源版 | -| Jobs | 个 | 集群任务总数 | 全部版本 | 开源版 | -| JobsRunning | 个 | 集群 running 任务总数 | 全部版本 | 开源版 | -| JobsWaiting | 个 | 集群 waiting 任务总数 | 全部版本 | 开源版 | -| JobsSuccess | 个 | 集群 success 任务总数 | 全部版本 | 开源版 | -| JobsFailed | 个 | 集群 failed 任务总数 | 全部版本 | 开源版 | -| LoadReBalanceEnable | 是/否 | 是否开启均衡, 1:是;0:否 | 全部版本 | 企业版 | -| LoadReBalanceCpu | 是/否 | CPU 是否均衡, 1:是;0:否 | 全部版本 | 企业版 | -| LoadReBalanceNwIn | 是/否 | BytesIn 是否均衡, 1:是;0:否 | 全部版本 | 企业版 | -| LoadReBalanceNwOut | 是/否 | BytesOut 是否均衡, 1:是;0:否 | 全部版本 | 企业版 | -| LoadReBalanceDisk | 是/否 | Disk 是否均衡, 1:是;0:否 | 全部版本 | 企业版 | - -### 3.3.2、Broker 指标 - -| 指标名称 | 指标单位 | 指标含义 | kafka 版本 | 企业/开源版指标 | -| ----------------------- | -------- | ------------------------------------- | ---------- | --------------- | -| HealthScore | 分 | Broker 健康分 | 全部版本 | 开源版 | -| HealthCheckPassed | 个 | Broker 健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal | 个 | Broker 健康检查总数 | 全部版本 | 开源版 | -| TotalRequestQueueSize | 个 | Broker 的请求队列大小 | 全部版本 | 开源版 | -| TotalResponseQueueSize | 个 | Broker 的应答队列大小 | 全部版本 | 开源版 | -| ReplicationBytesIn | byte/s | Broker 的副本流入流量 | 全部版本 | 开源版 | -| ReplicationBytesOut | byte/s | Broker 的副本流出流量 | 全部版本 | 开源版 | -| MessagesIn | 条/s | Broker 的每秒消息流入条数 | 全部版本 | 开源版 | -| TotalProduceRequests | 个/s | Broker 上 Produce 的每秒请求数 | 全部版本 | 开源版 | -| NetworkProcessorAvgIdle | % | Broker 的网络处理器的空闲百分比 | 全部版本 | 开源版 | -| RequestHandlerAvgIdle | % | Broker 上请求处理器的空闲百分比 | 全部版本 | 开源版 | -| PartitionURP | 个 | Broker 上的未同步的副本的个数 | 全部版本 | 开源版 | -| ConnectionsCount | 个 | Broker 上网络链接的个数 | 全部版本 | 开源版 | -| BytesIn | byte/s | Broker 的每秒数据写入量 | 全部版本 | 开源版 | -| BytesIn_min_5 | byte/s | Broker 的每秒数据写入量,5 分钟均值 | 全部版本 | 开源版 | -| BytesIn_min_15 | byte/s | Broker 的每秒数据写入量,15 分钟均值 | 全部版本 | 开源版 | -| BytesOut | byte/s | Broker 的每秒数据流出量 | 全部版本 | 开源版 | -| BytesOut_min_5 | byte/s | Broker 的每秒数据流出量,5 分钟均值 | 全部版本 | 开源版 | -| BytesOut_min_15 | byte/s | Broker 的每秒数据流出量,15 分钟均值 | 全部版本 | 开源版 | -| ReassignmentBytesIn | byte/s | Broker 的每秒数据迁移写入量 | 全部版本 | 开源版 | -| ReassignmentBytesOut | byte/s | Broker 的每秒数据迁移流出量 | 全部版本 | 开源版 | -| Partitions | 个 | Broker 上的 Partition 个数 | 全部版本 | 开源版 | -| PartitionsSkew | % | Broker 上的 Partitions 倾斜度 | 全部版本 | 开源版 | -| Leaders | 个 | Broker 上的 Leaders 个数 | 全部版本 | 开源版 | -| LeadersSkew | % | Broker 上的 Leaders 倾斜度 | 全部版本 | 开源版 | -| LogSize | byte | Broker 上的消息容量大小 | 全部版本 | 开源版 | -| Alive | 是/否 | Broker 是否存活,1:存活;0:没有存活 | 全部版本 | 开源版 | - -### 3.3.3、Topic 指标 - -| 指标名称 | 指标单位 | 指标含义 | kafka 版本 | 企业/开源版指标 | -| --------------------- | -------- | ------------------------------------- | ---------- | --------------- | -| HealthScore | 分 | 健康分 | 全部版本 | 开源版 | -| HealthCheckPassed | 个 | 健康项检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal | 个 | 健康项检查总数 | 全部版本 | 开源版 | -| TotalProduceRequests | 条/s | Topic 的 TotalProduceRequests | 全部版本 | 开源版 | -| BytesRejected | 个/s | Topic 的每秒写入拒绝量 | 全部版本 | 开源版 | -| FailedFetchRequests | 个/s | Topic 的 FailedFetchRequests | 全部版本 | 开源版 | -| FailedProduceRequests | 个/s | Topic 的 FailedProduceRequests | 全部版本 | 开源版 | -| ReplicationCount | 个 | Topic 总的副本数 | 全部版本 | 开源版 | -| Messages | 条 | Topic 总的消息数 | 全部版本 | 开源版 | -| MessagesIn | 条/s | Topic 每秒消息条数 | 全部版本 | 开源版 | -| BytesIn | byte/s | Topic 每秒消息写入字节数 | 全部版本 | 开源版 | -| BytesIn_min_5 | byte/s | Topic 每秒消息写入字节数,5 分钟均值 | 全部版本 | 开源版 | -| BytesIn_min_15 | byte/s | Topic 每秒消息写入字节数,15 分钟均值 | 全部版本 | 开源版 | -| BytesOut | byte/s | Topic 每秒消息流出字节数 | 全部版本 | 开源版 | -| BytesOut_min_5 | byte/s | Topic 每秒消息流出字节数,5 分钟均值 | 全部版本 | 开源版 | -| BytesOut_min_15 | byte/s | Topic 每秒消息流出字节数,15 分钟均值 | 全部版本 | 开源版 | -| LogSize | byte | Topic 的大小 | 全部版本 | 开源版 | -| PartitionURP | 个 | Topic 未同步的副本数 | 全部版本 | 开源版 | - -### 3.3.4、Partition 指标 - -| 指标名称 | 指标单位 | 指标含义 | kafka 版本 | 企业/开源版指标 | -| -------------- | -------- | ----------------------------------------- | ---------- | --------------- | -| LogEndOffset | 条 | Partition 中 leader 副本的 LogEndOffset | 全部版本 | 开源版 | -| LogStartOffset | 条 | Partition 中 leader 副本的 LogStartOffset | 全部版本 | 开源版 | -| Messages | 条 | Partition 总的消息数 | 全部版本 | 开源版 | -| BytesIn | byte/s | Partition 的每秒消息流入字节数 | 全部版本 | 开源版 | -| BytesOut | byte/s | Partition 的每秒消息流出字节数 | 全部版本 | 开源版 | -| LogSize | byte | Partition 的大小 | 全部版本 | 开源版 | - -### 3.3.5、Group 指标 - -| 指标名称 | 指标单位 | 指标含义 | kafka 版本 | 企业/开源版指标 | -| ----------------- | -------- | -------------------------- | ---------- | --------------- | -| HealthScore | 分 | 健康分 | 全部版本 | 开源版 | -| HealthCheckPassed | 个 | 健康检查通过数 | 全部版本 | 开源版 | -| HealthCheckTotal | 个 | 健康检查总数 | 全部版本 | 开源版 | -| OffsetConsumed | 条 | Consumer 的 CommitedOffset | 全部版本 | 开源版 | -| LogEndOffset | 条 | Consumer 的 LogEndOffset | 全部版本 | 开源版 | -| Lag | 条 | Group 消费者的 Lag 数 | 全部版本 | 开源版 | -| State | 个 | Group 组的状态 | 全部版本 | 开源版 | diff --git a/docs/dev_guide/支持Kerberos认证的ZK.md b/docs/dev_guide/支持Kerberos认证的ZK.md deleted file mode 100644 index 116643ba..00000000 --- a/docs/dev_guide/支持Kerberos认证的ZK.md +++ /dev/null @@ -1,69 +0,0 @@ - -## 支持Kerberos认证的ZK - - -### 1、修改 KnowStreaming 代码 - -代码位置:`src/main/java/com/xiaojukeji/know/streaming/km/persistence/kafka/KafkaAdminZKClient.java` - -将 `createZKClient` 的 `135行 的 false 改为 true -![need_modify_code.png](assets/support_kerberos_zk/need_modify_code.png) - - -修改完后重新进行打包编译,打包编译见:[打包编译](https://github.com/didi/KnowStreaming/blob/master/docs/install_guide/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%89%93%E5%8C%85%E6%89%8B%E5%86%8C.md -) - - - -### 2、查看用户在ZK的ACL - -假设我们使用的用户是 `kafka` 这个用户。 - -- 1、查看 server.properties 的配置的 zookeeper.connect 的地址; -- 2、使用 `zkCli.sh -serve zookeeper.connect的地址` 登录到ZK页面; -- 3、ZK页面上,执行命令 `getAcl /kafka` 查看 `kafka` 用户的权限; - -此时,我们可以看到如下信息: -![watch_user_acl.png](assets/support_kerberos_zk/watch_user_acl.png) - -`kafka` 用户需要的权限是 `cdrwa`。如果用户没有 `cdrwa` 权限的话,需要创建用户并授权,授权命令为:`setAcl` - - -### 3、创建Kerberos的keytab并修改 KnowStreaming 主机 - -- 1、在 Kerberos 的域中创建 `kafka/_HOST` 的 `keytab`,并导出。例如:`kafka/dbs-kafka-test-8-53`; -- 2、导出 keytab 后上传到安装 KS 的机器的 `/etc/keytab` 下; -- 3、在 KS 机器上,执行 `kinit -kt zookeepe.keytab kafka/dbs-kafka-test-8-53` 看是否能进行 `Kerberos` 登录; -- 4、可以登录后,配置 `/opt/zookeeper.jaas` 文件,例子如下: -```sql -Client { - com.sun.security.auth.module.Krb5LoginModule required - useKeyTab=true - storeKey=false - serviceName="zookeeper" - keyTab="/etc/keytab/zookeeper.keytab" - principal="kafka/dbs-kafka-test-8-53@XXX.XXX.XXX"; -}; -``` -- 5、需要配置 `KDC-Server` 对 `KnowStreaming` 的机器开通防火墙,并在KS的机器 `/etc/host/` 配置 `kdc-server` 的 `hostname`。并将 `krb5.conf` 导入到 `/etc` 下; - - -### 4、修改 KnowStreaming 的配置 - -- 1、在 `/usr/local/KnowStreaming/KnowStreaming/bin/startup.sh` 中的47行的JAVA_OPT中追加如下设置 -```bash --Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/zookeeper.jaas -``` - -- 2、重启KS集群后再 start.out 中看到如下信息,则证明Kerberos配置成功; - -![success_1.png](assets/support_kerberos_zk/success_1.png) - -![success_2.png](assets/support_kerberos_zk/success_2.png) - - -### 5、补充说明 - -- 1、多Kafka集群如果用的是一样的Kerberos域的话,只需在每个`ZK`中给`kafka`用户配置`crdwa`权限即可,这样集群初始化的时候`zkclient`是都可以认证; -- 2、当前需要修改代码重新打包才可以支持,后续考虑通过页面支持Kerberos认证的ZK接入; -- 3、多个Kerberos域暂时未适配; \ No newline at end of file diff --git a/docs/dev_guide/无数据排查文档.md b/docs/dev_guide/无数据排查文档.md deleted file mode 100644 index fd7886bc..00000000 --- a/docs/dev_guide/无数据排查文档.md +++ /dev/null @@ -1,285 +0,0 @@ -## 1、集群接入错误 - -### 1.1、异常现象 - -如下图所示,集群非空时,大概率为地址配置错误导致。 - - - - - -### 1.2、解决方案 - -接入集群时,依据提示的错误,进行相应的解决。例如: - - - -### 1.3、正常情况 - -接入集群时,页面信息都自动正常出现,没有提示错误。 - - - -## 2、JMX连接失败(需使用3.0.1及以上版本) - -### 2.1异常现象 - -Broker列表的JMX Port列出现红色感叹号,则该Broker的JMX连接异常。 - - - - - -#### 2.1.1、原因一:JMX未开启 - -##### 2.1.1.1、异常现象 - -broker列表的JMX Port值为-1,对应Broker的JMX未开启。 - - - -##### 2.1.1.2、解决方案 - -开启JMX,开启流程如下: - -1、修改kafka的bin目录下面的:`kafka-server-start.sh`文件 - -``` -# 在这个下面增加JMX端口的配置 -if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then - export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" - export JMX_PORT=9999 # 增加这个配置, 这里的数值并不一定是要9999 -fi -``` - - - -2、修改kafka的bin目录下面对的:`kafka-run-class.sh`文件 - -``` -# JMX settings -if [ -z "$KAFKA_JMX_OPTS" ]; then - KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false - -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}" -fi - -# JMX port to use -if [ $JMX_PORT ]; then - KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT - Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" -fi -``` - - - -3、重启Kafka-Broker。 - - - -#### 2.1.2、原因二:JMX配置错误 - -##### 2.1.2.1、异常现象 - -错误日志: - -``` -# 错误一: 错误提示的是真实的IP,这样的话基本就是JMX配置的有问题了。 -2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:192.168.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 192.168.0.1; nested exception is: - -# 错误二:错误提示的是127.0.0.1这个IP,这个是机器的hostname配置的可能有问题。 -2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:127.0.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 127.0.0.1;; nested exception is: -``` - - - -##### 2.1.2.2、解决方案 - -开启JMX,开启流程如下: - -1、修改kafka的bin目录下面的:`kafka-server-start.sh`文件 - -``` -# 在这个下面增加JMX端口的配置 -if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then - export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" - export JMX_PORT=9999 # 增加这个配置, 这里的数值并不一定是要9999 -fi -``` - - - -2、修改kafka的bin目录下面对的:`kafka-run-class.sh`文件 - -``` -# JMX settings -if [ -z "$KAFKA_JMX_OPTS" ]; then - KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false - -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}" -fi - -# JMX port to use -if [ $JMX_PORT ]; then - KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT - Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" -fi -``` - - - -3、重启Kafka-Broker。 - - - -#### 2.1.3、原因三:JMX开启SSL - -##### 2.1.3.1、解决方案 - - - -#### 2.1.4、原因四:连接了错误IP - -##### 2.1.4.1、异常现象 - -Broker 配置了内外网,而JMX在配置时,可能配置了内网IP或者外网IP,此时`KnowStreaming` 需要连接到特定网络的IP才可以进行访问。 - - 比如:Broker在ZK的存储结构如下所示,我们期望连接到 `endpoints` 中标记为 `INTERNAL` 的地址,但是 `KnowStreaming` 却连接了 `EXTERNAL` 的地址。 - -```json -{ - "listener_security_protocol_map": { - "EXTERNAL": "SASL_PLAINTEXT", - "INTERNAL": "SASL_PLAINTEXT" - }, - "endpoints": [ - "EXTERNAL://192.168.0.1:7092", - "INTERNAL://192.168.0.2:7093" - ], - "jmx_port": 8099, - "host": "192.168.0.1", - "timestamp": "1627289710439", - "port": -1, - "version": 4 -} -``` - -##### 2.1.4.2、解决方案 - -可以手动往`ks_km_physical_cluster`表的`jmx_properties`字段增加一个`useWhichEndpoint`字段,从而控制 `KnowStreaming` 连接到特定的JMX IP及PORT。 - -`jmx_properties`格式: - -```json -{ - "maxConn": 100, // KM对单台Broker的最大JMX连接数 - "username": "xxxxx", //用户名,可以不填写 - "password": "xxxx", // 密码,可以不填写 - "openSSL": true, //开启SSL, true表示开启ssl, false表示关闭 - "useWhichEndpoint": "EXTERNAL" //指定要连接的网络名称,填写EXTERNAL就是连接endpoints里面的EXTERNAL地址 -} -``` - - - -SQL例子: - -```sql -UPDATE ks_km_physical_cluster SET jmx_properties='{ "maxConn": 10, "username": "xxxxx", "password": "xxxx", "openSSL": false , "useWhichEndpoint": "xxx"}' where id={xxx}; -``` - -### 2.2、正常情况 - -修改完成后,如果看到 JMX PORT这一列全部为绿色,则表示JMX已正常。 - - - - - -## 3、Elasticsearch问题 - -注意:mac系统在执行curl指令时,可能报zsh错误。可参考以下操作。 - -``` -1 进入.zshrc 文件 vim ~/.zshrc -2.在.zshrc中加入 setopt no_nomatch -3.更新配置 source ~/.zshrc -``` - -### 3.1、原因一:缺少索引 - -#### 3.1.1、异常现象 - -报错信息 - -``` -com.didiglobal.logi.elasticsearch.client.model.exception.ESIndexNotFoundException: method [GET], host[http://127.0.0.1:9200], URI [/ks_kafka_broker_metric_2022-10-21,ks_kafka_broker_metric_2022-10-22/_search], status line [HTTP/1.1 404 Not Found] -``` - -curl http://{ES的IP地址}:{ES的端口号}/_cat/indices/ks_kafka* 查看KS索引列表,发现没有索引。 - -#### 3.1.2、解决方案 - -执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。 - - - -### 3.2、原因二:索引模板错误 - -#### 3.2.1、异常现象 - -多集群列表有数据,集群详情页图标无数据。查询KS索引模板列表,发现不存在。 - -``` -curl {ES的IP地址}:{ES的端口号}/_cat/templates/ks_kafka*?v&h=name -``` - -正常KS模板如下图所示。 - - - - - -#### 3.2.2、解决方案 - -删除KS索引模板和索引 - -``` -curl -XDELETE {ES的IP地址}:{ES的端口号}/ks_kafka* -curl -XDELETE {ES的IP地址}:{ES的端口号}/_template/ks_kafka* -``` - -执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。 - - -### 3.3、原因三:集群Shard满 - -#### 3.3.1、异常现象 - -报错信息 - -``` -com.didiglobal.logi.elasticsearch.client.model.exception.ESIndexNotFoundException: method [GET], host[http://127.0.0.1:9200], URI [/ks_kafka_broker_metric_2022-10-21,ks_kafka_broker_metric_2022-10-22/_search], status line [HTTP/1.1 404 Not Found] -``` - -尝试手动创建索引失败。 - -``` -#创建ks_kafka_cluster_metric_test索引的指令 -curl -s -XPUT http://{ES的IP地址}:{ES的端口号}/ks_kafka_cluster_metric_test -``` - -#### 3.3.2、解决方案 - -ES索引的默认分片数量为1000,达到数量以后,索引创建失败。 - -+ 扩大ES索引数量上限,执行指令 - -``` -curl -XPUT -H"content-type:application/json" http://{ES的IP地址}:{ES的端口号}/_cluster/settings -d ' -{ - "persistent": { - "cluster": { - "max_shards_per_node":{索引上限,默认为1000} - } - } -}' -``` - -执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来补全索引。 diff --git a/docs/dev_guide/本地源码启动手册.md b/docs/dev_guide/本地源码启动手册.md deleted file mode 100644 index c37fb165..00000000 --- a/docs/dev_guide/本地源码启动手册.md +++ /dev/null @@ -1,90 +0,0 @@ -## 6.1、本地源码启动手册 - -### 6.1.1、打包方式 - -`Know Streaming` 采用前后端分离的开发模式,使用 Maven 对项目进行统一的构建管理。maven 在打包构建过程中,会将前后端代码一并打包生成最终的安装包。 - -`Know Streaming` 除了使用安装包启动之外,还可以通过本地源码启动完整的带前端页面的项目,下面我们正式开始介绍本地源码如何启动 `Know Streaming`。 - -### 6.1.2、环境要求 - -**系统支持** - -`windows7+`、`Linux`、`Mac` - -**环境依赖** - -- Maven 3.6.3 -- Node v12.20.0 -- Java 8+ -- MySQL 5.7 -- Idea -- Elasticsearch 7.6 -- Git - -### 6.1.3、环境初始化 - -安装好环境信息之后,还需要初始化 MySQL 与 Elasticsearch 信息,包括: - -- 初始化 MySQL 表及数据 -- 初始化 Elasticsearch 索引 - -具体见:[单机部署手册](../install_guide/单机部署手册.md) 中的最后一步,部署 KnowStreaming 服务中的初始化相关工作。 - -### 6.1.4、本地启动 - -**第一步:本地打包** - -执行 `mvn install` 可对项目进行前后端同时进行打包,通过该命令,除了可以对后端进行打包之外,还可以将前端相关的静态资源文件也一并打包出来。 - -**第二步:修改配置** - -```yaml -# 修改 km-rest/src/main/resources/application.yml 中相关的配置 - -# 修改MySQL的配置,中间省略了一些非必需修改的配置 -spring: - datasource: - know-streaming: - jdbc-url: 修改为实际MYSQL地址 - username: 修改为实际MYSQL用户名 - password: 修改为实际MYSQL密码 - logi-job: - jdbc-url: 修改为实际MYSQL地址 - username: 修改为实际MYSQL用户名 - password: 修改为实际MYSQL密码 - logi-security: - jdbc-url: 修改为实际MYSQL地址 - username: 修改为实际MYSQL用户名 - password: 修改为实际MYSQL密码 - -# 修改ES的配置,中间省略了一些非必需修改的配置 -es.client.address: 修改为实际ES地址 -``` - -**第三步:配置 IDEA** - -`Know Streaming`的 Main 方法在: - -```java -km-rest/src/main/java/com/xiaojukeji/know/streaming/km/rest/KnowStreaming.java -``` - -IDEA 更多具体的配置如下图所示: - -

- -

- -**第四步:启动项目** - -最后就是启动项目,在本地 console 中输出了 `KnowStreaming-KM started` 则表示我们已经成功启动 `Know Streaming` 了。 - -### 6.1.5、本地访问 - -`Know Streaming` 启动之后,可以访问一些信息,包括: - -- 产品页面:http://localhost:8080 ,默认账号密码:`admin` / `admin2022_` 进行登录。`v3.0.0-beta.2`版本开始,默认账号密码为`admin` / `admin`; -- 接口地址:http://localhost:8080/swagger-ui.html 查看后端提供的相关接口。 - -更多信息,详见:[KnowStreaming 官网](https://knowstreaming.com/) \ No newline at end of file diff --git a/docs/dev_guide/登录系统对接.md b/docs/dev_guide/登录系统对接.md deleted file mode 100644 index e1038c63..00000000 --- a/docs/dev_guide/登录系统对接.md +++ /dev/null @@ -1,199 +0,0 @@ - - -![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png) - -## 登录系统对接 - -[KnowStreaming](https://github.com/didi/KnowStreaming)(以下简称KS) 除了实现基于本地MySQL的用户登录认证方式外,还已经实现了基于Ldap的登录认证。 - -但是,登录认证系统并非仅此两种。因此,为了具有更好的拓展性,KS具有自定义登陆认证逻辑,快速对接已有系统的特性。 - -在KS中,我们将登陆认证相关的一些文件放在[km-extends](https://github.com/didi/KnowStreaming/tree/master/km-extends)模块下的[km-account](https://github.com/didi/KnowStreaming/tree/master/km-extends/km-account)模块里。 - -本文将介绍KS如何快速对接自有的用户登录认证系统。 - -### 对接步骤 - -- 创建一个登陆认证类,实现[LogiCommon](https://github.com/didi/LogiCommon)的LoginExtend接口; -- 将[application.yml](https://github.com/didi/KnowStreaming/blob/master/km-rest/src/main/resources/application.yml)中的spring.logi-security.login-extend-bean-name字段改为登陆认证类的bean名称; - -```Java -//LoginExtend 接口 -public interface LoginExtend { - - /** - * 验证登录信息,同时记住登录状态 - */ - UserBriefVO verifyLogin(AccountLoginDTO var1, HttpServletRequest var2, HttpServletResponse var3) throws LogiSecurityException; - - /** - * 登出接口,清楚登录状态 - */ - Result logout(HttpServletRequest var1, HttpServletResponse var2); - - /** - * 检查是否已经登录 - */ - boolean interceptorCheck(HttpServletRequest var1, HttpServletResponse var2, String var3, List var4) throws IOException; - -} - -``` - - - -### 对接例子 - -我们以Ldap对接为例,说明KS如何对接登录认证系统。 - -+ 编写[LdapLoginServiceImpl](https://github.com/didi/KnowStreaming/blob/master/km-extends/km-account/src/main/java/com/xiaojukeji/know/streaming/km/account/login/ldap/LdapLoginServiceImpl.java)类,实现LoginExtend接口。 -+ 设置[application.yml](https://github.com/didi/KnowStreaming/blob/master/km-rest/src/main/resources/application.yml)中的spring.logi-security.login-extend-bean-name=ksLdapLoginService。 - -完成上述两步即可实现KS对接Ldap认证登陆。 - -```Java -@Service("ksLdapLoginService") -public class LdapLoginServiceImpl implements LoginExtend { - - - @Override - public UserBriefVO verifyLogin(AccountLoginDTO loginDTO, - HttpServletRequest request, - HttpServletResponse response) throws LogiSecurityException { - String decodePasswd = AESUtils.decrypt(loginDTO.getPw()); - - // 去LDAP验证账密 - LdapPrincipal ldapAttrsInfo = ldapAuthentication.authenticate(loginDTO.getUserName(), decodePasswd); - if (ldapAttrsInfo == null) { - // 用户不存在,正常来说上如果有问题,上一步会直接抛出异常 - throw new LogiSecurityException(ResultCode.USER_NOT_EXISTS); - } - - // 进行业务相关操作 - - // 记录登录状态,Ldap因为无法记录登录状态,因此有KnowStreaming进行记录 - initLoginContext(request, response, loginDTO.getUserName(), user.getId()); - return CopyBeanUtil.copy(user, UserBriefVO.class); - } - - @Override - public Result logout(HttpServletRequest request, HttpServletResponse response) { - - //清理cookie和session - - return Result.buildSucc(Boolean.TRUE); - } - - @Override - public boolean interceptorCheck(HttpServletRequest request, HttpServletResponse response, String requestMappingValue, List whiteMappingValues) throws IOException { - - // 检查是否已经登录 - String userName = HttpRequestUtil.getOperator(request); - if (StringUtils.isEmpty(userName)) { - // 未登录,则进行登出 - logout(request, response); - return Boolean.FALSE; - } - - return Boolean.TRUE; - } -} - -``` - - - -### 实现原理 - -因为登陆和登出整体实现逻辑是一致的,所以我们以登陆逻辑为例进行介绍。 - -+ 登陆原理 - -登陆走的是[LogiCommon](https://github.com/didi/LogiCommon)自带的LoginController。 - -```java -@RestController -public class LoginController { - - - //登陆接口 - @PostMapping({"/login"}) - public Result login(HttpServletRequest request, HttpServletResponse response, @RequestBody AccountLoginDTO loginDTO) { - try { - //登陆认证 - UserBriefVO userBriefVO = this.loginService.verifyLogin(loginDTO, request, response); - return Result.success(userBriefVO); - - } catch (LogiSecurityException var5) { - return Result.fail(var5); - } - } - -} -``` - -而登陆操作是调用LoginServiceImpl类来实现,但是具体由哪个登陆认证类来执行登陆操作却由loginExtendBeanTool来指定。 - -```java -//LoginServiceImpl类 -@Service -public class LoginServiceImpl implements LoginService { - - //实现登陆操作,但是具体哪个登陆类由loginExtendBeanTool来管理 - public UserBriefVO verifyLogin(AccountLoginDTO loginDTO, HttpServletRequest request, HttpServletResponse response) throws LogiSecurityException { - - return this.loginExtendBeanTool.getLoginExtendImpl().verifyLogin(loginDTO, request, response); - } - - -} -``` - -而loginExtendBeanTool类会优先去查找用户指定的登陆认证类,如果失败则调用默认的登陆认证函数。 - -```java -//LoginExtendBeanTool类 -@Component("logiSecurityLoginExtendBeanTool") -public class LoginExtendBeanTool { - - public LoginExtend getLoginExtendImpl() { - LoginExtend loginExtend; - //先调用用户指定登陆类,如果失败则调用系统默认登陆认证 - try { - //调用的类由spring.logi-security.login-extend-bean-name指定 - loginExtend = this.getCustomLoginExtendImplBean(); - } catch (UnsupportedOperationException var3) { - loginExtend = this.getDefaultLoginExtendImplBean(); - } - - return loginExtend; - } -} -``` - -+ 认证原理 - -认证的实现则比较简单,向Spring中注册我们的拦截器PermissionInterceptor。 - -拦截器会调用LoginServiceImpl类的拦截方法,LoginServiceImpl后续处理逻辑就和前面登陆是一致的。 - -```java -public class PermissionInterceptor implements HandlerInterceptor { - - - /** - * 拦截预处理 - * @return boolean false:拦截, 不向下执行, true:放行 - */ - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - - //免登录相关校验,如果验证通过,提前返回 - - //走拦截函数,进行普通用户验证 - return loginService.interceptorCheck(request, response, classRequestMappingValue, whiteMappingValues); - } - -} -``` - diff --git a/docs/dev_guide/解决连接JMX失败.md b/docs/dev_guide/解决连接JMX失败.md deleted file mode 100644 index 03271837..00000000 --- a/docs/dev_guide/解决连接JMX失败.md +++ /dev/null @@ -1,126 +0,0 @@ - - -![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png) - -## JMX-连接失败问题解决 - -集群正常接入`KnowStreaming`之后,即可以看到集群的Broker列表,此时如果查看不了Topic的实时流量,或者是Broker的实时流量信息时,那么大概率就是`JMX`连接的问题了。 - -下面我们按照步骤来一步一步的检查。 - -### 1、问题说明 - -**类型一:JMX配置未开启** - -未开启时,直接到`2、解决方法`查看如何开启即可。 - -![check_jmx_opened](http://img-ys011.didistatic.com/static/dc2img/do1_dRX6UHE2IUSHqsN95DGb) - - -**类型二:配置错误** - -`JMX`端口已经开启的情况下,有的时候开启的配置不正确,此时也会导致出现连接失败的问题。这里大概列举几种原因: - -- `JMX`配置错误:见`2、解决方法`。 -- 存在防火墙或者网络限制:网络通的另外一台机器`telnet`试一下看是否可以连接上。 -- 需要进行用户名及密码的认证:见`3、解决方法 —— 认证的JMX`。 - - -错误日志例子: -``` -# 错误一: 错误提示的是真实的IP,这样的话基本就是JMX配置的有问题了。 -2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:192.168.0.1 port:9999. -java.rmi.ConnectException: Connection refused to host: 192.168.0.1; nested exception is: - - -# 错误二:错误提示的是127.0.0.1这个IP,这个是机器的hostname配置的可能有问题。 -2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:127.0.0.1 port:9999. -java.rmi.ConnectException: Connection refused to host: 127.0.0.1;; nested exception is: -``` - -**类型三:连接特定IP** - -Broker 配置了内外网,而JMX在配置时,可能配置了内网IP或者外网IP,此时 `KnowStreaming` 需要连接到特定网络的IP才可以进行访问。 - -比如: - -Broker在ZK的存储结构如下所示,我们期望连接到 `endpoints` 中标记为 `INTERNAL` 的地址,但是 `KnowStreaming` 却连接了 `EXTERNAL` 的地址,此时可以看 `4、解决方法 —— JMX连接特定网络` 进行解决。 - -```json - { - "listener_security_protocol_map": {"EXTERNAL":"SASL_PLAINTEXT","INTERNAL":"SASL_PLAINTEXT"}, - "endpoints": ["EXTERNAL://192.168.0.1:7092","INTERNAL://192.168.0.2:7093"], - "jmx_port": 8099, - "host": "192.168.0.1", - "timestamp": "1627289710439", - "port": -1, - "version": 4 - } -``` - -### 2、解决方法 - -这里仅介绍一下比较通用的解决方式,如若有更好的方式,欢迎大家指导告知一下。 - -修改`kafka-server-start.sh`文件: -``` -# 在这个下面增加JMX端口的配置 -if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then - export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" - export JMX_PORT=9999 # 增加这个配置, 这里的数值并不一定是要9999 -fi -``` - -  - -修改`kafka-run-class.sh`文件 -``` -# JMX settings -if [ -z "$KAFKA_JMX_OPTS" ]; then - KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}" -fi - -# JMX port to use -if [ $JMX_PORT ]; then - KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" -fi -``` - - -### 3、解决方法 —— 认证的JMX - -如果您是直接看的这个部分,建议先看一下上一节:`2、解决方法`以确保`JMX`的配置没有问题了。 - -在`JMX`的配置等都没有问题的情况下,如果是因为认证的原因导致连接不了的,可以在集群接入界面配置你的`JMX`认证信息。 - - - - - -### 4、解决方法 —— JMX连接特定网络 - -可以手动往`ks_km_physical_cluster`表的`jmx_properties`字段增加一个`useWhichEndpoint`字段,从而控制 `KnowStreaming` 连接到特定的JMX IP及PORT。 - -`jmx_properties`格式: -```json -{ - "maxConn": 100, # KM对单台Broker的最大JMX连接数 - "username": "xxxxx", # 用户名,可以不填写 - "password": "xxxx", # 密码,可以不填写 - "openSSL": true, # 开启SSL, true表示开启ssl, false表示关闭 - "useWhichEndpoint": "EXTERNAL" #指定要连接的网络名称,填写EXTERNAL就是连接endpoints里面的EXTERNAL地址 -} -``` - -  - -SQL例子: -```sql -UPDATE ks_km_physical_cluster SET jmx_properties='{ "maxConn": 10, "username": "xxxxx", "password": "xxxx", "openSSL": false , "useWhichEndpoint": "xxx"}' where id={xxx}; -``` - -注意: - -+ 目前此功能只支持采用 `ZK` 做分布式协调的kafka集群。 - - \ No newline at end of file diff --git a/docs/install_guide/单机部署手册.md b/docs/install_guide/单机部署手册.md deleted file mode 100644 index c42e6318..00000000 --- a/docs/install_guide/单机部署手册.md +++ /dev/null @@ -1,417 +0,0 @@ -## 2.1、单机部署 - -**风险提示** - -⚠️ 脚本全自动安装,会将所部署机器上的 MySQL、JDK、ES 等进行删除重装,请注意原有服务丢失风险。 - -### 2.1.1、安装说明 - -- 以 `v3.0.0-beta.1` 版本为例进行部署; -- 以 CentOS-7 为例,系统基础配置要求 4C-8G; -- 部署完成后,可通过浏览器:`IP:PORT` 进行访问,默认端口是 `8080`,系统默认账号密码: `admin` / `admin2022_`。 -- `v3.0.0-beta.2`版本开始,默认账号密码为`admin` / `admin`; -- 本文为单机部署,如需分布式部署,[请联系我们](https://knowstreaming.com/support-center) - -**软件依赖** - -| 软件名 | 版本要求 | 默认端口 | -| ------------- | ------------ | -------- | -| MySQL | v5.7 或 v8.0 | 3306 | -| ElasticSearch | v7.6+ | 8060 | -| JDK | v8+ | - | -| CentOS | v6+ | - | -| Ubuntu | v16+ | - | - -  - -### 2.1.2、脚本部署 - -**在线安装** - -```bash -# 在服务器中下载安装脚本, 该脚本中会在当前目录下,重新安装MySQL。重装后的mysql密码存放在当前目录的mysql.password文件中。 -wget https://s3-gzpu.didistatic.com/pub/knowstreaming/deploy_KnowStreaming-3.0.0-beta.1.sh - -# 执行脚本 -sh deploy_KnowStreaming.sh - -# 访问地址 -127.0.0.1:8080 -``` - -**离线安装** - -```bash -# 将安装包下载到本地且传输到目标服务器 -wget https://s3-gzpu.didistatic.com/pub/knowstreaming/KnowStreaming-3.0.0-beta.1-offline.tar.gz - -# 解压安装包 -tar -zxf KnowStreaming-3.0.0-beta.1-offline.tar.gz - -# 执行安装脚本 -sh deploy_KnowStreaming-offline.sh - -# 访问地址 -127.0.0.1:8080 -``` - -  - -### 2.1.3、容器部署 - -#### 2.1.3.1、Helm - -**环境依赖** - -- Kubernetes >= 1.14 ,Helm >= 2.17.0 - -- 默认依赖全部安装,ElasticSearch(3 节点集群模式) + MySQL(单机) + KnowStreaming-manager + KnowStreaming-ui - -- 使用已有的 ElasticSearch(7.6.x) 和 MySQL(5.7) 只需调整 values.yaml 部分参数即可 - -**安装命令** - -```bash -# 相关镜像在Docker Hub都可以下载 -# 快速安装(NAMESPACE需要更改为已存在的,安装启动需要几分钟初始化请稍等~) -helm install -n [NAMESPACE] [NAME] http://download.knowstreaming.com/charts/knowstreaming-manager-0.1.5.tgz - -# 获取KnowStreaming前端ui的service. 默认nodeport方式. -# (http://nodeIP:nodeport,默认用户名密码:admin/admin2022_) -# `v3.0.0-beta.2`版本开始(helm chart包版本0.1.4开始),默认账号密码为`admin` / `admin`; - -# 添加仓库 -helm repo add knowstreaming http://download.knowstreaming.com/charts - -# 拉取最新版本 -helm pull knowstreaming/knowstreaming-manager -``` - -  - -#### 2.1.3.2、Docker Compose -**环境依赖** - -- [Docker](https://docs.docker.com/engine/install/) -- [Docker Compose](https://docs.docker.com/compose/install/) - - -**安装命令** -```bash -# `v3.0.0-beta.2`版本开始(docker镜像为0.2.0版本开始),默认账号密码为`admin` / `admin`; -# https://hub.docker.com/u/knowstreaming 在此处寻找最新镜像版本 -# mysql与es可以使用自己搭建的服务,调整对应配置即可 - -# 复制docker-compose.yml到指定位置后执行下方命令即可启动 -docker-compose up -d -``` - -**验证安装** -```shell -docker-compose ps -# 验证启动 - 状态为 UP 则表示成功 - Name Command State Ports ----------------------------------------------------------------------------------------------------- -elasticsearch-single /usr/local/bin/docker-entr ... Up 9200/tcp, 9300/tcp -knowstreaming-init /bin/bash /es_template_cre ... Up -knowstreaming-manager /bin/sh /ks-start.sh Up 80/tcp -knowstreaming-mysql /entrypoint.sh mysqld Up (health: starting) 3306/tcp, 33060/tcp -knowstreaming-ui /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp - -# 稍等一分钟左右 knowstreaming-init 会退出,表示es初始化完成,可以访问页面 - Name Command State Ports -------------------------------------------------------------------------------------------- -knowstreaming-init /bin/bash /es_template_cre ... Exit 0 -knowstreaming-mysql /entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp -``` - -**访问** -```http request -http://127.0.0.1:80/ -``` - - -**docker-compose.yml** -```yml -version: "2" -services: - # *不要调整knowstreaming-manager服务名称,ui中会用到 - knowstreaming-manager: - image: knowstreaming/knowstreaming-manager:latest - container_name: knowstreaming-manager - privileged: true - restart: always - depends_on: - - elasticsearch-single - - knowstreaming-mysql - expose: - - 80 - command: - - /bin/sh - - /ks-start.sh - environment: - TZ: Asia/Shanghai - # mysql服务地址 - SERVER_MYSQL_ADDRESS: knowstreaming-mysql:3306 - # mysql数据库名 - SERVER_MYSQL_DB: know_streaming - # mysql用户名 - SERVER_MYSQL_USER: root - # mysql用户密码 - SERVER_MYSQL_PASSWORD: admin2022_ - # es服务地址 - SERVER_ES_ADDRESS: elasticsearch-single:9200 - # 服务JVM参数 - JAVA_OPTS: -Xmx1g -Xms1g - # 对于kafka中ADVERTISED_LISTENERS填写的hostname可以通过该方式完成 -# extra_hosts: -# - "hostname:x.x.x.x" - # 服务日志路径 -# volumes: -# - /ks/manage/log:/logs - knowstreaming-ui: - image: knowstreaming/knowstreaming-ui:latest - container_name: knowstreaming-ui - restart: always - ports: - - '80:80' - environment: - TZ: Asia/Shanghai - depends_on: - - knowstreaming-manager -# extra_hosts: -# - "hostname:x.x.x.x" - elasticsearch-single: - image: docker.io/library/elasticsearch:7.6.2 - container_name: elasticsearch-single - restart: always - expose: - - 9200 - - 9300 -# ports: -# - '9200:9200' -# - '9300:9300' - environment: - TZ: Asia/Shanghai - # es的JVM参数 - ES_JAVA_OPTS: -Xms512m -Xmx512m - # 单节点配置,多节点集群参考 https://www.elastic.co/guide/en/elasticsearch/reference/7.6/docker.html#docker-compose-file - discovery.type: single-node - # 数据持久化路径 -# volumes: -# - /ks/es/data:/usr/share/elasticsearch/data - - # es初始化服务,与manager使用同一镜像 - # 首次启动es需初始化模版和索引,后续会自动创建 - knowstreaming-init: - image: knowstreaming/knowstreaming-manager:latest - container_name: knowstreaming-init - depends_on: - - elasticsearch-single - command: - - /bin/bash - - /es_template_create.sh - environment: - TZ: Asia/Shanghai - # es服务地址 - SERVER_ES_ADDRESS: elasticsearch-single:9200 - - knowstreaming-mysql: - image: knowstreaming/knowstreaming-mysql:latest - container_name: knowstreaming-mysql - restart: always - environment: - TZ: Asia/Shanghai - # root 用户密码 - MYSQL_ROOT_PASSWORD: admin2022_ - # 初始化时创建的数据库名称 - MYSQL_DATABASE: know_streaming - # 通配所有host,可以访问远程 - MYSQL_ROOT_HOST: '%' - expose: - - 3306 -# ports: -# - '3306:3306' - # 数据持久化路径 -# volumes: -# - /ks/mysql/data:/data/mysql -``` - -  - -### 2.1.4、手动部署 - -**部署流程** - -1. 安装 `JDK-11`、`MySQL`、`ElasticSearch` 等依赖服务 -2. 安装 KnowStreaming - -  - -#### 2.1.4.1、安装 MySQL 服务 - -**yum 方式安装** - -```bash -# 配置yum源 -wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm -rpm -ivh mysql57-community-release-el7-9.noarch.rpm - -# 执行安装 -yum -y install mysql-server mysql-client - -# 服务启动 -systemctl start mysqld - -# 获取初始密码并修改 -old_pass=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}' | tail -n 1` - -mysql -NBe "alter user USER() identified by 'Didi_km_678';" --connect-expired-password -uroot -p$old_pass -``` - -**rpm 方式安装** - -```bash -# 下载安装包 -wget https://s3-gzpu.didistatic.com/knowsearch/mysql5.7.tar.gz - -# 解压到指定目录 -tar -zxf mysql5.7.tar.gz -C /tmp/ - -# 执行安装 -yum -y localinstall /tmp/libaio-*.rpm /tmp/mysql-*.rpm - -# 服务启动 -systemctl start mysqld - - -# 获取初始密码并修改 -old_pass=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}' | tail -n 1` - -mysql -NBe "alter user USER() identified by 'Didi_km_678';" --connect-expired-password -uroot -p$old_pass - -``` - -  - -#### 2.1.4.2、配置 JDK 环境 - -```bash -# 下载安装包 -wget https://s3-gzpu.didistatic.com/pub/jdk11.tar.gz - -# 解压到指定目录 -tar -zxf jdk11.tar.gz -C /usr/local/ - -# 更改目录名 -mv /usr/local/jdk-11.0.2 /usr/local/java11 - -# 添加到环境变量 -echo "export JAVA_HOME=/usr/local/java11" >> ~/.bashrc -echo "export CLASSPATH=/usr/java/java11/lib" >> ~/.bashrc -echo "export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin" >> ~/.bashrc - -source ~/.bashrc - -``` - -  - -#### 2.1.4.3、ElasticSearch 实例搭建 - -- ElasticSearch 用于存储平台采集的 Kafka 指标; -- 以下安装示例为单节点模式,如需集群部署可以参考:[Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/7.6/elasticsearch-intro.html) - -```bash -# 下载安装包 -wget https://s3-gzpu.didistatic.com/pub/elasticsearch.tar.gz - -# 创建ES数据存储目录 -mkdir -p /data/es_data - -# 创建ES所属用户 -useradd arius - -# 配置用户的打开文件数 -echo "arius soft nofile 655350" >> /etc/security/limits.conf -echo "arius hard nofile 655350" >> /etc/security/limits.conf -echo "vm.max_map_count = 655360" >> /etc/sysctl.conf -sysctl -p - -# 解压安装包 -tar -zxf elasticsearch.tar.gz -C /data/ - -# 更改目录所属组 -chown -R arius:arius /data/ - -# 修改配置文件(参考以下配置) -vim /data/elasticsearch/config/elasticsearch.yml - cluster.name: km_es - node.name: es-node1 - node.master: true - node.data: true - path.data: /data/es_data - http.port: 8060 - discovery.seed_hosts: ["127.0.0.1:9300"] - -# 修改内存配置 -vim /data/elasticsearch/config/jvm.options - -Xms2g - -Xmx2g - -# 启动服务 -su - arius -export JAVA_HOME=/usr/local/java11 -sh /data/elasticsearch/control.sh start - -# 确认状态 -sh /data/elasticsearch/control.sh status -``` - -  - -#### 2.1.4.4、KnowStreaming 实例搭建 - -```bash -# 下载安装包 -wget https://s3-gzpu.didistatic.com/pub/knowstreaming/KnowStreaming-3.0.0-beta.1.tar.gz - -# 解压安装包到指定目录 -tar -zxf KnowStreaming-3.0.0-beta.1.tar.gz -C /data/ - -# 修改启动脚本并加入systemd管理 -cd /data/KnowStreaming/ - -# 创建相应的库和导入初始化数据 -mysql -uroot -pDidi_km_678 -e "create database know_streaming;" -mysql -uroot -pDidi_km_678 know_streaming < ./init/sql/ddl-ks-km.sql -mysql -uroot -pDidi_km_678 know_streaming < ./init/sql/ddl-logi-job.sql -mysql -uroot -pDidi_km_678 know_streaming < ./init/sql/ddl-logi-security.sql -mysql -uroot -pDidi_km_678 know_streaming < ./init/sql/dml-ks-km.sql -mysql -uroot -pDidi_km_678 know_streaming < ./init/sql/dml-logi.sql - -# 创建elasticsearch初始化数据 -sh ./bin/init_es_template.sh - -# 修改配置文件 -vim ./conf/application.yml - -# 监听端口 -server: - port: 8080 # web 服务端口 - tomcat: - accept-count: 1000 - max-connections: 10000 - -# ES地址 -es.client.address: 127.0.0.1:8060 - -# 数据库配置(一共三处地方,修改正确的mysql地址和数据库名称以及用户名密码) -jdbc-url: jdbc:mariadb://127.0.0.1:3306/know_streaming?..... -username: root -password: Didi_km_678 - -# 启动服务 -cd /data/KnowStreaming/bin/ -sh startup.sh -``` diff --git a/docs/install_guide/源码编译打包手册.md b/docs/install_guide/源码编译打包手册.md deleted file mode 100644 index d6ff6572..00000000 --- a/docs/install_guide/源码编译打包手册.md +++ /dev/null @@ -1,62 +0,0 @@ -![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png) - -# `Know Streaming` 源码编译打包手册 - -## 1、环境信息 - -**系统支持** - -`windows7+`、`Linux`、`Mac` - -**环境依赖** - -- Maven 3.6.3 (后端) -- Node v12.20.0/v14.17.3 (前端) -- Java 8+ (后端) -- Git - -## 2、编译打包 - -整个工程中,除了`km-console`为前端模块之外,其他模块都是后端工程相关模块。 - -因此,如果前后端合并打包,则打对整个工程进行打包;如果前端单独打包,则仅打包 `km-console` 中的代码;如果是仅需要后端打包,则在顶层 `pom.xml` 中去掉 `km-console`模块,然后进行打包。 - -具体见下面描述。 - -### 2.1、前后端合并打包 - -1. 下载源码; -2. 进入 `KS-KM` 工程目录,执行 `mvn -Prelease-package -Dmaven.test.skip=true clean install -U` 命令; -3. 打包命令执行完成后,会在 `km-dist/target` 目录下面生成一个 `KnowStreaming-*.tar.gz` 的安装包。 - -### 2.2、前端单独打包 - -1. 下载源码; -2. 跳转到 [前端打包构建文档](https://github.com/didi/KnowStreaming/blob/master/km-console/README.md) 按步骤进行。打包成功后,会在 `km-rest/src/main/resources` 目录下生成名为 `templates` 的前端静态资源包; -3. 如果上一步过程中报错,请查看 [FAQ](https://github.com/didi/KnowStreaming/blob/master/docs/user_guide/faq.md) 第 8.10 条; - -### 2.3、后端单独打包 - -1. 下载源码; -2. 修改顶层 `pom.xml` ,去掉其中的 `km-console` 模块,如下所示; - -```xml - - - km-common - km-persistence - km-core - km-biz - km-extends/km-account - km-extends/km-monitor - km-extends/km-license - km-extends/km-rebalance - km-task - km-collector - km-rest - km-dist - -``` - -3. 执行 `mvn -U clean package -Dmaven.test.skip=true`命令; -4. 执行完成之后会在 `KS-KM/km-rest/target` 目录下面生成一个 `ks-km.jar` 即为 KS 的后端部署的 Jar 包,也可以执行 `mvn -Prelease-package -Dmaven.test.skip=true clean install -U` 生成的 tar 包也仅有后端服务的功能; diff --git a/docs/install_guide/版本升级手册.md b/docs/install_guide/版本升级手册.md deleted file mode 100644 index 061c080d..00000000 --- a/docs/install_guide/版本升级手册.md +++ /dev/null @@ -1,463 +0,0 @@ -## 6.2、版本升级手册 - -注意: -- 如果想升级至具体版本,需要将你当前版本至你期望使用版本的变更统统执行一遍,然后才能正常使用。 -- 如果中间某个版本没有升级信息,则表示该版本直接替换安装包即可从前一个版本升级至当前版本。 - -### 升级至 `master` 版本 - - -### 升级至 `3.3.0` 版本 - -**SQL 变更** -```sql -ALTER TABLE `logi_security_user` - CHANGE COLUMN `phone` `phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'mobile' ; - -ALTER TABLE ks_kc_connector ADD `heartbeat_connector_name` varchar(512) DEFAULT '' COMMENT '心跳检测connector名称'; -ALTER TABLE ks_kc_connector ADD `checkpoint_connector_name` varchar(512) DEFAULT '' COMMENT '进度确认connector名称'; - -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_MIRROR_MAKER_TOTAL_RECORD_ERRORS', '{\"value\" : 1}', 'MirrorMaker消息处理错误的次数', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_MIRROR_MAKER_REPLICATION_LATENCY_MS_MAX', '{\"value\" : 6000}', 'MirrorMaker消息复制最大延迟时间', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_MIRROR_MAKER_UNASSIGNED_TASK_COUNT', '{\"value\" : 20}', 'MirrorMaker未被分配的任务数量', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_MIRROR_MAKER_FAILED_TASK_COUNT', '{\"value\" : 10}', 'MirrorMaker失败状态的任务数量', 'admin'); - - --- 多集群管理权限2023-01-05新增 -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2012', 'Topic-新增Topic复制', '1593', '1', '2', 'Topic-新增Topic复制', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2014', 'Topic-详情-取消Topic复制', '1593', '1', '2', 'Topic-详情-取消Topic复制', '0', 'know-streaming'); - -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2012', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2014', '0', 'know-streaming'); - - --- 多集群管理权限2023-01-18新增 -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2016', 'MM2-新增', '1593', '1', '2', 'MM2-新增', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2018', 'MM2-编辑', '1593', '1', '2', 'MM2-编辑', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2020', 'MM2-删除', '1593', '1', '2', 'MM2-删除', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2022', 'MM2-重启', '1593', '1', '2', 'MM2-重启', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2024', 'MM2-暂停&恢复', '1593', '1', '2', 'MM2-暂停&恢复', '0', 'know-streaming'); - -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2016', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2018', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2020', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2022', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2024', '0', 'know-streaming'); - - -DROP TABLE IF EXISTS `ks_ha_active_standby_relation`; -CREATE TABLE `ks_ha_active_standby_relation` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `active_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '主集群ID', - `standby_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '备集群ID', - `res_name` varchar(192) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '资源名称', - `res_type` int(11) NOT NULL DEFAULT '-1' COMMENT '资源类型,0:集群,1:镜像Topic,2:主备Topic', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_cluster_res` (`res_type`,`active_cluster_phy_id`,`standby_cluster_phy_id`,`res_name`), - UNIQUE KEY `uniq_res_type_standby_cluster_res_name` (`res_type`,`standby_cluster_phy_id`,`res_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='HA主备关系表'; - - --- 删除idx_cluster_phy_id 索引并新增idx_cluster_update_time索引 -ALTER TABLE `ks_km_kafka_change_record` DROP INDEX `idx_cluster_phy_id` , -ADD INDEX `idx_cluster_update_time` (`cluster_phy_id` ASC, `update_time` ASC); -``` - -### 升级至 `3.2.0` 版本 - -**配置变更** - -```yaml -# 新增如下配置 - -spring: - logi-job: # know-streaming 依赖的 logi-job 模块的数据库的配置,默认与 know-streaming 的数据库配置保持一致即可 - enable: true # true表示开启job任务, false表关闭。KS在部署上可以考虑部署两套服务,一套处理前端请求,一套执行job任务,此时可以通过该字段进行控制 - -# 线程池大小相关配置 -thread-pool: - es: - search: # es查询线程池 - thread-num: 20 # 线程池大小 - queue-size: 10000 # 队列大小 - -# 客户端池大小相关配置 -client-pool: - kafka-admin: - client-cnt: 1 # 每个Kafka集群创建的KafkaAdminClient数 - -# ES客户端配置 -es: - index: - expire: 15 # 索引过期天数,15表示超过15天的索引会被KS过期删除 -``` - -**SQL 变更** -```sql -DROP TABLE IF EXISTS `ks_kc_connect_cluster`; -CREATE TABLE `ks_kc_connect_cluster` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Connect集群ID', - `kafka_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Kafka集群ID', - `name` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称', - `group_name` varchar(128) NOT NULL DEFAULT '' COMMENT '集群Group名称', - `cluster_url` varchar(1024) NOT NULL DEFAULT '' COMMENT '集群地址', - `member_leader_url` varchar(1024) NOT NULL DEFAULT '' COMMENT 'URL地址', - `version` varchar(64) NOT NULL DEFAULT '' COMMENT 'connect版本', - `jmx_properties` text COMMENT 'JMX配置', - `state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '集群使用的消费组状态,也表示集群状态:-1 Unknown,0 ReBalance,1 Active,2 Dead,3 Empty', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '接入时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_id_group_name` (`id`,`group_name`), - UNIQUE KEY `uniq_name_kafka_cluster` (`name`,`kafka_cluster_phy_id`), - KEY `idx_kafka_cluster_phy_id` (`kafka_cluster_phy_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Connect集群信息表'; - - -DROP TABLE IF EXISTS `ks_kc_connector`; -CREATE TABLE `ks_kc_connector` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `kafka_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Kafka集群ID', - `connect_cluster_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Connect集群ID', - `connector_name` varchar(512) NOT NULL DEFAULT '' COMMENT 'Connector名称', - `connector_class_name` varchar(512) NOT NULL DEFAULT '' COMMENT 'Connector类', - `connector_type` varchar(32) NOT NULL DEFAULT '' COMMENT 'Connector类型', - `state` varchar(45) NOT NULL DEFAULT '' COMMENT '状态', - `topics` text COMMENT '访问过的Topics', - `task_count` int(11) NOT NULL DEFAULT '0' COMMENT '任务数', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_connect_cluster_id_connector_name` (`connect_cluster_id`,`connector_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Connector信息表'; - - -DROP TABLE IF EXISTS `ks_kc_worker`; -CREATE TABLE `ks_kc_worker` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `kafka_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Kafka集群ID', - `connect_cluster_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Connect集群ID', - `member_id` varchar(512) NOT NULL DEFAULT '' COMMENT '成员ID', - `host` varchar(128) NOT NULL DEFAULT '' COMMENT '主机名', - `jmx_port` int(16) NOT NULL DEFAULT '-1' COMMENT 'Jmx端口', - `url` varchar(1024) NOT NULL DEFAULT '' COMMENT 'URL信息', - `leader_url` varchar(1024) NOT NULL DEFAULT '' COMMENT 'leaderURL信息', - `leader` int(16) NOT NULL DEFAULT '0' COMMENT '状态: 1是leader,0不是leader', - `worker_id` varchar(128) NOT NULL COMMENT 'worker地址', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_cluster_id_member_id` (`connect_cluster_id`,`member_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='worker信息表'; - - -DROP TABLE IF EXISTS `ks_kc_worker_connector`; -CREATE TABLE `ks_kc_worker_connector` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `kafka_cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Kafka集群ID', - `connect_cluster_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'Connect集群ID', - `connector_name` varchar(512) NOT NULL DEFAULT '' COMMENT 'Connector名称', - `worker_member_id` varchar(256) NOT NULL DEFAULT '', - `task_id` int(16) NOT NULL DEFAULT '-1' COMMENT 'Task的ID', - `state` varchar(128) DEFAULT NULL COMMENT '任务状态', - `worker_id` varchar(128) DEFAULT NULL COMMENT 'worker信息', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_relation` (`connect_cluster_id`,`connector_name`,`task_id`,`worker_member_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Worker和Connector关系表'; - -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_CONNECTOR_FAILED_TASK_COUNT', '{\"value\" : 1}', 'connector失败状态的任务数量', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_CONNECTOR_UNASSIGNED_TASK_COUNT', '{\"value\" : 1}', 'connector未被分配的任务数量', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_CONNECT_CLUSTER_TASK_STARTUP_FAILURE_PERCENTAGE', '{\"value\" : 0.05}', 'Connect集群任务启动失败概率', 'admin'); -``` - ---- - -### 升级至 `v3.1.0` 版本 - -```sql -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_BRAIN_SPLIT', '{ \"value\": 1} ', 'ZK 脑裂', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_OUTSTANDING_REQUESTS', '{ \"amount\": 100, \"ratio\":0.8} ', 'ZK Outstanding 请求堆积数', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_WATCH_COUNT', '{ \"amount\": 100000, \"ratio\": 0.8 } ', 'ZK WatchCount 数', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_ALIVE_CONNECTIONS', '{ \"amount\": 10000, \"ratio\": 0.8 } ', 'ZK 连接数', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_APPROXIMATE_DATA_SIZE', '{ \"amount\": 524288000, \"ratio\": 0.8 } ', 'ZK 数据大小(Byte)', 'admin'); -INSERT INTO `ks_km_platform_cluster_config` (`cluster_id`, `value_group`, `value_name`, `value`, `description`, `operator`) VALUES ('-1', 'HEALTH', 'HC_ZK_SENT_RATE', '{ \"amount\": 500000, \"ratio\": 0.8 } ', 'ZK 发包数', 'admin'); - -``` - -### 升级至 `v3.0.1` 版本 - -**ES 索引模版** -```bash -# 新增 ks_kafka_zookeeper_metric 索引模版。 -# 可通过再次执行 bin/init_es_template.sh 脚本,创建该索引模版。 - -# 索引模版内容 -PUT _template/ks_kafka_zookeeper_metric -{ - "order" : 10, - "index_patterns" : [ - "ks_kafka_zookeeper_metric*" - ], - "settings" : { - "index" : { - "number_of_shards" : "10" - } - }, - "mappings" : { - "properties" : { - "routingValue" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "clusterPhyId" : { - "type" : "long" - }, - "metrics" : { - "properties" : { - "AvgRequestLatency" : { - "type" : "double" - }, - "MinRequestLatency" : { - "type" : "double" - }, - "MaxRequestLatency" : { - "type" : "double" - }, - "OutstandingRequests" : { - "type" : "double" - }, - "NodeCount" : { - "type" : "double" - }, - "WatchCount" : { - "type" : "double" - }, - "NumAliveConnections" : { - "type" : "double" - }, - "PacketsReceived" : { - "type" : "double" - }, - "PacketsSent" : { - "type" : "double" - }, - "EphemeralsCount" : { - "type" : "double" - }, - "ApproximateDataSize" : { - "type" : "double" - }, - "OpenFileDescriptorCount" : { - "type" : "double" - }, - "MaxFileDescriptorCount" : { - "type" : "double" - } - } - }, - "key" : { - "type" : "text", - "fields" : { - "keyword" : { - "ignore_above" : 256, - "type" : "keyword" - } - } - }, - "timestamp" : { - "format" : "yyyy-MM-dd HH:mm:ss Z||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||epoch_millis", - "type" : "date" - } - } - }, - "aliases" : { } - } -``` - - -**SQL 变更** - -```sql -DROP TABLE IF EXISTS `ks_km_zookeeper`; -CREATE TABLE `ks_km_zookeeper` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '物理集群ID', - `host` varchar(128) NOT NULL DEFAULT '' COMMENT 'zookeeper主机名', - `port` int(16) NOT NULL DEFAULT '-1' COMMENT 'zookeeper端口', - `role` varchar(16) NOT NULL DEFAULT '' COMMENT '角色, leader follower observer', - `version` varchar(128) NOT NULL DEFAULT '' COMMENT 'zookeeper版本', - `status` int(16) NOT NULL DEFAULT '0' COMMENT '状态: 1存活,0未存活,11存活但是4字命令使用不了', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_cluster_phy_id_host_port` (`cluster_phy_id`,`host`, `port`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Zookeeper信息表'; - - -DROP TABLE IF EXISTS `ks_km_group`; -CREATE TABLE `ks_km_group` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `cluster_phy_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '集群id', - `name` varchar(192) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group名称', - `member_count` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '成员数', - `topic_members` text CHARACTER SET utf8 COMMENT 'group消费的topic列表', - `partition_assignor` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '分配策略', - `coordinator_id` int(11) NOT NULL COMMENT 'group协调器brokerId', - `type` int(11) NOT NULL COMMENT 'group类型 0:consumer 1:connector', - `state` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '状态', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uniq_cluster_phy_id_name` (`cluster_phy_id`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Group信息表'; - -``` - - -### 升级至 `v3.0.0` 版本 - -**SQL 变更** - -```sql -ALTER TABLE `ks_km_physical_cluster` -ADD COLUMN `zk_properties` TEXT NULL COMMENT 'ZK配置' AFTER `jmx_properties`; -``` - ---- - - -### 升级至 `v3.0.0-beta.2`版本 - -**配置变更** - -```yaml - -# 新增配置 -spring: - logi-security: # know-streaming 依赖的 logi-security 模块的数据库的配置,默认与 know-streaming 的数据库配置保持一致即可 - login-extend-bean-name: logiSecurityDefaultLoginExtendImpl # 使用的登录系统Service的Bean名称,无需修改 - -# 线程池大小相关配置,在task模块中,新增了三类线程池, -# 从而减少不同类型任务之间的相互影响,以及减少对logi-job内的线程池的影响 -thread-pool: - task: # 任务模块的配置 - metrics: # metrics采集任务配置 - thread-num: 18 # metrics采集任务线程池核心线程数 - queue-size: 180 # metrics采集任务线程池队列大小 - metadata: # metadata同步任务配置 - thread-num: 27 # metadata同步任务线程池核心线程数 - queue-size: 270 # metadata同步任务线程池队列大小 - common: # 剩余其他任务配置 - thread-num: 15 # 剩余其他任务线程池核心线程数 - queue-size: 150 # 剩余其他任务线程池队列大小 - -# 删除配置,下列配置将不再使用 -thread-pool: - task: # 任务模块的配置 - heaven: # 采集任务配置 - thread-num: 20 # 采集任务线程池核心线程数 - queue-size: 1000 # 采集任务线程池队列大小 - -``` - -**SQL 变更** - -```sql --- 多集群管理权限2022-09-06新增 -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2000', '多集群管理查看', '1593', '1', '2', '多集群管理查看', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2002', 'Topic-迁移副本', '1593', '1', '2', 'Topic-迁移副本', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2004', 'Topic-扩缩副本', '1593', '1', '2', 'Topic-扩缩副本', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2006', 'Cluster-LoadReBalance-周期均衡', '1593', '1', '2', 'Cluster-LoadReBalance-周期均衡', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2008', 'Cluster-LoadReBalance-立即均衡', '1593', '1', '2', 'Cluster-LoadReBalance-立即均衡', '0', 'know-streaming'); -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('2010', 'Cluster-LoadReBalance-设置集群规格', '1593', '1', '2', 'Cluster-LoadReBalance-设置集群规格', '0', 'know-streaming'); - - --- 系统管理权限2022-09-06新增 -INSERT INTO `logi_security_permission` (`id`, `permission_name`, `parent_id`, `leaf`, `level`, `description`, `is_delete`, `app_name`) VALUES ('3000', '系统管理查看', '1595', '1', '2', '系统管理查看', '0', 'know-streaming'); - - -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2000', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2002', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2004', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2006', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2008', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '2010', '0', 'know-streaming'); -INSERT INTO `logi_security_role_permission` (`role_id`, `permission_id`, `is_delete`, `app_name`) VALUES ('1677', '3000', '0', 'know-streaming'); - --- 修改字段长度 -ALTER TABLE `logi_security_oplog` - CHANGE COLUMN `operator_ip` `operator_ip` VARCHAR(64) NOT NULL COMMENT '操作者ip' , - CHANGE COLUMN `operator` `operator` VARCHAR(64) NULL DEFAULT NULL COMMENT '操作者账号' , - CHANGE COLUMN `operate_page` `operate_page` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作页面' , - CHANGE COLUMN `operate_type` `operate_type` VARCHAR(64) NOT NULL COMMENT '操作类型' , - CHANGE COLUMN `target_type` `target_type` VARCHAR(64) NOT NULL COMMENT '对象分类' , - CHANGE COLUMN `target` `target` VARCHAR(1024) NOT NULL COMMENT '操作对象' , - CHANGE COLUMN `operation_methods` `operation_methods` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作方式' ; -``` - ---- - -### 升级至 `v3.0.0-beta.1`版本 - -**SQL 变更** - -1、在`ks_km_broker`表增加了一个监听信息字段。 -2、为`logi_security_oplog`表 operation_methods 字段设置默认值''。 -因此需要执行下面的 sql 对数据库表进行更新。 - -```sql -ALTER TABLE `ks_km_broker` -ADD COLUMN `endpoint_map` VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '监听信息' AFTER `update_time`; - -ALTER TABLE `logi_security_oplog` -ALTER COLUMN `operation_methods` set default ''; - -``` - ---- - -### `2.x`版本 升级至 `v3.0.0-beta.0`版本 - -**升级步骤:** - -1. 依旧使用**`2.x 版本的 DB`**,在上面初始化 3.0.0 版本所需数据库表结构及数据; -2. 将 2.x 版本中的集群,在 3.0.0 版本,手动逐一接入; -3. 将 Topic 业务数据,迁移至 3.0.0 表中,详见下方 SQL; - -**注意事项** - -- 建议升级 3.0.0 版本过程中,保留 2.x 版本的使用,待 3.0.0 版本稳定使用后,再下线 2.x 版本; -- 3.0.0 版本仅需要`集群信息`及`Topic的描述信息`。2.x 版本的 DB 的其他数据 3.0.0 版本都不需要; -- 部署 3.0.0 版本之后,集群、Topic 等指标数据都为空,3.0.0 版本会周期进行采集,运行一段时间之后就会有该数据了,因此不会将 2.x 中的指标数据进行迁移; - -**迁移数据** - -```sql --- 迁移Topic的备注信息。 --- 需在 3.0.0 部署完成后,再执行该SQL。 --- 考虑到 2.x 版本中还存在增量数据,因此建议改SQL周期执行,是的增量数据也能被迁移至 3.0.0 版本中。 - -UPDATE ks_km_topic - INNER JOIN - (SELECT - topic.cluster_id AS cluster_id, - topic.topic_name AS topic_name, - topic.description AS description - FROM topic WHERE description != '' - ) AS t - -ON ks_km_topic.cluster_phy_id = t.cluster_id - AND ks_km_topic.topic_name = t.topic_name - AND ks_km_topic.id > 0 - SET ks_km_topic.description = t.description; -``` \ No newline at end of file diff --git a/docs/user_guide/faq.md b/docs/user_guide/faq.md deleted file mode 100644 index 1656ec37..00000000 --- a/docs/user_guide/faq.md +++ /dev/null @@ -1,228 +0,0 @@ -# FAQ - -## 8.1、支持哪些 Kafka 版本? - -- 支持 0.10+ 的 Kafka 版本; -- 支持 ZK 及 Raft 运行模式的 Kafka 版本; - -  - -## 8.1、2.x 版本和 3.0 版本有什么差异? - -**全新设计理念** - -- 在 0 侵入、0 门槛的前提下提供直观 GUI 用于管理和观测 Apache Kafka®,帮助用户降低 Kafka CLI 操作门槛,轻松实现对原生 Kafka 集群的可管、可见、可掌控,提升 Kafka 使用体验和降低管理成本。 -- 支持海量集群一键接入,无需任何改造,即可实现集群深度纳管,真正的 0 侵入、插件化系统设计,覆盖 0.10.x-3.x.x 众多 Kafka 版本无缝纳管。 - -**开源协议调整** - -- 3.x:AGPL 3.0 -- 2.x:Apache License 2.0 - -更多具体内容见:[新旧版本对比](https://doc.knowstreaming.com/product/9-attachment#92%E6%96%B0%E6%97%A7%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94) - -  - -## 8.3、页面流量信息等无数据? - -- 1、`Broker JMX`未正确开启 - -可以参看:[Jmx 连接配置&问题解决](https://doc.knowstreaming.com/product/9-attachment#91jmx-%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3) - -- 2、`ES` 存在问题 - -建议使用`ES 7.6`版本,同时创建近 7 天的索引,具体见:[快速开始](./1-quick-start.md) 中的 ES 索引模版及索引创建。 - -  - -## 8.4、`Jmx`连接失败如何解决? - -- 参看 [Jmx 连接配置&问题解决](https://doc.knowstreaming.com/product/9-attachment#91jmx-%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3) 说明。 - -  - -## 8.5、有没有 API 文档? - -`KnowStreaming` 采用 Swagger 进行 API 说明,在启动 KnowStreaming 服务之后,就可以从下面地址看到。 - -Swagger-API 地址: [http://IP:PORT/swagger-ui.html#/](http://IP:PORT/swagger-ui.html#/) - -  - -## 8.6、删除 Topic 成功后,为何过段时间又出现了? - -**原因说明:** - -`KnowStreaming` 会去请求 Topic 的 endoffset 信息,要获取这个信息就需要发送 metadata 请求,发送 metadata 请求的时候,如果集群允许自动创建 Topic,那么当 Topic 不存在时,就会自动将该 Topic 创建出来。 - -**问题解决:** - -因为在 `KnowStreaming` 上,禁止 Kafka 客户端内部元信息获取这个动作非常的难做到,因此短时间内这个问题不好从 `KnowStreaming` 上解决。 - -当然,对于不存在的 Topic,`KnowStreaming` 是不会进行元信息请求的,因此也不用担心会莫名其妙的创建一个 Topic 出来。 - -但是,另外一点,对于开启允许 Topic 自动创建的集群,建议是关闭该功能,开启是非常危险的,如果关闭之后,`KnowStreaming` 也不会有这个问题。 - -最后这里举个开启这个配置后,非常危险的代码例子吧: - -```java -for (int i= 0; i < 100000; ++i) { - // 如果是客户端类似这样写的,那么一启动,那么将创建10万个Topic出来,集群元信息瞬间爆炸,controller可能就不可服务了。 - producer.send(new ProducerRecord("know_streaming" + i,"hello logi_km")); -} -``` - -  - -## 8.7、如何在不登录的情况下,调用接口? - -步骤一:接口调用时,在 header 中,增加如下信息: - -```shell -# 表示开启登录绕过 -Trick-Login-Switch : on - -# 登录绕过的用户, 这里可以是admin, 或者是其他的, 但是必须在系统管理->用户管理中设置了该用户。 -Trick-Login-User : admin -``` - -  - -步骤二:点击右上角"系统管理",选择配置管理,在页面中添加以下键值对。 - -```shell -# 模块选择 -SECURITY.LOGIN - -# 设置的配置键,必须是这个 -SECURITY.TRICK_USERS - -# 设置的value,是json数组的格式,包含步骤一header中设置的用户名,例如 -[ "admin", "logi"] -``` - -  - -步骤三:解释说明 - -设置完成上面两步之后,就可以直接调用需要登录的接口了。 - -但是还有一点需要注意,绕过的用户仅能调用他有权限的接口,比如一个普通用户,那么他就只能调用普通的接口,不能去调用运维人员的接口。 - -## 8.8、Specified key was too long; max key length is 767 bytes - -**原因:** 不同版本的 InoDB 引擎,参数‘innodb_large_prefix’默认值不同,即在 5.6 默认值为 OFF,5.7 默认值为 ON。 - -对于引擎为 InnoDB,innodb_large_prefix=OFF,且行格式为 Antelope 即支持 REDUNDANT 或 COMPACT 时,索引键前缀长度最大为 767 字节。innodb_large_prefix=ON,且行格式为 Barracuda 即支持 DYNAMIC 或 COMPRESSED 时,索引键前缀长度最大为 3072 字节。 - -**解决方案:** - -- 减少 varchar 字符大小低于 767/4=191。 -- 将字符集改为 latin1(一个字符=一个字节)。 -- 开启‘innodb_large_prefix’,修改默认行格式‘innodb_file_format’为 Barracuda,并设置 row_format=dynamic。 - -## 8.9、出现 ESIndexNotFoundEXception 报错 - -**原因 :**没有创建 ES 索引模版 - -**解决方案:**执行 init_es_template.sh 脚本,创建 ES 索引模版即可。 - -## 8.10、km-console 打包构建失败 - -首先,**请确保您正在使用最新版本**,版本列表见 [Tags](https://github.com/didi/KnowStreaming/tags)。如果不是最新版本,请升级后再尝试有无问题。 - -常见的原因是由于工程依赖没有正常安装,导致在打包过程中缺少依赖,造成打包失败。您可以检查是否有以下文件夹,且文件夹内是否有内容 - -``` -KnowStreaming/km-console/node_modules -KnowStreaming/km-console/packages/layout-clusters-fe/node_modules -KnowStreaming/km-console/packages/config-manager-fe/node_modules -``` - -如果发现没有对应的 `node_modules` 目录或着目录内容为空,说明依赖没有安装成功。请按以下步骤操作, - -1. 手动删除上述三个文件夹(如果有) - -2. 如果之前是通过 `mvn install` 打包 `km-console`,请到项目根目录(KnowStreaming)下重新输入该指令进行打包。观察打包过程有无报错。如有报错,请见步骤 4。 - -3. 如果是通过本地独立构建前端工程的方式(指直接执行 `npm run build`),请进入 `KnowStreaming/km-console` 目录,执行下述步骤(注意:执行时请确保您在使用 `node v12` 版本) - - a. 执行 `npm run i`。如有报错,请见步骤 4。 - - b. 执行 `npm run build`。如有报错,请见步骤 4。 - -4. 麻烦联系我们协助解决。推荐提供以下信息,方面我们快速定位问题,示例如下。 - -``` -操作系统: Mac -命令行终端:bash -Node 版本: v12.22.12 -复现步骤: 1. -> 2. -错误截图: -``` - -## 8.11、在 `km-console` 目录下执行 `npm run start` 时看不到应用构建和热加载过程?如何启动单个应用? - -需要到具体的应用中执行 `npm run start`,例如 `cd packages/layout-clusters-fe` 后,执行 `npm run start`。 - -应用启动后需要到基座应用中查看(需要启动基座应用,即 layout-clusters-fe)。 - - -## 8.12、权限识别失败问题 -1、使用admin账号登陆KnowStreaming时,点击系统管理-用户管理-角色管理-新增角色,查看页面是否正常。 - - - -2、查看'/logi-security/api/v1/permission/tree'接口返回值,出现如下图所示乱码现象。 -![接口返回值](http://img-ys011.didistatic.com/static/dc2img/do1_jTxBkwNGU9vZuYQQbdNw) - -3、查看logi_security_permission表,看看是否出现了中文乱码现象。 - -根据以上几点,我们可以确定是由于数据库乱码造成的权限识别失败问题。 - -+ 原因:由于数据库编码和我们提供的脚本不一致,数据库里的数据发生了乱码,因此出现权限识别失败问题。 -+ 解决方案:清空数据库数据,将数据库字符集调整为utf8,最后重新执行[dml-logi.sql](https://github.com/didi/KnowStreaming/blob/master/km-dist/init/sql/dml-logi.sql)脚本导入数据即可。 - - -## 8.13、接入开启kerberos认证的kafka集群 - -1. 部署KnowStreaming的机器上安装krb客户端; -2. 替换/etc/krb5.conf配置文件; -3. 把kafka对应的keytab复制到改机器目录下; -4. 接入集群时认证配置,配置信息根据实际情况填写; -```json -{ - "security.protocol": "SASL_PLAINTEXT", - "sasl.mechanism": "GSSAPI", - "sasl.jaas.config": "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab=\"/etc/keytab/kafka.keytab\" storeKey=true useTicketCache=false principal=\"kafka/kafka@TEST.COM\";", - "sasl.kerberos.service.name": "kafka" -} -``` - - -## 8.14、对接Ldap的配置 - -```yaml -# 需要在application.yml中增加如下配置。相关配置的信息,按实际情况进行调整 -account: - ldap: - url: ldap://127.0.0.1:8080/ - basedn: DC=senz,DC=local - factory: com.sun.jndi.ldap.LdapCtxFactory - filter: sAMAccountName - security: - authentication: simple - principal: CN=search,DC=senz,DC=local - credentials: xxxxxxx - auth-user-registration: false # 是否注册到mysql,默认false - auth-user-registration-role: 1677 # 1677是超级管理员角色的id,如果赋予想默认赋予普通角色,可以到ks新建一个。 - -# 需要在application.yml中修改如下配置 -spring: - logi-security: - login-extend-bean-name: ksLdapLoginService # 表示使用ldap的service -``` - -## 8.15、测试时使用Testcontainers的说明 -1. 需要docker运行环境 [Testcontainers运行环境说明](https://www.testcontainers.org/supported_docker_environment/) -2. 如果本机没有docker,可以使用[远程访问docker](https://docs.docker.com/config/daemon/remote-access/) [Testcontainers配置说明](https://www.testcontainers.org/features/configuration/#customizing-docker-host-detection) \ No newline at end of file diff --git a/docs/user_guide/新旧对比手册.md b/docs/user_guide/新旧对比手册.md deleted file mode 100644 index d934e41f..00000000 --- a/docs/user_guide/新旧对比手册.md +++ /dev/null @@ -1,92 +0,0 @@ -## 9.2、新旧版本对比 - -### 9.2.1、全新的设计理念 - -- 在 0 侵入、0 门槛的前提下提供直观 GUI 用于管理和观测 Apache Kafka®,帮助用户降低 Kafka CLI 操作门槛,轻松实现对原生 Kafka 集群的可管、可见、可掌控,提升 Kafka 使用体验和降低管理成本。 -- 支持海量集群一键接入,无需任何改造,即可实现集群深度纳管,真正的 0 侵入、插件化系统设计,覆盖 0.10.x-3.x.x 众多 Kafka 版本无缝纳管。 - -### 9.2.2、产品名称&协议 - -- Know Streaming V3.0 - - - 名称:Know Streaming - - 协议:AGPL 3.0 - -- Logi-KM V2.x - - - 名称:Logi-KM - - 协议:Apache License 2.0 - -### 9.2.3、功能架构 - -- Know Streaming V3.0 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_VQD9ke5jewpjCIWamUKV) - -- Logi-KM V2.x - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_F211q5lVCXQCXQNzWalu) - -### 9.2.4、功能变更 - -- 多集群管理 - - - 增加健康监测体系、关键组件&指标 GUI 展示 - - 增加 2.8.x 以上 Kafka 集群接入,覆盖 0.10.x-3.x - - 删除逻辑集群、共享集群、Region 概念 - -- Cluster 管理 - - - 增加集群概览信息、集群配置变更记录 - - 增加 Cluster 健康分,健康检查规则支持自定义配置 - - 增加 Cluster 关键指标统计和 GUI 展示,支持自定义配置 - - 增加 Cluster 层 I/O、Disk 的 Load Reblance 功能,支持定时均衡任务(企业版) - - 删除限流、鉴权功能 - - 删除 APPID 概念 - -- Broker 管理 - - - 增加 Broker 健康分 - - 增加 Broker 关键指标统计和 GUI 展示,支持自定义配置 - - 增加 Broker 参数配置功能,需重启生效 - - 增加 Controller 变更记录 - - 增加 Broker Datalogs 记录 - - 删除 Leader Rebalance 功能 - - 删除 Broker 优先副本选举 - -- Topic 管理 - - - 增加 Topic 健康分 - - 增加 Topic 关键指标统计和 GUI 展示,支持自定义配置 - - 增加 Topic 参数配置功能,可实时生效 - - 增加 Topic 批量迁移、Topic 批量扩缩副本功能 - - 增加查看系统 Topic 功能 - - 优化 Partition 分布的 GUI 展示 - - 优化 Topic Message 数据采样 - - 删除 Topic 过期概念 - - 删除 Topic 申请配额功能 - -- Consumer 管理 - - - 优化了 ConsumerGroup 展示形式,增加 Consumer Lag 的 GUI 展示 - -- ACL 管理 - - - 增加原生 ACL GUI 配置功能,可配置生产、消费、自定义多种组合权限 - - 增加 KafkaUser 功能,可自定义新增 KafkaUser - -- 消息测试(企业版) - - - 增加生产者消息模拟器,支持 Data、Flow、Header、Options 自定义配置(企业版) - - 增加消费者消息模拟器,支持 Data、Flow、Header、Options 自定义配置(企业版) - -- Job - - - 优化 Job 模块,支持任务进度管理 - -- 系统管理 - - - 优化用户、角色管理体系,支持自定义角色配置页面及操作权限 - - 优化审计日志信息 - - 删除多租户体系 - - 删除工单流程 \ No newline at end of file diff --git a/docs/user_guide/用户使用手册.md b/docs/user_guide/用户使用手册.md deleted file mode 100644 index 6179cb3b..00000000 --- a/docs/user_guide/用户使用手册.md +++ /dev/null @@ -1,848 +0,0 @@ - -## 5.0、产品简介 - -`Know Streaming` 是一套云原生的 Kafka 管控平台,脱胎于众多互联网内部多年的 Kafka 运营实践经验,专注于 Kafka 运维管控、监控告警、资源治理、多活容灾等核心场景,在用户体验、监控、运维管控上进行了平台化、可视化、智能化的建设,提供一系列特色的功能,极大地方便了用户和运维人员的日常使用,让普通运维人员都能成为 Kafka 专家。 - -## 5.1、功能架构 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_jL7YJywtBtiR8VxIabsn) - -## 5.2、体验路径 - -下面是用户第一次使用我们产品的典型体验路径: - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_qgqPsAY46sZeBaPUCwXY) - -## 5.3、常用功能 - -### 5.3.1、用户管理 - -用户管理是提供给管理员进行人员管理和用户角色管理的功能模块,可以进行新增用户和分配角色。下面是一个典型的场景: -eg:团队加入了新成员,需要给这位成员分配一个使用系统的账号,需要以下几个步骤 - -- 步骤 1:点击“系统管理”>“用户管理”>“人员管理”>“新增用户”,输入“账号”、“实名”、“密码”,根据此账号所需要的权限,选择此账号所对应的角色。如果有满足权限的角色,则用户新增成功。如果没有满足权限的角色,则需要新增角色(步骤 2) -- 步骤 2:点击“系统管理”>“用户管理”>“角色管理”>“新增角色”。输入角色名称和描述,给此角色分配权限,点击“确定”,角色新增成功 - -- 步骤 3:根据此新增的角色,参考步骤 1,重新新增用户 - -- 步骤 4:此用户账号新增成功,可以进行登录产品使用 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_1gectG2B9xHKfEsapUJq) - -### 5.3.2、接入集群 - -- 步骤 1:点击“多集群管理”>“接入集群” - -- 步骤 2:填写相关集群信息 - -- 集群名称:支持中英文、下划线、短划线(-),最长 128 字符。平台内不能重复 - - Bootstrap Servers:输入 Bootstrap Servers 地址。输入完成之后会进行连接测试,测试完成之后会给出测试结果连接成功 or 连接失败(以及失败的原因)。 - - Zookeeper:输入 zookeeper 地址,输入完成之后会进行连接测试,测试完成之后会给出测试结果连接成功 or 连接失败(以及失败的原因) - - Metrics 选填:JMX Port,输入 JMX 端口号;MaxConn,输入服务端最大允许的连接数 - - Security:若有 JMX 账号密码,则输入账号密码 - - Version:选择所支持的 kafka 版本,如果没有匹配则可以选择相近版本 - - 集群配置选填:输入用户创建 kafka 客户端进行信息获取的相关配置 - - 集群描述:最多 200 字符 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_2uxzaT3GTLWUifVg7xhd) - -### 5.3.3、新增 Topic - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“新增 Topic”按钮>“创建 Topic“抽屉 - -- 步骤 2:输入“Topic 名称(不能重复)”、“Topic 描述”、“分区数”、“副本数”、“数据保存时间”、“清理策略(删除或压缩)” - -- 步骤 3:展开“更多配置”可以打开高级配置选项,根据自己需要输入相应配置参数 - -- 步骤 4:点击“确定”,创建 Topic 完成 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_dCZapJWwGPaumUADUvlB) - -### 5.3.4、Topic 扩分区 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“Topic 列表“>操作项”扩分区“>“扩分区”抽屉 - -- 步骤 2:扩分区抽屉展示内容为“流量的趋势图”、“当前分区数及支持的最低消息写入速率”、“扩分区后支持的最低消息写入速率” - -- 步骤 3:输入所需的分区总数,自动计算出扩分区后支持的最低消息写入速率 - -- 步骤 4:点击确定,扩分区完成 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_FeT51Tn56GtCCTbul8Ly) - -### 5.3.5、Topic 批量扩缩副本 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“批量操作下拉“>“批量扩缩副本“>“批量扩缩容”抽屉 - -- 步骤 2:选择所需要进行扩缩容的 Topic,可多选,所选择的 Topic 出现在下方 Topic 列表中 - -- 步骤 3:Topic 列表展示 Topic“近三天平均流量”、“近三天峰值流量及时间”、“Partition 数”、”当前副本数“、“新副本数” - -- 步骤 4:扩容时,选择目标节点,新增的副本会在选择的目标节点上;缩容时不需要选择目标节点,自动删除最后一个(或几个)副本 - -- 步骤 5:输入迁移任务配置参数,包含限流值和任务执行时间 - -- 步骤 6:输入任务描述 - -- 步骤 7:点击“确定”,创建 Topic 扩缩副本任务 - -- 步骤 8:去“Job”模块的 Job 列表查看创建的任务,如果已经执行则可以查看执行进度;如果未开始执行则可以编辑任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_bqr3jDYNnTzaCSwXYnI6) - -### 5.3.6、Topic 批量迁移 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“批量操作下拉“>“批量迁移“>“批量迁移”抽屉 - -- 步骤 2:选择所需要进行迁移的 Topic,可多选,所选择的 Topic 出现在下方 Topic 列表中 - -- 步骤 3:选择所需要迁移的 partition 和迁移数据的时间范围 - -- 步骤 4:选择目标节点(节点数必须不小于最大副本数) - -- 步骤 5:点击“预览任务计划”,打开“任务计划”二次抽屉,可对目标 Broker ID 进行编辑 - -- 步骤 6:输入迁移任务配置参数,包含限流值和任务执行时间 - -- 步骤 7:输入任务描述 - -- 步骤 8:点击“确定”,创建 Topic 迁移任务 - -- 步骤 9:去“Job”模块的 Job 列表查看创建的任务,如果已经执行则可以查看执行进度;如果未开始执行则可以编辑任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ECRMSVF7NUf8HeserFuk) - -### 5.3.7、设置 Cluster 健康检查规则 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“集群健康状态旁边 icon”>“健康度设置抽屉” - -- 步骤 2:健康度设置抽屉展示出了检查项和其对应的权重,可以修改检查项的检查规则 - -- 步骤 3:检查规则可配置,分别为 - - - Cluster:集群 controller 数不等于 1(数字不可配置)不通过 - - Broker:RequestQueueSize 大于等于 10(默认为 10,可配置数字)不通过 - - Broker:NetworkProcessorAvgIdlePercent 的 Idle 小于等于 0.8%(默认为 0.8%,可配置数字)不通过 - - Topic:无 leader 的 Topic 数量,大于等于 1(默认为 1,数字可配置)不通过 - - Topic:Topic 在 10(默认为 10,数字可配置)个周期内 8(默认为 8,数字可配置)个周期内处于未同步的状态则不通过 - - ConsumerGroup:Group 在 10(默认为 10,数字可配置)个周期内进行 8(默认为 8,数字可配置)次 re-balance 不通过 - -- 步骤 4:设置完成后,点击“确认”,健康检查规则设置成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_Md6TtfIGYQ2BWUytqeF4) - -### 5.3.8、图表指标筛选 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“指标筛选 icon”>“指标筛选抽屉” - -- 步骤 2:指标筛选抽屉展示信息为以下几类“Health”、“Cluster”、“Broker”、“Consumer”、“Security”、“Job” - -- 步骤 3:默认勾选比较重要的指标进行展示。根据需要选中/取消选中相应指标,点击”确认“,指标筛选成功,展示的图表随之变化 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_bRWCetcKReMAT3BjAlSZ) - -### 5.3.9、编辑 Broker 配置 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Brokers”>“Broker ID”>“Configuration”TAB>“编辑”按钮 - -- 步骤 2:输入配置项的新配置内容 - -- 步骤 3:(选填)点击“应用于全部 Broker”,将此配置项的修改应用于全部的 Broker - -- 步骤 4:点击“确认”,Broker 配置修改成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_anLQzYlq1gjMltsiqeRA) - -### 5.3.10、重置 consumer Offset - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Consumer”>“Consumer Group”名称>“Consumer Group 详情”抽屉>“重置 Offset”按钮>“重置 Offset”抽屉 - -- 步骤 2:选择重置 Offset 的类型,可“重置到指定时间”或“重置分区” - -- 步骤 3:重置到指定时间,可选择“最新 Offset”或“自定义时间” - -- 步骤 4:重置分区,可选择 partition 和其重置的 offset - -- 步骤 5:点击“确认”,重置 Offset 开始执行 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_Lv2kxCbpSsuPGYljjEtD) - -### 5.3.11、新增 ACL - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Security”>“Users”>“新增 ACL” - -- 步骤 2:输入 ACL 配置参数 - - - ACL 用途:生产权限、消费权限、自定义权限 - - 生产权限时:可选择应用于所有 Kafka User 或者特定 Kafka User;可选择应用于所有 Topic 或者特定 Topic - - 消费权限时:可选择应用于所有 Kafka User 或者特定 Kafka User;可选择应用于所有 Topic 或者特定 Topic;可选择应用于所有 Consumer Group 或者特定 Consumer Group - -- 步骤 3:点击“确定”,新增 ACL 成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_P2a965if8t5Pjx79r1j3) - -## 5.4、全部功能 - -### 5.4.1、登录/退出登录 - -- 登录:输入账号密码,点击登录 - -- 退出登录:鼠标悬停右上角“头像”或者“用户名”,出现小弹窗“登出”,点击“登出”,退出登录 - -### 5.4.2、系统管理 - -用户登录完成之后,点击页面右上角【系统管理】按钮,切换到系统管理的视角,可以进行配置管理、用户管理、审计日志查看。 -![text](http://img-ys011.didistatic.com/static/dc2img/do1_xffkghPlUAzDiqj8wF7s) - -#### 5.4.2.1、配置管理 - -配置管理是提供给管理员一个快速配置配置文件的能力,所配置的配置文件将会在对应模块生效。 - -#### 5.4.2.2、查看配置列表 - -- 步骤 1:点击”系统管理“>“配置管理” - -- 步骤 2:列表展示配置所属模块、配置键、配置值、启用状态、更新时间、更新人。列表有操作项编辑、删除,可对配置模块、配置键、配置值、描述、启用状态进行配置,也可删除此条配置 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_gg8SMKKn9N6FrtFgJ2r8) - -#### 5.4.2.3、新增配置 - -- 步骤 1:点击“系统管理”>“配置管理”>“新增配置” - -- 步骤 2:模块:下拉选择所有可配置的模块;配置键:不限制输入内容,500 字以内;配置值:代码编辑器样式,不限内容不限长度;启用状态开关:可以启用/禁用此项配置 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_d9hHB5Anb1FjP2IIiCVh) - -#### 5.4.2.4、编辑配置 - -可对配置模块、配置键、配置值、描述、启用状态进行配置。 - -#### 5.4.2.5、用户管理 - -用户管理是提供给管理员进行人员管理和用户角色管理的功能模块,可以进行新增用户和分配角色。 - -#### 5.4.2.6、人员管理列表 - -- 步骤 1:点击“系统管理”>“用户管理”>“人员管理” - -- 步骤 2:人员管理列表展示用户角色、用户实名、用户分配的角色、更新时间、编辑操作。 - -- 步骤 3:列表支持”用户账号“、“用户实名”、“角色名”筛选。 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_7LUdIbIPY61W7bqQaTDK) - -#### 5.4.2.7、新增用户 - -- 步骤 1:点击“系统管理”>“用户管理”>“人员管理”>“新增用户” - -- 步骤 2:填写“用户账号”、“用户实名”、“用户密码”这些必填参数,可以对此账号分配已经存在的角色。 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_lsmPRbb2uTE1QCM6Pxih) - -#### 5.4.2.8、编辑用户 - -- 步骤 1:点击“系统管理”>“用户管理”>“人员管理”>列表操作项“编辑” - -- 步骤 2:用户账号不可编辑;可以编辑“用户实名”,修改“用户密码”,重新分配“用户角色“ - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_9HXnM9FC3krYERmZwSHL) - -#### 5.4.2.9、角色管理列表 - -- 步骤 1:点击“系统管理”>“用户管理”>“角色管理” - -- 步骤 2:角色列表展示信息为“角色 ID”、“名称”、“描述”、“分配用户数”、“最后修改人”、“最后更新时间”、操作项“查看详情”、操作项”分配用户“ - -- 步骤 3:列表有筛选框,可对“角色名称”进行筛选 - -- 步骤 4:列表操作项,“查看详情”可查看到角色绑定的权限项,”分配用户“可对此项角色下绑定的用户进行增减 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_iru2gmXHCY6lI6hRNBKm) - -#### 5.4.2.10、新增角色 - -- 步骤 1:点击“系统管理”>“用户管理”>“角色管理”>“新增角色” - -- 步骤 2:输入“角色名称”(角色名称只能由中英文大小写、数字、下划线\_组成,长度限制在 3 ~ 128 字符)、“角色描述“(不能为空)、“分配权限“(至少需要分配一项权限),点击确认,新增角色成功添加到角色列表 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_dTlQYcV4gPzQGqd6uYhm) - -#### 5.4.2.11、审计日志 - -- 步骤 1:点击“系统管理”>“审计日志“ -- 步骤 2:审计日志包含所有对于系统的操作记录,操作记录列表展示信息为下 - - - “模块”:操作对象所属的功能模块 - - “操作对象”:具体哪一个集群、任务 ID、topic、broker、角色等 - - “行为”:操作记录的行为,包含“新增”、“替换”、“读取”、“禁用”、“修改”、“删除”、“编辑”等 - - “操作内容”:具体操作的内容是什么 - - “操作时间”:操作发生的时间 - - “操作人”:此项操作所属的用户 - -- 步骤 3:操作记录列表可以对“模块“、”操作对象“、“操作内容”、”操作时间“进行筛选 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_giPBGraylRaSDcF2ZeyA) - -### 5.4.3、多集群管理 - -#### 5.4.3.1、多集群列表 - -- 步骤 1:点击顶部导航栏“多集群管理” - -- 步骤 2:多集群管理页面包含的信息为:”集群信息总览“、“集群列表”、“列表筛选项”、“接入集群” - -- 步骤 3:集群列表筛选项为 - - - 集群信息总览:cluster 总数、live 数、down 数 - - 版本筛选:包含所有存在的集群版本 - - 健康分筛选:筛选项为 0、10、20、30、40、50、60、70、80、90、100 - - live、down 筛选:多选 - - 下拉框筛选排序,选项维度为“接入时间”、“健康分“、”Messages“、”MessageSize“、”BytesIn“、”BytesOut“、”Brokers“;可对这些维度进行“升序”、“降序”排序 - -- 步骤 4:每个卡片代表一个集群,其所展示的集群概览信息包括“健康分及健康检查项通过数”、“broker 数量”、“ZK 数量”、“版本号”、“BytesIn 均衡状态”、“BytesOut 均衡状态”、“Disk 均衡状态”、”Messages“、“MessageSize”、“BytesIn”、“BytesOut”、“接入时间” - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_yciHsqZQkLChT8guTEdl) - -#### 5.4.3.2、接入集群 - -- 步骤 1:点击“多集群管理”>“接入集群” - -- 步骤 2:填写相关集群信息 - - 集群名称:平台内不能重复 - - Bootstrap Servers:输入 Bootstrap Servers 地址,输入完成之后会进行连接测试,测试完成之后会给出测试结果连接成功 or 连接失败(以及失败的原因)。 - - Zookeeper:输入 zookeeper 地址,输入完成之后会进行连接测试,测试完成之后会给出测试结果连接成功 or 连接失败(以及失败的原因) - - Metrics 选填:JMX Port,输入 JMX 端口号;MaxConn,输入服务端最大允许的连接数 - - Security:若有 JMX 账号密码,则输入账号密码 - - Version:kafka 版本,如果没有匹配则可以选择相近版本 - - 集群配置选填:用户创建 kafka 客户端进行信息获取的相关配置 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_bRWCetcKReMAT3BjAlSZ) - -#### 5.4.3.3、删除集群 - -- 步骤 1:点击“多集群管理”>鼠标悬浮集群卡片>点击卡片右上角“删除 icon”>打开“删除弹窗” - -- 步骤 2:在删除弹窗中的“集群名称”输入框,输入所要删除集群的集群名称,点击“删除”,成功删除集群,解除平台的纳管关系(集群资源不会删除) - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_8c9AB3k68ggrvj3yN8bl) - -### 5.4.4、Cluster 管理 - -#### 5.4.4.1、Cluster Overview - -- 步骤 1:点击“多集群管理”>“集群卡片”>进入单集群管理界面 - -- 步骤 2:左侧导航栏 - - - 一级导航:Cluster;二级导航:Overview、Load Rebalance - - 一级导航:Broker;二级导航:Overview、Brokers、Controller - - 一级导航:Topic;二级导航:Overview、Topics - - 一级导航:Consumer - - 一级导航:Testing;二级导航:Produce、Consume - - 一级导航:Security;二级导航:ACLs、Users - - 一级导航:Job - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_YIXlGylpecRkwbhzJtpF) - -#### 5.4.4.2、查看 Cluster 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview” - -- 步骤 2:cluster 概览信息包括以下内容 - - - 集群健康分,健康检查通过项 - - Cluster 信息:包含名称、版本、均衡状态 - - Broker 信息:Broker 总数、controller 信息、similar config 信息 - - Topic 信息:Topic 总数、No Leader、“集群卡片”>“Cluster”>“Overview”>“集群健康状态旁边 icon”>“健康度设置抽屉” - -- 步骤 2:健康度设置抽屉展示出了检查项和其对应的权重,可以修改检查项的检查规则 - -- 步骤 3:检查规则可配置,分别为 - - - Cluster:集群 controller 数不等于 1(数字不可配置)不通过 - - Broker:RequestQueueSize 大于等于 10(默认为 10,可配置数字)不通过 - - Broker:NetworkProcessorAvgIdlePercent 的 Idle 小于等于 0.8%(默认为 0.8%,可配置数字)不通过 - - Topic:无 leader 的 Topic 数量,大于等于 1(默认为 1,数字可配置)不通过 - - Topic:Topic 在 10(默认为 10,数字可配置)个周期内 8(默认为 8,数字可配置)个周期内处于未同步的状态 - - ConsumerGroup:Group 在 10(默认为 10,数字可配置)个周期内进行 8(默认为 8,数字可配置)次 re-balance 不通过 - -- 步骤 4:设置完成后,点击“确认”,健康检查规则设置成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ajKNtGeWgqZNFhN1r1Wv) - -#### 5.4.4.4、查看 Cluster 健康检查详情 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“集群健康状态旁边【查看详情】”>“健康检查详情抽屉” - -- 步骤 2:健康检查详情抽屉展示信息为:“检查模块”、“检查项”、“权重”、“得分”、“检查时间”、“检查结果是否通过”,若未通过会展示未通过的对象 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_TuXSU5PHb7PXKf3jTwkU) - -#### 5.4.4.5、编辑 Cluster 信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“Cluster 名称旁边编辑 icon”>“编辑集群抽屉” - -- 步骤 2:可编辑的信息包括“集群名称”、“Bootstrap Servers”、“Zookeeper”、“JMX Port”、“Maxconn(最大连接数)”、“Security(认证措施)”、“Version(版本号)”、“集群配置”、“集群描述” - -- 步骤 3:点击“确定”,成功编辑集群信息 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_lqvML71UvjwpPsxqvAS1) - -#### 5.4.4.6、图表指标筛选 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“指标筛选 icon”>“指标筛选抽屉” - -- 步骤 2:指标筛选抽屉展示信息为以下几类“Health”、“Cluster”、“Broker”、“Consumer”、“Security”、“Job” - -- 步骤 3:默认勾选比较重要的指标进行展示。根据需要选中/取消选中相应指标,点击”确认“,指标筛选成功,展示的图表随之变化 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_IEeZFWD31gMYnjjg2tvT) - -#### 5.4.4.7、图表时间筛选 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“时间选择下拉框”>“时间选择弹窗” - -- 步骤 2:选择时间“最近 15 分钟”、“最近 1 小时”、“最近 6 小时”、“最近 12 小时”、“最近 1 天”,也可以自定义时间段范围 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_Ah4XsKQjpQCtXjCWnKJm) - -#### 5.4.4.8、查看集群历史变更记录 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Overview”>“历史变更记录”区域 - -- 步骤 2:历史变更记录区域展示了历史的配置变更,每条记录可展开收起。包含“配置对象”、“变更时间”、“变更内容”、“配置类型” - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_jXTVLBBbzS5y6cJJMl6t) - -### 5.4.5、Load Rebalance(企业版) - -#### 5.4.5.1、查看 Load Rebalance 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Load Rebalance” - -- 步骤 2:Load Rebalance 概览信息包含“均衡状态卡片”、“Disk 信息卡片”、“BytesIn 信息卡片”、“BytesOut 信息卡片”、“Broker 均衡状态列表” - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_MeEqlaIrq7hK9ncWASIw) - -#### 5.4.5.2、设置集群规格 - -提供对集群的每个节点的 Disk、BytesIn、BytesOut 的规格进行设置的功能 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Load Rebalance”>“State 卡片 icon“>”设置集群规格抽屉“ - -- 步骤 2:穿梭框左侧展示集群中的待选节点,穿梭框右侧展示已经选中的节点,选择自己所需设置规格的节点 - -- 步骤 3:设置“单机核数”、“单机磁盘”、“单机网络”,点击确定,完成设置 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_JBs3ZNQPZNrGpgwj78Je) - -#### 5.4.5.3、均衡状态列表筛选 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Load Rebalance”>“筛选列表”按钮>筛选弹窗 - -- 步骤 2:可选择“Disk”、“BytesIn”、“BytesOut”三种维度,其各自对应“已均衡”、“未均衡”两种状态,可以组合进行筛选 - -- 步骤 3:点击“确认”,执行筛选操作 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ExXNURKB5Ud99IzWASEJ) - -#### 5.4.5.4、立即均衡 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Load Rebalance”>“立即均衡”按钮>“立即均衡抽屉” - -- 步骤 2:配置均衡策略 - - - 指标计算周期:默认近 10mins,可选择 - - 均衡维度:默认 Disk、BytesIn、BytesOut,可选择 - - 均衡区间:在表格内自定义配置均衡区间范围(单位:%,大于 0,小于 100) - - Topic 黑名单:选择 topic 黑名单。通过穿梭框(支持模糊选择)选出目标 topic(本次均衡,略过已选的 topic) - -- 步骤 3:配置运行参数 - - - 吞吐量优先:并行度 0(无限制), 策略是优先执行大小最大副本 - - 稳定性优先: 并行度 1 ,策略是优先执行大小最小副本 - - 自定义:可以自由设置并行度和优先执行的副本策略 - - 限流值:流量最大值,0-99999 自定义 - -- 步骤 4:点击“预览计划”按钮,打开执行计划弹窗。可以看到计划概览信息、计划明细信息 - -- 步骤 5:点击“预览计划弹窗”的“执行文件”,可以下载 json 格式的执行文件 - -- 步骤 6:点击“预览计划弹窗”的“立即均衡”按钮,开始执行均衡任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_I5BzRuHC9m74uE3mrjy8) - -#### 5.4.5.5、周期均衡 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Cluster”>“Load Rebalance”>“周期均衡”按钮>“周期均衡抽屉” - -- 步骤 2:配置均衡策略 - - - 指标计算周期:默认近 10mins,可选择 - - 均衡维度:默认 Disk、BytesIn、BytesOut,可选择 - - 均衡区间:在表格内自定义配置均衡区间范围(单位:%,大于 0,小于 100) - - Topic 黑名单:选择 topic 黑名单。通过穿梭框(支持模糊选择)选出目标 topic(本次均衡,略过已选的 topic) - -- 步骤 3:配置运行参数 - - - 任务并行度:每个节点同时迁移的副本数量 - - 任务周期:时间选择器,自定义选择运行周期 - - 稳定性优先: 并行度 1 ,策略是优先执行大小最小副本 - - 自定义:可以自由设置并行度和优先执行的副本策略 - - 限流值:流量最大值,0-99999 自定义 - -- 步骤 4:点击“预览计划”按钮,打开执行计划弹窗。可以看到计划概览信息、计划明细信息 - -- 步骤 5:点击“预览计划弹窗”的“执行文件”,可以下载 json 格式的执行文件 - -- 步骤 6:点击“预览计划弹窗”的“立即均衡”按钮,开始执行均衡任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_QGfzkR6CM8qICuFqTAuI) - -### 5.4.6、Broker - -#### 5.4.6.1、查看 Broker 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Broker”>“Overview” - -- 步骤 2:Broker 概览信息包括以下内容 - - - 集群健康分,健康检查通过项 - - Broker 信息:包含名称、版本、均衡状态 - - Broker 信息:Broker 总数、controller 信息、similar config 信息 - - Topic 信息:Topic 总数、No Leader、“集群卡片”>“Brokers”>“Broker ID”>“Configuration”TAB>“编辑”按钮 - -- 步骤 2:输入配置项的新配置内容 - -- 步骤 3:(选填)点击“应用于全部 Broker”,将此配置项的修改应用于全部的 Broker - -- 步骤 4:点击“确认”,Broker 配置修改成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_wdNA5LQiNUDRGuWYCzEX) - -#### 5.4.6.3、查看 Broker DataLogs - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Brokers”>“Broker ID”>“Data Logs”TAB>“编辑”按钮 - -- 步骤 2:Broker DataLogs 列表展示的信息为“Folder”、“topic”、“Partition”、“Offset Lag”、“Size” - -- 步骤 3:输入框输入”Topic Name“可以筛选结果 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_LfTeBEkwaLsX95Ep1ix3) - -#### 5.4.6.4、查看 Controller 列表 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Broker”>“Controller” - -- 步骤 2:Controller 列表展示的信息为“Change Time”、“Broker ID”、“Broker Host” - -- 步骤 3:输入框输入“Broker Host“可以筛选结果 - -- 步骤 4:点击 Broker ID 可以打开 Broker 详情,进行修改配置或者查看 DataLogs - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_PwqY9cZ1DbIpBRC2mJE9) - -### 5.4.7、Topic - -#### 5.4.7.1、查看 Topic 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Overview” - -- 步骤 2:Topic 概览信息包括以下内容 - - - 集群健康分,健康检查通过项 - - Topics:Topic 总数 - - Partitions:Partition 总数 - - PartitionNoLeader:没有 leader 的 partition 个数 - - < Min ISR:同步副本数小于 Min ISR - - =Min ISR:同步副本数等于 Min ISR - - Topic 指标图表 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_LTYaGiXhE5bI3CAApWwx) - -#### 5.4.7.2、查看 Topic 健康检查详情 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Overview”>“集群健康状态旁边【查看详情】”>“健康检查详情抽屉” - -- 步骤 2:健康检查详情抽屉展示信息为:“检查项”、“权重”、“得分”、“检查时间”、“检查结果是否通过”,若未通过会展示未通过的对象 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_Kiq1nhPtJTgG7xcLLH9H) - -#### 5.4.7.3、查看 Topic 列表 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics” - -- 步骤 2:Topic 列表展示内容为“TopicName”、“Partitions”、“Replications”、“健康分”、“BytesIn”、“BytesOut”、“MessageSize”、“保存时间”、“描述”、操作项”扩分区“、操作项”删除“ - -- 步骤 3:筛选框输入“TopicName”可以对列表进行筛选;点击“展示系统 Topic”开关,可以筛选系统 topic - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_kenpn9ijRb2DbPN7wrr1) - -#### 5.4.7.4、新增 Topic - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“新增 Topic”按钮>“创建 Topic“抽屉 - -- 步骤 2:输入“Topic 名称(不能重复)”、“Topic 描述”、“分区数”、“副本数”、“数据保存时间”、“清理策略(删除或压缩)” - -- 步骤 3:展开“更多配置”可以打开高级配置选项,根据自己需要输入相应配置参数 - -- 步骤 4:点击“确定”,创建 Topic 完成 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ZsaKRRqT69Ugw5yCHpE7) - -#### 5.4.7.5、Topic 扩分区 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“Topic 列表“>操作项”扩分区“>“扩分区”抽屉 - -- 步骤 2:扩分区抽屉展示内容为“流量的趋势图”、“当前分区数及支持的最低消息写入速率”、“扩分区后支持的最低消息写入速率” - -- 步骤 3:输入所需的分区总数,自动计算出扩分区后支持的最低消息写入速率 - -- 步骤 4:点击确定,扩分区完成 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ifCma3pKlUnGd3UXunNi) - -#### 5.4.7.6、删除 Topic - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“Topic 列表“>操作项”删除“>“删除 Topic”弹窗 - -- 步骤 2:输入“TopicName”进行二次确认 - -- 步骤 3:点击“删除”,删除 Topic 完成 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_xdP42WmnyaK9zZiMWM6s) - -#### 5.4.7.7、Topic 批量扩缩副本 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“批量操作下拉“>“批量扩缩副本“>“批量扩缩容”抽屉 - -- 步骤 2:选择所需要进行扩缩容的 Topic,可多选,所选择的 Topic 出现在下方 Topic 列表中 - -- 步骤 3:Topic 列表展示 Topic“近三天平均流量”、“近三天峰值流量及时间”、“Partition 数”、”当前副本数“、“新副本数” - -- 步骤 4:扩容时,选择目标节点,新增的副本会在选择的目标节点上;缩容时不需要选择目标节点,自动删除最后一个(或几个)副本 - -- 步骤 5:输入迁移任务配置参数,包含限流值和任务执行时间 - -- 步骤 6:输入任务描述 - -- 步骤 7:点击“确定”,执行 Topic 扩缩容任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_DNIdGs7Uym3yppmvGrBd) - -#### 5.4.7.8、Topic 批量迁移 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Topic”>“Topics”>“批量操作下拉“>“批量迁移“>“批量迁移”抽屉 - -- 步骤 2:选择所需要进行迁移的 Topic,可多选,所选择的 Topic 出现在下方 Topic 列表中 - -- 步骤 3:选择所需要迁移的 partition 和迁移数据的时间范围 - -- 步骤 4:选择目标节点(节点数必须不小于最大副本数) - -- 步骤 5:点击“预览任务计划”,打开“任务计划”二次抽屉,可对每个 partition 的目标 Broker ID 进行编辑,目标 broker 应该等于副本数 - -- 步骤 6:输入迁移任务配置参数,包含限流值和任务执行时间 - -- 步骤 7:输入任务描述 - -- 步骤 8:点击“确定”,执行 Topic 迁移任务 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_Xm5fExFrN7Q1m6uWcbrR) - -### 5.4.8、Consumer - -#### 5.4.8.1、Consumer Overview - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Consumer” - -- 步骤 2:Consumer 概览信息包括以下内容 - - - 集群健康分,健康检查通过项 - - Groups:Consumer Group 总数 - - GroupsActives:活跃的 Group 总数 - - GroupsEmptys:Empty 的 Group 总数 - - GroupRebalance:进行 Rebalance 的 Group 总数 - - GroupDeads:Dead 的 Group 总数 - - Consumer Group 列表 - -- 步骤 3:输入“Consumer Group”、“Topic Name‘,可对列表进行筛选 - -- 步骤 4:点击列表“Consumer Group”名称,可以查看 Comsuer Group 详情 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_y7EQwDvJGSVHbpLntZCX) - -#### 5.4.8.2、查看 Consumer 列表 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Consumer”>“Consumer Group”名称>“Consumer Group 详情”抽屉 - -- 步骤 2:Consumer Group 详情有列表视图和图表视图 - -- 步骤 3:列表视图展示信息为 Consumer 列表,包含”Topic Partition“、”Member ID“、”Current Offset“、“Log End Offset”、”Lag“、”Host“、”Client ID“ - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_fb9fbUTfBDwVN8iXyQM9) - -#### 5.4.8.3、重置 Offset - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Consumer”>“Consumer Group”名称>“Consumer Group 详情”抽屉>“重置 Offset”按钮>“重置 Offset”抽屉 - -- 步骤 2:选择重置 Offset 的类型,可“重置到指定时间”或“重置分区” - -- 步骤 3:重置到指定时间,可选择“最新 Offset”或“自定义时间” - -- 步骤 4:重置分区,可选择 partition 和其重置的 offset - -- 步骤 5:点击“确认”,重置 Offset 开始执行 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_bflSMxUjzwR5Jq5TrHyH) - -### 5.4.9、Testing(企业版) - -#### 5.4.9.1、生产测试 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Testing”>“Produce” - -- 步骤 2:生产配置 - - - Data:选择数据写入的 topic,输入写入数据的 key(暂只支持 string 格式),输入写入数据的 value(暂只支持 string 格式)。其中 key 和 value 可以随机生成 - - Flow:输入单次发送的消息数量,默认为 1,可以手动修改。选择手动生产模式,代表每次点击按钮【Run】执行生产;选择周期生产模式,需要填写运行总时间和运行时间间隔。 - - Header:输入 Header 的 key,value - - Options:选择 Froce Partition,代表消息仅发送到这些选择的 Partition。选择数据压缩格式。选择 Acks 参数,none 意思是消息发送了就认为发送成功;leader 意思是 leader 接收到消息(不管 follower 有没有同步成功)认为消息发送成功;all 意思是所有的 follower 消息同步成功认为是消息发送成功 - -- 步骤 3:点击按钮【Run】,生产测试开始,可以从右侧看到生产测试的信息 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_1pkBHvyVpGqTyUlSusUJ) - -#### 5.4.9.2、消费测试 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Testing”>“Consume” - -- 步骤 2:消费配置 - - - Topic:选择数据从哪个 topic 进行消费 - - Start From:选择数据从什么地方开始消费,可以根据时间选择或者根据 Offset 进行选择 - - Until:选择消费截止到什么地方,可以根据时间或者 offset 或者消息数等进行选择 - - Filter:选择过滤器的规则。包含/不包含某【key,value】;等于/大于/小于多少条消息 - -- 步骤 3:点击按钮【Run】,消费测试开始,可以在右边看到消费的明细信息 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_3fjHM3uDIpV6UIVEaHeQ) - -### 5.4.10、Security - -注意:只有在开启集群认证的情况下才能够使用 Security 功能 - -#### 5.4.10.1、查看 ACL 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Security”>“ACLs” - -- 步骤 2:ACL 概览信息包括以下内容 - - - Enable:是否可用 - - ACLs:ACL 总数 - - Users:User 总数 - - Topics:Topic 总数 - - Consumer Groups:Consumer Group 总数 - - ACL 列表 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_vE2GwXmBwlQCtE4HfhBz) - -#### 5.4.10.2、新增 ACl - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Security”>“Users”>“新增 ACL” - -- 步骤 2:输入 ACL 配置参数 - - - ACL 用途:生产权限、消费权限、自定义权限 - - 生产权限时:可选择应用于所有 Kafka User 或者特定 Kafka User;可选择应用于所有 Topic 或者特定 Topic - - 消费权限时:可选择应用于所有 Kafka User 或者特定 Kafka User;可选择应用于所有 Topic 或者特定 Topic;可选择应用于所有 Consumer Group 或者特定 Consumer Group - -- 步骤 3:点击“确定”,新增 ACL 成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_ygNmK5QIQcC8BsskMDy7) - -#### 5.4.10.3、查看 User 信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Security”>“ACLs” - -- 步骤 2:User 列表展示内容包括“Kafka User 名称”、“认证方式”、“passwprd”、操作项”修改密码“、”操作项“删除” - -- 步骤 3:筛选框输入“Kafka User”可筛选出列表中相关 Kafka User - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_bK7aK12qgxACxxSIrEJw) - -#### 5.4.10.4、新增 Kafka User - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Security”>“Users”>“新增 Kafka User” - -- 步骤 2:输入 Kafka User 名称、认证方式、密码 - -- 步骤 3:点击“确定”,新增 Kafka User 成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_1eaY4UW5X4ELbzGfHmVY) - -### 5.4.11、Job - -#### 5.4.11.1、查看 Job 概览信息 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Job“ - -- 步骤 2:Job 概览信息包括以下内容 - - - Jobs:Job 总数 - - Doing:正在运行的 Job 总数 - - Prepare:准备运行的 Job 总数 - - Success:运行成功的 Job 总数 - - Fail:运行失败的 Job 总数 - - Job 列表 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_VZQD2jmZvjIxIDkzX7NL) - -#### 5.4.11.2、Job 查看进度 - -Doing 状态下的任务可以查看进度 - -- 步骤 1:点击“多集群管理”>“集群卡片”>“Job”>“Job”列表>操作项“查看进度”>“查看进度”抽屉 - -- 步骤 2: - - - 均衡任务:任务基本信息、均衡计划、任务执行明细信息 - - 扩缩副本:任务基本信息、任务执行明细信息、节点流量情况 - - Topic 迁移:任务基本信息、任务执行明细信息、节点流量情况 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_K8mefUIhHKeWqZDU8vjy) - -#### 5.4.11.3、Job 编辑任务 - -Prepare 状态下的任务可以进行编辑 - -- 点击“多集群管理”>“集群卡片”>“Job”>“Job”列表>操作项“编辑” - -- 对任务执行的参数进行重新配置 - - - 集群均衡:可以对指标计算周期、均衡维度、topic 黑名单、运行配置等参数重新设置 - - Topic 迁移:可以对 topic 需要迁移的 partition、迁移数据的时间范围、目标 broker 节点、限流值、执行时间、描述等参数重新配置 - - topic 扩缩副本:可以对最终副本数、限流值、任务执行时间、描述等参数重新配置 - -- 点击“确定”,编辑任务成功 - -![text](http://img-ys011.didistatic.com/static/dc2img/do1_HKGRvGEA8lD3374WLckZ) diff --git a/km-biz/pom.xml b/km-biz/pom.xml deleted file mode 100644 index b8c3457b..00000000 --- a/km-biz/pom.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - 4.0.0 - com.xiaojukeji.kafka - km-biz - ${km.revision} - jar - - - km - com.xiaojukeji.kafka - ${km.revision} - - - - - true - true - - UTF-8 - UTF-8 - - - - - com.xiaojukeji.kafka - km-core - ${project.parent.version} - - - - - org.springframework - spring-web - ${spring.version} - - - org.springframework - spring-test - ${spring.version} - - - - - javax.servlet - javax.servlet-api - - - javax.annotation - javax.annotation-api - - - - org.apache.kafka - kafka-clients - ${kafka-clients.version} - - - - commons-lang - commons-lang - - - - commons-codec - commons-codec - - - org.eclipse.jetty - jetty-util - - - - com.github.ben-manes.caffeine - caffeine - - - - - com.alibaba - fastjson - - - com.fasterxml.jackson.core - jackson-databind - - - org.springframework - spring-context - - - \ No newline at end of file diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerConfigManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerConfigManager.java deleted file mode 100644 index 4c583dc4..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerConfigManager.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.broker; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.config.KafkaBrokerConfigModifyParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka.KafkaBrokerConfigVO; - -import java.util.List; - -public interface BrokerConfigManager { - /** - * 获取Broker配置详细信息 - * @param clusterPhyId 物理集群ID - * @param brokerId brokerId - * @return - */ - Result> getBrokerConfigDetail(Long clusterPhyId, Integer brokerId); - - Result modifyBrokerConfig(KafkaBrokerConfigModifyParam modifyParam, String operator); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerManager.java deleted file mode 100644 index e135bcd9..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/BrokerManager.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.broker; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.broker.BrokerBasicVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.log.LogDirVO; - -public interface BrokerManager { - Result getBrokerBasic(Long clusterPhyId, Integer brokerId); - - PaginationResult getBrokerLogDirs(Long clusterPhyId, Integer brokerId, PaginationBaseDTO dto); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerConfigManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerConfigManagerImpl.java deleted file mode 100644 index d670a8a5..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerConfigManagerImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.broker.impl; - -import com.xiaojukeji.know.streaming.km.biz.broker.BrokerConfigManager; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaConfigDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.config.KafkaBrokerConfigModifyParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.po.broker.BrokerConfigPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka.KafkaBrokerConfigVO; -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import com.xiaojukeji.know.streaming.km.common.enums.config.ConfigDiffTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerConfigService; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import org.apache.kafka.common.config.ConfigDef; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -@Component -public class BrokerConfigManagerImpl implements BrokerConfigManager { - @Autowired - private BrokerService brokerService; - - @Autowired - private BrokerConfigService brokerConfigService; - - @Override - public Result> getBrokerConfigDetail(Long clusterPhyId, Integer brokerId) { - // 获取当前broker配置 - Result> configResult = brokerConfigService.getBrokerConfigDetailFromKafka(clusterPhyId, brokerId); - if (configResult.failed()) { - return Result.buildFromIgnoreData(configResult); - } - - // 获取差异的配置 - List diffPOList = brokerConfigService.getBrokerConfigDiffFromDB(clusterPhyId, brokerId); - - // 组装数据 - return Result.buildSuc(this.convert2KafkaBrokerConfigVOList(configResult.getData(), diffPOList)); - } - - private List convert2KafkaBrokerConfigVOList(List configList, List diffPOList) { - if (ValidateUtils.isEmptyList(configList)) { - return new ArrayList<>(); - } - - Map poMap = diffPOList.stream().collect(Collectors.toMap(BrokerConfigPO::getConfigName, Function.identity())); - - List voList = ConvertUtil.list2List(configList, KafkaBrokerConfigVO.class); - for (KafkaBrokerConfigVO vo: voList) { - BrokerConfigPO po = poMap.get(vo.getName()); - if (po != null) { - vo.setExclusive(po.getDiffType().equals(ConfigDiffTypeEnum.ALONE_POSSESS.getCode())); - vo.setDifferentiated(po.getDiffType().equals(ConfigDiffTypeEnum.UN_EQUAL.getCode())); - } else { - vo.setExclusive(false); - vo.setDifferentiated(false); - } - - ConfigDef.ConfigKey configKey = KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP.get(vo.getName()); - if (configKey == null) { - continue; - } - - try { - vo.setDocumentation(configKey.documentation); - vo.setDefaultValue(configKey.defaultValue.toString()); - } catch (Exception e) { - // ignore - } - } - return voList; - } - - @Override - public Result modifyBrokerConfig(KafkaBrokerConfigModifyParam modifyParam, String operator) { - if (modifyParam.getApplyAll() == null || !modifyParam.getApplyAll()) { - return brokerConfigService.modifyBrokerConfig(modifyParam, operator); - } - - List brokerList = brokerService.listAliveBrokersFromDB(modifyParam.getClusterPhyId()); - for (Broker broker: brokerList) { - modifyParam.setBrokerId(broker.getBrokerId()); - Result rv = brokerConfigService.modifyBrokerConfig(modifyParam, operator); - if (rv.failed()) { - return rv; - } - } - - return Result.buildSuc(); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerManagerImpl.java deleted file mode 100644 index 8fd9a411..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/broker/impl/BrokerManagerImpl.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.broker.impl; - -import com.xiaojukeji.know.streaming.km.biz.broker.BrokerManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.vo.broker.BrokerBasicVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.log.LogDirVO; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import org.apache.kafka.clients.admin.LogDirDescription; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component -public class BrokerManagerImpl implements BrokerManager { - @Autowired - private BrokerService brokerService; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Override - public Result getBrokerBasic(Long clusterPhyId, Integer brokerId) { - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(clusterPhyId); - if (clusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getClusterPhyNotExist(clusterPhyId)); - } - - Broker broker = brokerService.getBroker(clusterPhyId, brokerId); - if (broker == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getBrokerNotExist(clusterPhyId, brokerId)); - } - - return Result.buildSuc(new BrokerBasicVO(brokerId, broker.getHost(), clusterPhy.getName())); - } - - @Override - public PaginationResult getBrokerLogDirs(Long clusterPhyId, Integer brokerId, PaginationBaseDTO dto) { - Result> dirDescResult = brokerService.getBrokerLogDirDescFromKafka(clusterPhyId, brokerId); - if (dirDescResult.failed()) { - return PaginationResult.buildFailure(dirDescResult, dto); - } - - Map dirDescMap = dirDescResult.hasData()? dirDescResult.getData(): new HashMap<>(); - - List voList = new ArrayList<>(); - for (Map.Entry entry: dirDescMap.entrySet()) { - entry.getValue().replicaInfos().entrySet().stream().forEach(elem -> { - LogDirVO vo = new LogDirVO(); - vo.setDir(entry.getKey()); - vo.setTopicName(elem.getKey().topic()); - vo.setPartitionId(elem.getKey().partition()); - vo.setOffsetLag(elem.getValue().offsetLag()); - vo.setLogSizeUnitB(elem.getValue().size()); - voList.add(vo); - }); - } - - return PaginationUtil.pageBySubData( - PaginationUtil.pageByFuzzyFilter(voList, dto.getSearchKeywords(), Arrays.asList("topicName")), - dto - ); - } - - /**************************************************** private method ****************************************************/ - -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterBrokersManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterBrokersManager.java deleted file mode 100644 index 8427c1ef..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterBrokersManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterBrokersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterBrokersOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterBrokersStateVO; - -/** - * 多集群总体状态 - */ -public interface ClusterBrokersManager { - /** - * 获取缓存查询结果 & broker 表查询结果并集 - * @param clusterPhyId kafka 物理集群 id - * @param dto 封装分页查询参数对象 - * @return 返回获取到的缓存查询结果 & broker 表查询结果并集 - */ - PaginationResult getClusterPhyBrokersOverview(Long clusterPhyId, ClusterBrokersOverviewDTO dto); - - /** - * 根据物理集群id获取集群对应broker状态信息 - * @param clusterPhyId 物理集群 id - * @return 返回根据物理集群id获取到的集群对应broker状态信息 - */ - ClusterBrokersStateVO getClusterPhyBrokersState(Long clusterPhyId); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterConnectorsManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterConnectorsManager.java deleted file mode 100644 index c20c5c77..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterConnectorsManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterConnectorsOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect.ConnectStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ClusterConnectorOverviewVO; - -/** - * Kafka集群Connector概览 - */ -public interface ClusterConnectorsManager { - PaginationResult getClusterConnectorsOverview(Long clusterPhyId, ClusterConnectorsOverviewDTO dto); - - ConnectStateVO getClusterConnectorsState(Long clusterPhyId); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterTopicsManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterTopicsManager.java deleted file mode 100644 index 928d5d36..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterTopicsManager.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterTopicsOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterPhyTopicsOverviewVO; - -/** - * 多集群总体状态 - */ -public interface ClusterTopicsManager { - PaginationResult getClusterPhyTopicsOverview(Long clusterPhyId, ClusterTopicsOverviewDTO dto); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterZookeepersManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterZookeepersManager.java deleted file mode 100644 index 8219cd7e..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/ClusterZookeepersManager.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterZookeepersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ClusterZookeepersOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ClusterZookeepersStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ZnodeVO; - -/** - * 多集群总体状态 - */ -public interface ClusterZookeepersManager { - Result getClusterPhyZookeepersState(Long clusterPhyId); - - PaginationResult getClusterPhyZookeepersOverview(Long clusterPhyId, ClusterZookeepersOverviewDTO dto); - - Result getZnodeVO(Long clusterPhyId, String path); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/MultiClusterPhyManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/MultiClusterPhyManager.java deleted file mode 100644 index 2d57d719..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/MultiClusterPhyManager.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhysHealthState; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhysState; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.MultiClusterDashboardDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyBaseVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyDashboardVO; - -import java.util.List; - -/** - * 多集群总体状态 - */ -public interface MultiClusterPhyManager { - /** - * 获取所有集群的状态 - * @return - */ - ClusterPhysState getClusterPhysState(); - - ClusterPhysHealthState getClusterPhysHealthState(); - - /** - * 查询多集群大盘 - * @param dto 分页信息 - * @return - */ - PaginationResult getClusterPhysDashboard(MultiClusterDashboardDTO dto); - - Result> getClusterPhysBasic(); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterBrokersManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterBrokersManagerImpl.java deleted file mode 100644 index ab5d6a6d..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterBrokersManagerImpl.java +++ /dev/null @@ -1,257 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.cluster.ClusterBrokersManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterBrokersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkacontroller.KafkaController; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BrokerMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterBrokersOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterBrokersStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkacontroller.KafkaControllerVO; -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterRunStateEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerConfigService; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerMetricService; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.kafkacontroller.KafkaControllerService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.persistence.cache.LoadedClusterPhyCache; -import com.xiaojukeji.know.streaming.km.persistence.kafka.KafkaJMXClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - - -@Service -public class ClusterBrokersManagerImpl implements ClusterBrokersManager { - private static final ILog log = LogFactory.getLog(ClusterBrokersManagerImpl.class); - - @Autowired - private TopicService topicService; - - @Autowired - private BrokerService brokerService; - - @Autowired - private BrokerConfigService brokerConfigService; - - @Autowired - private BrokerMetricService brokerMetricService; - - @Autowired - private KafkaControllerService kafkaControllerService; - - @Autowired - private KafkaJMXClient kafkaJMXClient; - - @Override - public PaginationResult getClusterPhyBrokersOverview(Long clusterPhyId, ClusterBrokersOverviewDTO dto) { - // 获取集群Broker列表 - List brokerList = brokerService.listAllBrokersFromDB(clusterPhyId); - - // 搜索 - brokerList = PaginationUtil.pageByFuzzyFilter(brokerList, dto.getSearchKeywords(), Arrays.asList("host")); - - // 获取指标 - Result> metricsResult = brokerMetricService.getLatestMetricsFromES( - clusterPhyId, - brokerList.stream().filter(elem1 -> elem1.alive()).map(elem2 -> elem2.getBrokerId()).collect(Collectors.toList()) - ); - - // 分页 + 搜索 - PaginationResult paginationResult = this.pagingBrokers(brokerList, metricsResult.hasData()? metricsResult.getData(): new ArrayList<>(), dto); - - // 获取__consumer_offsetsTopic的分布 - Topic groupTopic = topicService.getTopic(clusterPhyId, org.apache.kafka.common.internals.Topic.GROUP_METADATA_TOPIC_NAME); - Topic transactionTopic = topicService.getTopic(clusterPhyId, org.apache.kafka.common.internals.Topic.TRANSACTION_STATE_TOPIC_NAME); - - //获取controller信息 - KafkaController kafkaController = kafkaControllerService.getKafkaControllerFromDB(clusterPhyId); - - //获取jmx状态信息 - Map jmxConnectedMap = new HashMap<>(); - brokerList.forEach(elem -> jmxConnectedMap.put(elem.getBrokerId(), kafkaJMXClient.getClientWithCheck(clusterPhyId, elem.getBrokerId()) != null)); - - - ClusterPhy clusterPhy = LoadedClusterPhyCache.getByPhyId(clusterPhyId); - - // 格式转换 - return PaginationResult.buildSuc( - this.convert2ClusterBrokersOverviewVOList( - clusterPhy, - paginationResult.getData().getBizData(), - brokerList, - metricsResult.getData(), - groupTopic, - transactionTopic, - kafkaController, - jmxConnectedMap - ), - paginationResult - ); - } - - @Override - public ClusterBrokersStateVO getClusterPhyBrokersState(Long clusterPhyId) { - ClusterBrokersStateVO clusterBrokersStateVO = new ClusterBrokersStateVO(); - - // 获取集群Broker列表 - List allBrokerList = brokerService.listAllBrokersFromDB(clusterPhyId); - if (allBrokerList == null) { - allBrokerList = new ArrayList<>(); - } - - // 设置broker数 - clusterBrokersStateVO.setBrokerCount(allBrokerList.size()); - - // 设置版本信息 - clusterBrokersStateVO.setBrokerVersionList( - this.getBrokerVersionList(clusterPhyId, allBrokerList.stream().filter(elem -> elem.alive()).collect(Collectors.toList())) - ); - - // 获取controller信息 - KafkaController kafkaController = kafkaControllerService.getKafkaControllerFromDB(clusterPhyId); - - // 设置kafka-controller信息 - clusterBrokersStateVO.setKafkaControllerAlive(false); - if(null != kafkaController) { - clusterBrokersStateVO.setKafkaController( - this.convert2KafkaControllerVO( - kafkaController, - brokerService.getBroker(clusterPhyId, kafkaController.getBrokerId()) - ) - ); - clusterBrokersStateVO.setKafkaControllerAlive(true); - } - - clusterBrokersStateVO.setConfigSimilar(brokerConfigService.countBrokerConfigDiffsFromDB(clusterPhyId, KafkaConstant.CONFIG_SIMILAR_IGNORED_CONFIG_KEY_LIST) <= 0 - ); - - return clusterBrokersStateVO; - } - - /**************************************************** private method ****************************************************/ - - private PaginationResult pagingBrokers(List brokerList, List metricsList, PaginationSortDTO dto) { - if (ValidateUtils.isBlank(dto.getSortField())) { - // 默认排序 - return PaginationUtil.pageBySubData( - PaginationUtil.pageBySort(brokerList, "brokerId", SortTypeEnum.ASC.getSortType()).stream().map(elem -> elem.getBrokerId()).collect(Collectors.toList()), - dto - ); - } - if (!brokerMetricService.isMetricName(dto.getSortField())) { - // 非指标字段进行排序,分页 - return PaginationUtil.pageBySubData( - PaginationUtil.pageBySort(brokerList, dto.getSortField(), dto.getSortType()).stream().map(elem -> elem.getBrokerId()).collect(Collectors.toList()), - dto - ); - } - - // 指标字段进行排序及分页 - Map metricsMap = metricsList.stream().collect(Collectors.toMap(BrokerMetrics::getBrokerId, Function.identity())); - brokerList.stream().forEach(elem -> { - metricsMap.putIfAbsent(elem.getBrokerId(), new BrokerMetrics(elem.getClusterPhyId(), elem.getBrokerId())); - }); - - // 排序 - metricsList = (List) PaginationMetricsUtil.sortMetrics(new ArrayList<>(metricsMap.values()), dto.getSortField(), "brokerId", dto.getSortType()); - - return PaginationUtil.pageBySubData( - metricsList.stream().map(elem -> elem.getBrokerId()).collect(Collectors.toList()), - dto - ); - } - - private List convert2ClusterBrokersOverviewVOList(ClusterPhy clusterPhy, - List pagedBrokerIdList, - List brokerList, - List metricsList, - Topic groupTopic, - Topic transactionTopic, - KafkaController kafkaController, - Map jmxConnectedMap) { - Map metricsMap = metricsList == null ? new HashMap<>() : metricsList.stream().collect(Collectors.toMap(BrokerMetrics::getBrokerId, Function.identity())); - - Map brokerMap = brokerList == null ? new HashMap<>() : brokerList.stream().collect(Collectors.toMap(Broker::getBrokerId, Function.identity())); - - List voList = new ArrayList<>(pagedBrokerIdList.size()); - for (Integer brokerId : pagedBrokerIdList) { - Broker broker = brokerMap.get(brokerId); - BrokerMetrics brokerMetrics = metricsMap.get(brokerId); - Boolean jmxConnected = jmxConnectedMap.get(brokerId); - voList.add(this.convert2ClusterBrokersOverviewVO(brokerId, broker, brokerMetrics, groupTopic, transactionTopic, kafkaController, jmxConnected)); - } - - //补充非zk模式的JMXPort信息 - if (!clusterPhy.getRunState().equals(ClusterRunStateEnum.RUN_ZK.getRunState())) { - JmxConfig jmxConfig = ConvertUtil.str2ObjByJson(clusterPhy.getJmxProperties(), JmxConfig.class); - voList.forEach(elem -> elem.setJmxPort(jmxConfig.getJmxPort() == null ? -1 : jmxConfig.getJmxPort())); - } - - return voList; - } - - private ClusterBrokersOverviewVO convert2ClusterBrokersOverviewVO(Integer brokerId, Broker broker, BrokerMetrics brokerMetrics, Topic groupTopic, Topic transactionTopic, KafkaController kafkaController, Boolean jmxConnected) { - ClusterBrokersOverviewVO clusterBrokersOverviewVO = new ClusterBrokersOverviewVO(); - clusterBrokersOverviewVO.setBrokerId(brokerId); - if (broker != null) { - clusterBrokersOverviewVO.setHost(broker.getHost()); - clusterBrokersOverviewVO.setRack(broker.getRack()); - clusterBrokersOverviewVO.setJmxPort(broker.getJmxPort()); - clusterBrokersOverviewVO.setAlive(broker.alive()); - clusterBrokersOverviewVO.setStartTimeUnitMs(broker.getStartTimestamp()); - } - clusterBrokersOverviewVO.setKafkaRoleList(new ArrayList<>()); - - if (groupTopic != null && groupTopic.getBrokerIdSet().contains(brokerId)) { - clusterBrokersOverviewVO.getKafkaRoleList().add(groupTopic.getTopicName()); - } - if (transactionTopic != null && transactionTopic.getBrokerIdSet().contains(brokerId)) { - clusterBrokersOverviewVO.getKafkaRoleList().add(transactionTopic.getTopicName()); - } - if (kafkaController != null && kafkaController.getBrokerId().equals(brokerId)) { - clusterBrokersOverviewVO.getKafkaRoleList().add(KafkaConstant.CONTROLLER_ROLE); - } - - clusterBrokersOverviewVO.setLatestMetrics(brokerMetrics); - clusterBrokersOverviewVO.setJmxConnected(jmxConnected); - return clusterBrokersOverviewVO; - } - - private KafkaControllerVO convert2KafkaControllerVO(KafkaController kafkaController, Broker kafkaControllerBroker) { - if(null != kafkaController && null != kafkaControllerBroker) { - KafkaControllerVO kafkaControllerVO = new KafkaControllerVO(); - kafkaControllerVO.setBrokerId(kafkaController.getBrokerId()); - kafkaControllerVO.setBrokerHost(kafkaControllerBroker.getHost()); - return kafkaControllerVO; - } - - return null; - } - - private List getBrokerVersionList(Long clusterPhyId, List brokerList) { - Set brokerVersionList = new HashSet<>(); - for (Broker broker : brokerList) { - brokerVersionList.add(brokerService.getBrokerVersionFromKafkaWithCacheFirst(broker.getClusterPhyId(),broker.getBrokerId(),broker.getStartTimestamp())); - } - brokerVersionList.remove(""); - return new ArrayList<>(brokerVersionList); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterConnectorsManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterConnectorsManagerImpl.java deleted file mode 100644 index e982c588..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterConnectorsManagerImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.cluster.ClusterConnectorsManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterConnectorsOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.connect.MetricsConnectorsDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectWorker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.WorkerConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect.ConnectStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ClusterConnectorOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.converter.ConnectConverter; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorMetricService; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerService; -import org.apache.kafka.connect.runtime.AbstractStatus; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - - -@Service -public class ClusterConnectorsManagerImpl implements ClusterConnectorsManager { - private static final ILog LOGGER = LogFactory.getLog(ClusterConnectorsManagerImpl.class); - - @Autowired - private ConnectorService connectorService; - - @Autowired - private ConnectClusterService connectClusterService; - - @Autowired - private ConnectorMetricService connectorMetricService; - - @Autowired - private WorkerService workerService; - - @Autowired - private WorkerConnectorService workerConnectorService; - - @Override - public PaginationResult getClusterConnectorsOverview(Long clusterPhyId, ClusterConnectorsOverviewDTO dto) { - List clusterList = connectClusterService.listByKafkaCluster(clusterPhyId); - - List poList = connectorService.listByKafkaClusterIdFromDB(clusterPhyId); - - // 查询实时指标 - Result> latestMetricsResult = connectorMetricService.getLatestMetricsFromES( - clusterPhyId, - poList.stream().map(elem -> new ClusterConnectorDTO(elem.getConnectClusterId(), elem.getConnectorName())).collect(Collectors.toList()), - dto.getLatestMetricNames() - ); - - if (latestMetricsResult.failed()) { - LOGGER.error("method=getClusterConnectorsOverview||clusterPhyId={}||result={}||errMsg=get latest metric failed", clusterPhyId, latestMetricsResult); - return PaginationResult.buildFailure(latestMetricsResult, dto); - } - - // 转换成vo - List voList = ConnectConverter.convert2ClusterConnectorOverviewVOList(clusterList, poList,latestMetricsResult.getData()); - - // 请求分页信息 - PaginationResult voPaginationResult = this.pagingConnectorInLocal(voList, dto); - if (voPaginationResult.failed()) { - LOGGER.error("method=getClusterConnectorsOverview||clusterPhyId={}||result={}||errMsg=pagination in local failed", clusterPhyId, voPaginationResult); - - return PaginationResult.buildFailure(voPaginationResult, dto); - } - - // 查询历史指标 - Result> lineMetricsResult = connectorMetricService.listConnectClusterMetricsFromES( - clusterPhyId, - this.buildMetricsConnectorsDTO( - voPaginationResult.getData().getBizData().stream().map(elem -> new ClusterConnectorDTO(elem.getConnectClusterId(), elem.getConnectorName())).collect(Collectors.toList()), - dto.getMetricLines() - ) - ); - - - return PaginationResult.buildSuc( - ConnectConverter.supplyData2ClusterConnectorOverviewVOList( - voPaginationResult.getData().getBizData(), - lineMetricsResult.getData() - ), - voPaginationResult - ); - } - - @Override - public ConnectStateVO getClusterConnectorsState(Long clusterPhyId) { - //获取Connect集群Id列表 - List connectClusterList = connectClusterService.listByKafkaCluster(clusterPhyId); - List connectorPOList = connectorService.listByKafkaClusterIdFromDB(clusterPhyId); - List workerConnectorList = workerConnectorService.listByKafkaClusterIdFromDB(clusterPhyId); - List connectWorkerList = workerService.listByKafkaClusterIdFromDB(clusterPhyId); - - return convert2ConnectStateVO(connectClusterList, connectorPOList, workerConnectorList, connectWorkerList); - } - - /**************************************************** private method ****************************************************/ - - private MetricsConnectorsDTO buildMetricsConnectorsDTO(List connectorDTOList, MetricDTO metricDTO) { - MetricsConnectorsDTO dto = ConvertUtil.obj2Obj(metricDTO, MetricsConnectorsDTO.class); - dto.setConnectorNameList(connectorDTOList == null? new ArrayList<>(): connectorDTOList); - - return dto; - } - - private ConnectStateVO convert2ConnectStateVO(List connectClusterList, List connectorPOList, List workerConnectorList, List connectWorkerList) { - ConnectStateVO connectStateVO = new ConnectStateVO(); - connectStateVO.setConnectClusterCount(connectClusterList.size()); - connectStateVO.setTotalConnectorCount(connectorPOList.size()); - connectStateVO.setAliveConnectorCount(connectorPOList.stream().filter(elem -> elem.getState().equals(AbstractStatus.State.RUNNING.name())).collect(Collectors.toList()).size()); - connectStateVO.setWorkerCount(connectWorkerList.size()); - connectStateVO.setTotalTaskCount(workerConnectorList.size()); - connectStateVO.setAliveTaskCount(workerConnectorList.stream().filter(elem -> elem.getState().equals(AbstractStatus.State.RUNNING.name())).collect(Collectors.toList()).size()); - return connectStateVO; - } - - private PaginationResult pagingConnectorInLocal(List connectorVOList, ClusterConnectorsOverviewDTO dto) { - //模糊匹配 - connectorVOList = PaginationUtil.pageByFuzzyFilter(connectorVOList, dto.getSearchKeywords(), Arrays.asList("connectorName")); - - //排序 - if (!dto.getLatestMetricNames().isEmpty()) { - PaginationMetricsUtil.sortMetrics(connectorVOList, "latestMetrics", dto.getSortMetricNameList(), "connectorName", dto.getSortType()); - } else { - PaginationUtil.pageBySort(connectorVOList, dto.getSortField(), dto.getSortType(), "connectorName", dto.getSortType()); - } - - //分页 - return PaginationUtil.pageBySubData(connectorVOList, dto); - } - -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterTopicsManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterTopicsManagerImpl.java deleted file mode 100644 index 3a2b11ef..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterTopicsManagerImpl.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.cluster.ClusterTopicsManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterTopicsOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricsTopicDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterPhyTopicsOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import com.xiaojukeji.know.streaming.km.common.converter.TopicVOConverter; -import com.xiaojukeji.know.streaming.km.common.enums.ha.HaResTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.ha.HaActiveStandbyRelationService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicMetricService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - - - -@Service -public class ClusterTopicsManagerImpl implements ClusterTopicsManager { - private static final ILog log = LogFactory.getLog(ClusterTopicsManagerImpl.class); - - @Autowired - private TopicService topicService; - - @Autowired - private TopicMetricService topicMetricService; - - @Autowired - private HaActiveStandbyRelationService haActiveStandbyRelationService; - - @Override - public PaginationResult getClusterPhyTopicsOverview(Long clusterPhyId, ClusterTopicsOverviewDTO dto) { - // 获取集群所有的Topic信息 - List topicList = topicService.listTopicsFromDB(clusterPhyId); - - // 获取集群所有Topic的指标 - Map metricsMap = topicMetricService.getLatestMetricsFromCache(clusterPhyId); - - // 获取HA信息 - Set haTopicNameSet = haActiveStandbyRelationService.listByClusterAndType(clusterPhyId, HaResTypeEnum.MIRROR_TOPIC).stream().map(elem -> elem.getResName()).collect(Collectors.toSet()); - - // 转换成vo - List voList = TopicVOConverter.convert2ClusterPhyTopicsOverviewVOList(topicList, metricsMap, haTopicNameSet); - - // 请求分页信息 - PaginationResult voPaginationResult = this.pagingTopicInLocal(voList, dto); - if (voPaginationResult.failed()) { - log.error("method=getClusterPhyTopicsOverview||clusterPhyId={}||result={}||errMsg=pagination in local failed", clusterPhyId, voPaginationResult); - - return PaginationResult.buildFailure(voPaginationResult, dto); - } - - // 查询指标 - Result> metricMultiLinesResult = topicMetricService.listTopicMetricsFromES( - clusterPhyId, - this.buildTopicOverviewMetricsDTO(voPaginationResult.getData().getBizData().stream().map(elem -> elem.getTopicName()).collect(Collectors.toList()), dto.getMetricLines()) - ); - - if (metricMultiLinesResult.failed()) { - // 查询ES失败或者ES无数据,则ES可能存在问题,此时降级返回Topic的基本信息数据 - log.error("method=getClusterPhyTopicsOverview||clusterPhyId={}||result={}||errMsg=get metrics from es failed", clusterPhyId, metricMultiLinesResult); - } - - return PaginationResult.buildSuc( - TopicVOConverter.supplyMetricLines( - voPaginationResult.getData().getBizData(), - metricMultiLinesResult.getData() == null? new ArrayList<>(): metricMultiLinesResult.getData() - ), - voPaginationResult - ); - } - - /**************************************************** private method ****************************************************/ - - private MetricsTopicDTO buildTopicOverviewMetricsDTO(List topicNameList, MetricDTO metricDTO) { - MetricsTopicDTO dto = ConvertUtil.obj2Obj(metricDTO, MetricsTopicDTO.class); - dto.setTopics(topicNameList == null? new ArrayList<>(): topicNameList); - return dto; - } - - private PaginationResult pagingTopicInLocal(List voList, ClusterTopicsOverviewDTO dto) { - List metricsList = voList.stream().filter(elem -> { - if (dto.getShowInternalTopics() != null && dto.getShowInternalTopics()) { - // 仅展示系统Topic - return KafkaConstant.KAFKA_INTERNAL_TOPICS.contains(elem.getTopicName()); - } else { - // 仅展示用户Topic - return !KafkaConstant.KAFKA_INTERNAL_TOPICS.contains(elem.getTopicName()); - } - }).collect(Collectors.toList()); - - // 名称搜索 - metricsList = PaginationUtil.pageByFuzzyFilter(metricsList, dto.getSearchKeywords(), Arrays.asList("topicName")); - - if (!ValidateUtils.isBlank(dto.getSortField()) && !"createTime".equals(dto.getSortField())) { - // 指标排序 - PaginationMetricsUtil.sortMetrics(metricsList, "latestMetrics", dto.getSortField(), "topicName", dto.getSortType()); - } else { - // 信息排序 - PaginationUtil.pageBySort(metricsList, dto.getSortField(), dto.getSortType(), "topicName", dto.getSortType()); - } - - return PaginationUtil.pageBySubData(metricsList, dto); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterZookeepersManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterZookeepersManagerImpl.java deleted file mode 100644 index aca30269..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/ClusterZookeepersManagerImpl.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.cluster.ClusterZookeepersManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterZookeepersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ZookeeperMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.Znode; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.ZookeeperInfo; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ClusterZookeepersOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ClusterZookeepersStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper.ZnodeVO; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.enums.zookeeper.ZKRoleEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ZookeeperMetricVersionItems; -import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZnodeService; -import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperMetricService; -import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.List; - - -@Service -public class ClusterZookeepersManagerImpl implements ClusterZookeepersManager { - private static final ILog LOGGER = LogFactory.getLog(ClusterZookeepersManagerImpl.class); - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private ZookeeperService zookeeperService; - - @Autowired - private ZookeeperMetricService zookeeperMetricService; - - @Autowired - private ZnodeService znodeService; - - @Override - public Result getClusterPhyZookeepersState(Long clusterPhyId) { - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(clusterPhyId); - if (clusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getClusterPhyNotExist(clusterPhyId)); - } - - List infoList = zookeeperService.listFromDBByCluster(clusterPhyId); - - ClusterZookeepersStateVO vo = new ClusterZookeepersStateVO(); - vo.setTotalServerCount(infoList.size()); - vo.setAliveFollowerCount(0); - vo.setTotalFollowerCount(0); - vo.setAliveObserverCount(0); - vo.setTotalObserverCount(0); - vo.setAliveServerCount(0); - for (ZookeeperInfo info: infoList) { - if (info.getRole().equals(ZKRoleEnum.LEADER.getRole())) { - vo.setLeaderNode(info.getHost()); - } - - if (info.getRole().equals(ZKRoleEnum.FOLLOWER.getRole())) { - vo.setTotalFollowerCount(vo.getTotalFollowerCount() + 1); - vo.setAliveFollowerCount(info.alive()? vo.getAliveFollowerCount() + 1: vo.getAliveFollowerCount()); - } - - if (info.getRole().equals(ZKRoleEnum.OBSERVER.getRole())) { - vo.setTotalObserverCount(vo.getTotalObserverCount() + 1); - vo.setAliveObserverCount(info.alive()? vo.getAliveObserverCount() + 1: vo.getAliveObserverCount()); - } - - if (info.alive()) { - vo.setAliveServerCount(vo.getAliveServerCount() + 1); - } - } - - // 指标获取 - Result metricsResult = zookeeperMetricService.batchCollectMetricsFromZookeeper( - clusterPhyId, - Arrays.asList( - ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_WATCH_COUNT, - ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_STATE, - ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_CHECK_PASSED, - ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_CHECK_TOTAL - ) - - ); - if (metricsResult.failed()) { - LOGGER.error( - "method=getClusterPhyZookeepersState||clusterPhyId={}||errMsg={}", - clusterPhyId, metricsResult.getMessage() - ); - return Result.buildSuc(vo); - } - - ZookeeperMetrics metrics = metricsResult.getData(); - vo.setWatchCount(ConvertUtil.float2Integer(metrics.getMetrics().get(ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_WATCH_COUNT))); - vo.setHealthState(ConvertUtil.float2Integer(metrics.getMetrics().get(ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_STATE))); - vo.setHealthCheckPassed(ConvertUtil.float2Integer(metrics.getMetrics().get(ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_CHECK_PASSED))); - vo.setHealthCheckTotal(ConvertUtil.float2Integer(metrics.getMetrics().get(ZookeeperMetricVersionItems.ZOOKEEPER_METRIC_HEALTH_CHECK_TOTAL))); - - return Result.buildSuc(vo); - } - - @Override - public PaginationResult getClusterPhyZookeepersOverview(Long clusterPhyId, ClusterZookeepersOverviewDTO dto) { - //获取集群zookeeper列表 - List clusterZookeepersOverviewVOList = ConvertUtil.list2List(zookeeperService.listFromDBByCluster(clusterPhyId), ClusterZookeepersOverviewVO.class); - - //搜索 - clusterZookeepersOverviewVOList = PaginationUtil.pageByFuzzyFilter(clusterZookeepersOverviewVOList, dto.getSearchKeywords(), Arrays.asList("host")); - - //分页 - PaginationResult paginationResult = PaginationUtil.pageBySubData(clusterZookeepersOverviewVOList, dto); - - return paginationResult; - } - - @Override - public Result getZnodeVO(Long clusterPhyId, String path) { - Result result = znodeService.getZnode(clusterPhyId, path); - if (result.failed()) { - return Result.buildFromIgnoreData(result); - } - return Result.buildSuc(ConvertUtil.obj2ObjByJSON(result.getData(), ZnodeVO.class)); - } - - /**************************************************** private method ****************************************************/ - -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java deleted file mode 100644 index 7e379c99..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.cluster.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.cluster.MultiClusterPhyManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricsClusterPhyDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhysHealthState; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhysState; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.MultiClusterDashboardDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyBaseVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyDashboardVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.converter.ClusterVOConverter; -import com.xiaojukeji.know.streaming.km.common.enums.health.HealthStateEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterMetricService; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ClusterMetricVersionItems; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -@Service -public class MultiClusterPhyManagerImpl implements MultiClusterPhyManager { - private static final ILog log = LogFactory.getLog(MultiClusterPhyManagerImpl.class); - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private ClusterMetricService clusterMetricService; - - @Override - public ClusterPhysState getClusterPhysState() { - List clusterPhyList = clusterPhyService.listAllClusters(); - ClusterPhysState physState = new ClusterPhysState(0, 0, 0, clusterPhyList.size()); - - for (ClusterPhy clusterPhy : clusterPhyList) { - ClusterMetrics metrics = clusterMetricService.getLatestMetricsFromCache(clusterPhy.getId()); - Float state = metrics.getMetric(ClusterMetricVersionItems.CLUSTER_METRIC_HEALTH_STATE); - if (state == null) { - physState.setUnknownCount(physState.getUnknownCount() + 1); - } else if (state.intValue() == HealthStateEnum.DEAD.getDimension()) { - physState.setDownCount(physState.getDownCount() + 1); - } else { - physState.setLiveCount(physState.getLiveCount() + 1); - } - } - return physState; - } - - - @Override - public ClusterPhysHealthState getClusterPhysHealthState() { - List clusterPhyList = clusterPhyService.listAllClusters(); - - ClusterPhysHealthState physState = new ClusterPhysHealthState(clusterPhyList.size()); - for (ClusterPhy clusterPhy: clusterPhyList) { - ClusterMetrics metrics = clusterMetricService.getLatestMetricsFromCache(clusterPhy.getId()); - Float state = metrics.getMetric(ClusterMetricVersionItems.CLUSTER_METRIC_HEALTH_STATE); - if (state == null) { - physState.setUnknownCount(physState.getUnknownCount() + 1); - } else if (state.intValue() == HealthStateEnum.GOOD.getDimension()) { - physState.setGoodCount(physState.getGoodCount() + 1); - } else if (state.intValue() == HealthStateEnum.MEDIUM.getDimension()) { - physState.setMediumCount(physState.getMediumCount() + 1); - } else if (state.intValue() == HealthStateEnum.POOR.getDimension()) { - physState.setPoorCount(physState.getPoorCount() + 1); - } else if (state.intValue() == HealthStateEnum.DEAD.getDimension()) { - physState.setDeadCount(physState.getDeadCount() + 1); - } else { - physState.setUnknownCount(physState.getUnknownCount() + 1); - } - } - - return physState; - } - - @Override - public PaginationResult getClusterPhysDashboard(MultiClusterDashboardDTO dto) { - // 获取集群 - List clusterPhyList = clusterPhyService.listAllClusters(); - - // 转为vo格式,方便后续进行分页筛选等 - List voList = ConvertUtil.list2List(clusterPhyList, ClusterPhyDashboardVO.class); - - // 本地分页过滤 - voList = this.getAndPagingDataInLocal(voList, dto); - - // ES分页过滤 - PaginationResult latestMetricsResult = this.getAndPagingClusterWithLatestMetricsFromCache(voList, dto); - if (latestMetricsResult.failed()) { - log.error("method=getClusterPhysDashboard||pagingData={}||result={}||errMsg=search es data failed.", dto, latestMetricsResult); - return PaginationResult.buildFailure(latestMetricsResult, dto); - } - - // 获取历史指标 - Result> linesMetricResult = clusterMetricService.listClusterMetricsFromES( - this.buildMetricsClusterPhyDTO( - latestMetricsResult.getData().getBizData().stream().map(elem -> elem.getClusterPhyId()).collect(Collectors.toList()), - dto.getMetricLines() - )); - - // 组装最终数据 - return PaginationResult.buildSuc( - ClusterVOConverter.convert2ClusterPhyDashboardVOList(voList, linesMetricResult.getData(), latestMetricsResult.getData().getBizData()), - latestMetricsResult - ); - } - - @Override - public Result> getClusterPhysBasic() { - // 获取集群 - List clusterPhyList = clusterPhyService.listAllClusters(); - - // 转为vo格式,方便后续进行分页筛选等 - return Result.buildSuc(ConvertUtil.list2List(clusterPhyList, ClusterPhyBaseVO.class)); - } - - - /**************************************************** private method ****************************************************/ - - - private List getAndPagingDataInLocal(List voList, MultiClusterDashboardDTO dto) { - // 时间排序 - if ("createTime".equals(dto.getSortField())) { - voList = PaginationUtil.pageBySort(voList, "createTime", dto.getSortType(), "name", dto.getSortType()); - } - - // 名称搜索 - if (!ValidateUtils.isBlank(dto.getSearchKeywords())) { - voList = PaginationUtil.pageByFuzzyFilter(voList, dto.getSearchKeywords(), Arrays.asList("name")); - } - - // 精确搜索 - return PaginationUtil.pageByPreciseFilter(voList, dto.getPreciseFilterDTOList()); - } - - private PaginationResult getAndPagingClusterWithLatestMetricsFromCache(List voList, MultiClusterDashboardDTO dto) { - // 获取所有的metrics - List metricsList = new ArrayList<>(); - for (ClusterPhyDashboardVO vo: voList) { - ClusterMetrics clusterMetrics = clusterMetricService.getLatestMetricsFromCache(vo.getId()); - clusterMetrics.getMetrics().putIfAbsent(ClusterMetricVersionItems.CLUSTER_METRIC_HEALTH_STATE, (float) HealthStateEnum.UNKNOWN.getDimension()); - - metricsList.add(clusterMetrics); - } - - // 范围搜索 - metricsList = (List) PaginationMetricsUtil.rangeFilterMetrics(metricsList, dto.getRangeFilterDTOList()); - - // 精确搜索 - metricsList = (List) PaginationMetricsUtil.preciseFilterMetrics(metricsList, dto.getPreciseFilterDTOList()); - - // 排序 - PaginationMetricsUtil.sortMetrics(metricsList, dto.getSortField(), "clusterPhyId", dto.getSortType()); - - // 分页 - return PaginationUtil.pageBySubData(metricsList, dto); - } - - private MetricsClusterPhyDTO buildMetricsClusterPhyDTO(List clusterIdList, MetricDTO metricDTO) { - MetricsClusterPhyDTO dto = ConvertUtil.obj2Obj(metricDTO, MetricsClusterPhyDTO.class); - dto.setClusterPhyIds(clusterIdList); - return dto; - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/ConnectorManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/ConnectorManager.java deleted file mode 100644 index 3752504d..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/ConnectorManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.connector.ConnectorStateVO; - -import java.util.Properties; - -public interface ConnectorManager { - Result updateConnectorConfig(Long connectClusterId, String connectorName, Properties configs, String operator); - - Result createConnector(ConnectorCreateDTO dto, String operator); - Result createConnector(ConnectorCreateDTO dto, String heartbeatName, String checkpointName, String operator); - - Result getConnectorStateVO(Long connectClusterId, String connectorName); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/WorkerConnectorManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/WorkerConnectorManager.java deleted file mode 100644 index eaf82423..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/WorkerConnectorManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.connector; - - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task.KCTaskOverviewVO; - -import java.util.List; - -/** - * @author wyb - * @date 2022/11/14 - */ -public interface WorkerConnectorManager { - Result> getTaskOverview(Long connectClusterId, String connectorName); - -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/ConnectorManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/ConnectorManagerImpl.java deleted file mode 100644 index 5800b26f..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/ConnectorManagerImpl.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.connector.impl; - -import com.xiaojukeji.know.streaming.km.biz.connect.connector.ConnectorManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.WorkerConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config.ConnectConfigInfos; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorInfo; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.connector.ConnectorStateVO; -import com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.plugin.PluginService; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerConnectorService; -import org.apache.kafka.connect.runtime.AbstractStatus; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Properties; -import java.util.stream.Collectors; - -@Service -public class ConnectorManagerImpl implements ConnectorManager { - @Autowired - private PluginService pluginService; - - @Autowired - private ConnectorService connectorService; - - @Autowired - private WorkerConnectorService workerConnectorService; - - @Override - public Result updateConnectorConfig(Long connectClusterId, String connectorName, Properties configs, String operator) { - Result infosResult = pluginService.validateConfig(connectClusterId, configs); - if (infosResult.failed()) { - return Result.buildFromIgnoreData(infosResult); - } - - if (infosResult.getData().getErrorCount() > 0) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "Connector参数错误"); - } - - return connectorService.updateConnectorConfig(connectClusterId, connectorName, configs, operator); - } - - @Override - public Result createConnector(ConnectorCreateDTO dto, String operator) { - dto.getConfigs().put(KafkaConnectConstant.MIRROR_MAKER_NAME_FIELD_NAME, dto.getConnectorName()); - - Result createResult = connectorService.createConnector(dto.getConnectClusterId(), dto.getConnectorName(), dto.getConfigs(), operator); - if (createResult.failed()) { - return Result.buildFromIgnoreData(createResult); - } - - Result ksConnectorResult = connectorService.getAllConnectorInfoFromCluster(dto.getConnectClusterId(), dto.getConnectorName()); - if (ksConnectorResult.failed()) { - return Result.buildFromRSAndMsg(ResultStatus.SUCCESS, "创建成功,但是获取元信息失败,页面元信息会存在1分钟延迟"); - } - - connectorService.addNewToDB(ksConnectorResult.getData()); - return Result.buildSuc(); - } - - @Override - public Result createConnector(ConnectorCreateDTO dto, String heartbeatName, String checkpointName, String operator) { - dto.getConfigs().put(KafkaConnectConstant.MIRROR_MAKER_NAME_FIELD_NAME, dto.getConnectorName()); - - Result createResult = connectorService.createConnector(dto.getConnectClusterId(), dto.getConnectorName(), dto.getConfigs(), operator); - if (createResult.failed()) { - return Result.buildFromIgnoreData(createResult); - } - - Result ksConnectorResult = connectorService.getAllConnectorInfoFromCluster(dto.getConnectClusterId(), dto.getConnectorName()); - if (ksConnectorResult.failed()) { - return Result.buildFromRSAndMsg(ResultStatus.SUCCESS, "创建成功,但是获取元信息失败,页面元信息会存在1分钟延迟"); - } - - KSConnector connector = ksConnectorResult.getData(); - connector.setCheckpointConnectorName(checkpointName); - connector.setHeartbeatConnectorName(heartbeatName); - - connectorService.addNewToDB(connector); - return Result.buildSuc(); - } - - - @Override - public Result getConnectorStateVO(Long connectClusterId, String connectorName) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, connectorName); - - if (connectorPO == null) { - return Result.buildFailure(ResultStatus.NOT_EXIST); - } - - List workerConnectorList = workerConnectorService.listFromDB(connectClusterId).stream().filter(elem -> elem.getConnectorName().equals(connectorName)).collect(Collectors.toList()); - - return Result.buildSuc(convert2ConnectorOverviewVO(connectorPO, workerConnectorList)); - } - - private ConnectorStateVO convert2ConnectorOverviewVO(ConnectorPO connectorPO, List workerConnectorList) { - ConnectorStateVO connectorStateVO = new ConnectorStateVO(); - connectorStateVO.setConnectClusterId(connectorPO.getConnectClusterId()); - connectorStateVO.setName(connectorPO.getConnectorName()); - connectorStateVO.setType(connectorPO.getConnectorType()); - connectorStateVO.setState(connectorPO.getState()); - connectorStateVO.setTotalTaskCount(workerConnectorList.size()); - connectorStateVO.setAliveTaskCount(workerConnectorList.stream().filter(elem -> elem.getState().equals(AbstractStatus.State.RUNNING.name())).collect(Collectors.toList()).size()); - connectorStateVO.setTotalWorkerCount(workerConnectorList.stream().map(elem -> elem.getWorkerId()).collect(Collectors.toSet()).size()); - return connectorStateVO; - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/WorkerConnectorManageImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/WorkerConnectorManageImpl.java deleted file mode 100644 index 4d0cd317..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/connector/impl/WorkerConnectorManageImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.connector.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.connect.connector.WorkerConnectorManager; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.WorkerConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task.KCTaskOverviewVO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerConnectorService; -import com.xiaojukeji.know.streaming.km.persistence.connect.cache.LoadedConnectClusterCache; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @author wyb - * @date 2022/11/14 - */ -@Service -public class WorkerConnectorManageImpl implements WorkerConnectorManager { - - private static final ILog LOGGER = LogFactory.getLog(WorkerConnectorManageImpl.class); - - @Autowired - private WorkerConnectorService workerConnectorService; - - @Override - public Result> getTaskOverview(Long connectClusterId, String connectorName) { - ConnectCluster connectCluster = LoadedConnectClusterCache.getByPhyId(connectClusterId); - List workerConnectorList = workerConnectorService.getWorkerConnectorListFromCluster(connectCluster, connectorName); - - return Result.buildSuc(ConvertUtil.list2List(workerConnectorList, KCTaskOverviewVO.class)); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/MirrorMakerManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/MirrorMakerManager.java deleted file mode 100644 index 6851ca5e..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/MirrorMakerManager.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterMirrorMakersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.mm2.MirrorMakerCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.ClusterMirrorMakerOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.MirrorMakerBaseStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.MirrorMakerStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin.ConnectConfigInfosVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task.KCTaskOverviewVO; - -import java.util.List; -import java.util.Map; -import java.util.Properties; - -/** - * @author wyb - * @date 2022/12/26 - */ -public interface MirrorMakerManager { - Result createMirrorMaker(MirrorMakerCreateDTO dto, String operator); - - Result deleteMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator); - - Result modifyMirrorMakerConfig(MirrorMakerCreateDTO dto, String operator); - - Result restartMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator); - Result stopMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator); - Result resumeMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator); - - Result getMirrorMakerStateVO(Long clusterPhyId); - - PaginationResult getClusterMirrorMakersOverview(Long clusterPhyId, ClusterMirrorMakersOverviewDTO dto); - - - Result getMirrorMakerState(Long connectId, String connectName); - - Result>> getTaskOverview(Long connectClusterId, String connectorName); - Result> getMM2Configs(Long connectClusterId, String connectorName); - - Result> validateConnectors(MirrorMakerCreateDTO dto); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/impl/MirrorMakerManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/impl/MirrorMakerManagerImpl.java deleted file mode 100644 index 803daa26..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/connect/mm2/impl/MirrorMakerManagerImpl.java +++ /dev/null @@ -1,652 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.connect.mm2.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.connect.connector.ConnectorManager; -import com.xiaojukeji.know.streaming.km.biz.connect.mm2.MirrorMakerManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterMirrorMakersOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.mm2.MirrorMakerCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.mm2.MetricsMirrorMakersDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectWorker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.WorkerConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config.ConnectConfigInfos; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorInfo; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.mm2.MirrorMakerMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.ClusterMirrorMakerOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.MirrorMakerBaseStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.MirrorMakerStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin.ConnectConfigInfosVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task.KCTaskOverviewVO; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.utils.*; -import com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.MirrorMakerUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.mm2.MirrorMakerMetricService; -import com.xiaojukeji.know.streaming.km.core.service.connect.plugin.PluginService; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.worker.WorkerService; -import com.xiaojukeji.know.streaming.km.core.utils.ApiCallThreadPoolService; -import com.xiaojukeji.know.streaming.km.persistence.cache.LoadedClusterPhyCache; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static org.apache.kafka.connect.runtime.AbstractStatus.State.RUNNING; -import static com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant.*; - - -/** - * @author wyb - * @date 2022/12/26 - */ -@Service -public class MirrorMakerManagerImpl implements MirrorMakerManager { - private static final ILog LOGGER = LogFactory.getLog(MirrorMakerManagerImpl.class); - - @Autowired - private ConnectorService connectorService; - - @Autowired - private WorkerConnectorService workerConnectorService; - - @Autowired - private WorkerService workerService; - - @Autowired - private ConnectorManager connectorManager; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private MirrorMakerMetricService mirrorMakerMetricService; - - @Autowired - private ConnectClusterService connectClusterService; - - @Autowired - private PluginService pluginService; - - @Override - public Result createMirrorMaker(MirrorMakerCreateDTO dto, String operator) { - // 检查基本参数 - Result rv = this.checkCreateMirrorMakerParamAndUnifyData(dto); - if (rv.failed()) { - return rv; - } - - // 创建MirrorSourceConnector - Result sourceConnectResult = connectorManager.createConnector( - dto, - dto.getCheckpointConnectorConfigs() != null? MirrorMakerUtil.genCheckpointName(dto.getConnectorName()): "", - dto.getHeartbeatConnectorConfigs() != null? MirrorMakerUtil.genHeartbeatName(dto.getConnectorName()): "", - operator - ); - if (sourceConnectResult.failed()) { - // 创建失败, 直接返回 - return Result.buildFromIgnoreData(sourceConnectResult); - } - - // 创建 checkpoint 任务 - Result checkpointResult = Result.buildSuc(); - if (dto.getCheckpointConnectorConfigs() != null) { - checkpointResult = connectorManager.createConnector( - new ConnectorCreateDTO(dto.getConnectClusterId(), MirrorMakerUtil.genCheckpointName(dto.getConnectorName()), dto.getCheckpointConnectorConfigs()), - operator - ); - } - - // 创建 heartbeat 任务 - Result heartbeatResult = Result.buildSuc(); - if (dto.getHeartbeatConnectorConfigs() != null) { - heartbeatResult = connectorManager.createConnector( - new ConnectorCreateDTO(dto.getConnectClusterId(), MirrorMakerUtil.genHeartbeatName(dto.getConnectorName()), dto.getHeartbeatConnectorConfigs()), - operator - ); - } - - // 全都成功 - if (checkpointResult.successful() && checkpointResult.successful()) { - return Result.buildSuc(); - } else if (checkpointResult.failed() && checkpointResult.failed()) { - return Result.buildFromRSAndMsg( - ResultStatus.KAFKA_CONNECTOR_OPERATE_FAILED, - String.format("创建 checkpoint & heartbeat 失败.\n失败信息分别为:%s\n\n%s", checkpointResult.getMessage(), heartbeatResult.getMessage()) - ); - } else if (checkpointResult.failed()) { - return Result.buildFromRSAndMsg( - ResultStatus.KAFKA_CONNECTOR_OPERATE_FAILED, - String.format("创建 checkpoint 失败.\n失败信息分别为:%s", checkpointResult.getMessage()) - ); - } else{ - return Result.buildFromRSAndMsg( - ResultStatus.KAFKA_CONNECTOR_OPERATE_FAILED, - String.format("创建 heartbeat 失败.\n失败信息分别为:%s", heartbeatResult.getMessage()) - ); - } - } - - @Override - public Result deleteMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, sourceConnectorName); - if (connectorPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getConnectorNotExist(connectClusterId, sourceConnectorName)); - } - - Result rv = Result.buildSuc(); - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName())) { - rv = connectorService.deleteConnector(connectClusterId, connectorPO.getCheckpointConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName())) { - rv = connectorService.deleteConnector(connectClusterId, connectorPO.getHeartbeatConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - return connectorService.deleteConnector(connectClusterId, sourceConnectorName, operator); - } - - @Override - public Result modifyMirrorMakerConfig(MirrorMakerCreateDTO dto, String operator) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(dto.getConnectClusterId(), dto.getConnectorName()); - if (connectorPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getConnectorNotExist(dto.getConnectClusterId(), dto.getConnectorName())); - } - - Result rv = Result.buildSuc(); - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName()) && dto.getCheckpointConnectorConfigs() != null) { - rv = connectorService.updateConnectorConfig(dto.getConnectClusterId(), connectorPO.getCheckpointConnectorName(), dto.getCheckpointConnectorConfigs(), operator); - } - if (rv.failed()) { - return rv; - } - - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName()) && dto.getHeartbeatConnectorConfigs() != null) { - rv = connectorService.updateConnectorConfig(dto.getConnectClusterId(), connectorPO.getHeartbeatConnectorName(), dto.getHeartbeatConnectorConfigs(), operator); - } - if (rv.failed()) { - return rv; - } - - return connectorService.updateConnectorConfig(dto.getConnectClusterId(), dto.getConnectorName(), dto.getConfigs(), operator); - } - - @Override - public Result restartMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, sourceConnectorName); - if (connectorPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getConnectorNotExist(connectClusterId, sourceConnectorName)); - } - - Result rv = Result.buildSuc(); - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName())) { - rv = connectorService.restartConnector(connectClusterId, connectorPO.getCheckpointConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName())) { - rv = connectorService.restartConnector(connectClusterId, connectorPO.getHeartbeatConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - return connectorService.restartConnector(connectClusterId, sourceConnectorName, operator); - } - - @Override - public Result stopMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, sourceConnectorName); - if (connectorPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getConnectorNotExist(connectClusterId, sourceConnectorName)); - } - - Result rv = Result.buildSuc(); - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName())) { - rv = connectorService.stopConnector(connectClusterId, connectorPO.getCheckpointConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName())) { - rv = connectorService.stopConnector(connectClusterId, connectorPO.getHeartbeatConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - return connectorService.stopConnector(connectClusterId, sourceConnectorName, operator); - } - - @Override - public Result resumeMirrorMaker(Long connectClusterId, String sourceConnectorName, String operator) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, sourceConnectorName); - if (connectorPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getConnectorNotExist(connectClusterId, sourceConnectorName)); - } - - Result rv = Result.buildSuc(); - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName())) { - rv = connectorService.resumeConnector(connectClusterId, connectorPO.getCheckpointConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName())) { - rv = connectorService.resumeConnector(connectClusterId, connectorPO.getHeartbeatConnectorName(), operator); - } - if (rv.failed()) { - return rv; - } - - return connectorService.resumeConnector(connectClusterId, sourceConnectorName, operator); - } - - @Override - public Result getMirrorMakerStateVO(Long clusterPhyId) { - List connectorPOList = connectorService.listByKafkaClusterIdFromDB(clusterPhyId); - List workerConnectorList = workerConnectorService.listByKafkaClusterIdFromDB(clusterPhyId); - List workerList = workerService.listByKafkaClusterIdFromDB(clusterPhyId); - - return Result.buildSuc(convert2MirrorMakerStateVO(connectorPOList, workerConnectorList, workerList)); - } - - @Override - public PaginationResult getClusterMirrorMakersOverview(Long clusterPhyId, ClusterMirrorMakersOverviewDTO dto) { - List mirrorMakerList = connectorService.listByKafkaClusterIdFromDB(clusterPhyId).stream().filter(elem -> elem.getConnectorClassName().equals(MIRROR_MAKER_SOURCE_CONNECTOR_TYPE)).collect(Collectors.toList()); - List connectClusterList = connectClusterService.listByKafkaCluster(clusterPhyId); - - - Result> latestMetricsResult = mirrorMakerMetricService.getLatestMetricsFromES(clusterPhyId, - mirrorMakerList.stream().map(elem -> new Tuple<>(elem.getConnectClusterId(), elem.getConnectorName())).collect(Collectors.toList()), - dto.getLatestMetricNames()); - - if (latestMetricsResult.failed()) { - LOGGER.error("method=getClusterMirrorMakersOverview||clusterPhyId={}||result={}||errMsg=get latest metric failed", clusterPhyId, latestMetricsResult); - return PaginationResult.buildFailure(latestMetricsResult, dto); - } - - List mirrorMakerOverviewVOList = this.convert2ClusterMirrorMakerOverviewVO(mirrorMakerList, connectClusterList, latestMetricsResult.getData()); - - List mirrorMakerVOList = this.completeClusterInfo(mirrorMakerOverviewVOList); - - PaginationResult voPaginationResult = this.pagingMirrorMakerInLocal(mirrorMakerVOList, dto); - - if (voPaginationResult.failed()) { - LOGGER.error("method=ClusterMirrorMakerOverviewVO||clusterPhyId={}||result={}||errMsg=pagination in local failed", clusterPhyId, voPaginationResult); - - return PaginationResult.buildFailure(voPaginationResult, dto); - } - - // 查询历史指标 - Result> lineMetricsResult = mirrorMakerMetricService.listMirrorMakerClusterMetricsFromES( - clusterPhyId, - this.buildMetricsConnectorsDTO( - voPaginationResult.getData().getBizData().stream().map(elem -> new ClusterConnectorDTO(elem.getConnectClusterId(), elem.getConnectorName())).collect(Collectors.toList()), - dto.getMetricLines() - )); - - return PaginationResult.buildSuc( - this.supplyData2ClusterMirrorMakerOverviewVOList( - voPaginationResult.getData().getBizData(), - lineMetricsResult.getData() - ), - voPaginationResult - ); - } - - @Override - public Result getMirrorMakerState(Long connectClusterId, String connectName) { - //mm2任务 - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, connectName); - if (connectorPO == null){ - return Result.buildFrom(ResultStatus.NOT_EXIST); - } - - List workerConnectorList = workerConnectorService.listFromDB(connectClusterId).stream() - .filter(workerConnector -> workerConnector.getConnectorName().equals(connectorPO.getConnectorName()) - || (!StringUtils.isBlank(connectorPO.getCheckpointConnectorName()) && workerConnector.getConnectorName().equals(connectorPO.getCheckpointConnectorName())) - || (!StringUtils.isBlank(connectorPO.getHeartbeatConnectorName()) && workerConnector.getConnectorName().equals(connectorPO.getHeartbeatConnectorName()))) - .collect(Collectors.toList()); - - MirrorMakerBaseStateVO mirrorMakerBaseStateVO = new MirrorMakerBaseStateVO(); - mirrorMakerBaseStateVO.setTotalTaskCount(workerConnectorList.size()); - mirrorMakerBaseStateVO.setAliveTaskCount(workerConnectorList.stream().filter(elem -> elem.getState().equals(RUNNING.name())).collect(Collectors.toList()).size()); - mirrorMakerBaseStateVO.setWorkerCount(workerConnectorList.stream().collect(Collectors.groupingBy(WorkerConnector::getWorkerId)).size()); - return Result.buildSuc(mirrorMakerBaseStateVO); - } - - @Override - public Result>> getTaskOverview(Long connectClusterId, String connectorName) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, connectorName); - if (connectorPO == null){ - return Result.buildFrom(ResultStatus.NOT_EXIST); - } - - Map> listMap = new HashMap<>(); - List workerConnectorList = workerConnectorService.listFromDB(connectClusterId); - if (workerConnectorList.isEmpty()){ - return Result.buildSuc(listMap); - } - workerConnectorList.forEach(workerConnector -> { - if (workerConnector.getConnectorName().equals(connectorPO.getConnectorName())){ - listMap.putIfAbsent(KafkaConnectConstant.MIRROR_MAKER_SOURCE_CONNECTOR_TYPE, new ArrayList<>()); - listMap.get(MIRROR_MAKER_SOURCE_CONNECTOR_TYPE).add(ConvertUtil.obj2Obj(workerConnector, KCTaskOverviewVO.class)); - } else if (workerConnector.getConnectorName().equals(connectorPO.getCheckpointConnectorName())) { - listMap.putIfAbsent(KafkaConnectConstant.MIRROR_MAKER_HEARTBEAT_CONNECTOR_TYPE, new ArrayList<>()); - listMap.get(MIRROR_MAKER_HEARTBEAT_CONNECTOR_TYPE).add(ConvertUtil.obj2Obj(workerConnector, KCTaskOverviewVO.class)); - } else if (workerConnector.getConnectorName().equals(connectorPO.getHeartbeatConnectorName())) { - listMap.putIfAbsent(KafkaConnectConstant.MIRROR_MAKER_CHECKPOINT_CONNECTOR_TYPE, new ArrayList<>()); - listMap.get(MIRROR_MAKER_CHECKPOINT_CONNECTOR_TYPE).add(ConvertUtil.obj2Obj(workerConnector, KCTaskOverviewVO.class)); - } - - }); - - return Result.buildSuc(listMap); - } - - @Override - public Result> getMM2Configs(Long connectClusterId, String connectorName) { - ConnectorPO connectorPO = connectorService.getConnectorFromDB(connectClusterId, connectorName); - if (connectorPO == null){ - return Result.buildFrom(ResultStatus.NOT_EXIST); - } - - List propList = new ArrayList<>(); - - // source - Result connectorResult = connectorService.getConnectorInfoFromCluster(connectClusterId, connectorPO.getConnectorName()); - if (connectorResult.failed()) { - return Result.buildFromIgnoreData(connectorResult); - } - - Properties props = new Properties(); - props.putAll(connectorResult.getData().getConfig()); - propList.add(props); - - // checkpoint - if (!ValidateUtils.isBlank(connectorPO.getCheckpointConnectorName())) { - connectorResult = connectorService.getConnectorInfoFromCluster(connectClusterId, connectorPO.getCheckpointConnectorName()); - if (connectorResult.failed()) { - return Result.buildFromIgnoreData(connectorResult); - } - - props = new Properties(); - props.putAll(connectorResult.getData().getConfig()); - propList.add(props); - } - - - // heartbeat - if (!ValidateUtils.isBlank(connectorPO.getHeartbeatConnectorName())) { - connectorResult = connectorService.getConnectorInfoFromCluster(connectClusterId, connectorPO.getHeartbeatConnectorName()); - if (connectorResult.failed()) { - return Result.buildFromIgnoreData(connectorResult); - } - - props = new Properties(); - props.putAll(connectorResult.getData().getConfig()); - propList.add(props); - } - - return Result.buildSuc(propList); - } - - @Override - public Result> validateConnectors(MirrorMakerCreateDTO dto) { - List voList = new ArrayList<>(); - - Result infoResult = pluginService.validateConfig(dto.getConnectClusterId(), dto.getConfigs()); - if (infoResult.failed()) { - return Result.buildFromIgnoreData(infoResult); - } - - voList.add(ConvertUtil.obj2Obj(infoResult.getData(), ConnectConfigInfosVO.class)); - - if (dto.getHeartbeatConnectorConfigs() != null) { - infoResult = pluginService.validateConfig(dto.getConnectClusterId(), dto.getHeartbeatConnectorConfigs()); - if (infoResult.failed()) { - return Result.buildFromIgnoreData(infoResult); - } - - voList.add(ConvertUtil.obj2Obj(infoResult.getData(), ConnectConfigInfosVO.class)); - } - - if (dto.getCheckpointConnectorConfigs() != null) { - infoResult = pluginService.validateConfig(dto.getConnectClusterId(), dto.getCheckpointConnectorConfigs()); - if (infoResult.failed()) { - return Result.buildFromIgnoreData(infoResult); - } - - voList.add(ConvertUtil.obj2Obj(infoResult.getData(), ConnectConfigInfosVO.class)); - } - - return Result.buildSuc(voList); - } - - - /**************************************************** private method ****************************************************/ - - private MetricsMirrorMakersDTO buildMetricsConnectorsDTO(List connectorDTOList, MetricDTO metricDTO) { - MetricsMirrorMakersDTO dto = ConvertUtil.obj2Obj(metricDTO, MetricsMirrorMakersDTO.class); - dto.setConnectorNameList(connectorDTOList == null? new ArrayList<>(): connectorDTOList); - - return dto; - } - - public Result checkCreateMirrorMakerParamAndUnifyData(MirrorMakerCreateDTO dto) { - ClusterPhy sourceClusterPhy = clusterPhyService.getClusterByCluster(dto.getSourceKafkaClusterId()); - if (sourceClusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getClusterPhyNotExist(dto.getSourceKafkaClusterId())); - } - - ConnectCluster connectCluster = connectClusterService.getById(dto.getConnectClusterId()); - if (connectCluster == null) { - return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getConnectClusterNotExist(dto.getConnectClusterId())); - } - - ClusterPhy targetClusterPhy = clusterPhyService.getClusterByCluster(connectCluster.getKafkaClusterPhyId()); - if (targetClusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getClusterPhyNotExist(connectCluster.getKafkaClusterPhyId())); - } - - if (!dto.getConfigs().containsKey(CONNECTOR_CLASS_FILED_NAME)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "SourceConnector缺少connector.class"); - } - - if (!MIRROR_MAKER_SOURCE_CONNECTOR_TYPE.equals(dto.getConfigs().getProperty(CONNECTOR_CLASS_FILED_NAME))) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "SourceConnector的connector.class类型错误"); - } - - if (dto.getCheckpointConnectorConfigs() != null) { - if (!dto.getCheckpointConnectorConfigs().containsKey(CONNECTOR_CLASS_FILED_NAME)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "CheckpointConnector缺少connector.class"); - } - - if (!MIRROR_MAKER_CHECKPOINT_CONNECTOR_TYPE.equals(dto.getCheckpointConnectorConfigs().getProperty(CONNECTOR_CLASS_FILED_NAME))) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "Checkpoint的connector.class类型错误"); - } - } - - if (dto.getHeartbeatConnectorConfigs() != null) { - if (!dto.getHeartbeatConnectorConfigs().containsKey(CONNECTOR_CLASS_FILED_NAME)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "HeartbeatConnector缺少connector.class"); - } - - if (!MIRROR_MAKER_HEARTBEAT_CONNECTOR_TYPE.equals(dto.getHeartbeatConnectorConfigs().getProperty(CONNECTOR_CLASS_FILED_NAME))) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "Heartbeat的connector.class类型错误"); - } - } - - dto.unifyData( - sourceClusterPhy.getId(), sourceClusterPhy.getBootstrapServers(), ConvertUtil.str2ObjByJson(sourceClusterPhy.getClientProperties(), Properties.class), - targetClusterPhy.getId(), targetClusterPhy.getBootstrapServers(), ConvertUtil.str2ObjByJson(targetClusterPhy.getClientProperties(), Properties.class) - ); - - return Result.buildSuc(); - } - - private MirrorMakerStateVO convert2MirrorMakerStateVO(List connectorPOList,List workerConnectorList,List workerList){ - MirrorMakerStateVO mirrorMakerStateVO = new MirrorMakerStateVO(); - - List sourceSet = connectorPOList.stream().filter(elem -> elem.getConnectorClassName().equals(MIRROR_MAKER_SOURCE_CONNECTOR_TYPE)).collect(Collectors.toList()); - mirrorMakerStateVO.setMirrorMakerCount(sourceSet.size()); - - Set connectClusterIdSet = sourceSet.stream().map(ConnectorPO::getConnectClusterId).collect(Collectors.toSet()); - mirrorMakerStateVO.setWorkerCount(workerList.stream().filter(elem -> connectClusterIdSet.contains(elem.getConnectClusterId())).collect(Collectors.toList()).size()); - - List mirrorMakerConnectorList = new ArrayList<>(); - mirrorMakerConnectorList.addAll(sourceSet); - mirrorMakerConnectorList.addAll(connectorPOList.stream().filter(elem -> elem.getConnectorClassName().equals(MIRROR_MAKER_CHECKPOINT_CONNECTOR_TYPE)).collect(Collectors.toList())); - mirrorMakerConnectorList.addAll(connectorPOList.stream().filter(elem -> elem.getConnectorClassName().equals(MIRROR_MAKER_HEARTBEAT_CONNECTOR_TYPE)).collect(Collectors.toList())); - mirrorMakerStateVO.setTotalConnectorCount(mirrorMakerConnectorList.size()); - mirrorMakerStateVO.setAliveConnectorCount(mirrorMakerConnectorList.stream().filter(elem -> elem.getState().equals(RUNNING.name())).collect(Collectors.toList()).size()); - - Set connectorNameSet = mirrorMakerConnectorList.stream().map(elem -> elem.getConnectorName()).collect(Collectors.toSet()); - List taskList = workerConnectorList.stream().filter(elem -> connectorNameSet.contains(elem.getConnectorName())).collect(Collectors.toList()); - mirrorMakerStateVO.setTotalTaskCount(taskList.size()); - mirrorMakerStateVO.setAliveTaskCount(taskList.stream().filter(elem -> elem.getState().equals(RUNNING.name())).collect(Collectors.toList()).size()); - - return mirrorMakerStateVO; - } - - private List convert2ClusterMirrorMakerOverviewVO(List mirrorMakerList, List connectClusterList, List latestMetric) { - List clusterMirrorMakerOverviewVOList = new ArrayList<>(); - Map metricsMap = latestMetric.stream().collect(Collectors.toMap(elem -> elem.getConnectClusterId() + "@" + elem.getConnectorName(), Function.identity())); - Map connectClusterMap = connectClusterList.stream().collect(Collectors.toMap(elem -> elem.getId(), Function.identity())); - - for (ConnectorPO mirrorMaker : mirrorMakerList) { - ClusterMirrorMakerOverviewVO clusterMirrorMakerOverviewVO = new ClusterMirrorMakerOverviewVO(); - clusterMirrorMakerOverviewVO.setConnectClusterId(mirrorMaker.getConnectClusterId()); - clusterMirrorMakerOverviewVO.setConnectClusterName(connectClusterMap.get(mirrorMaker.getConnectClusterId()).getName()); - clusterMirrorMakerOverviewVO.setConnectorName(mirrorMaker.getConnectorName()); - clusterMirrorMakerOverviewVO.setState(mirrorMaker.getState()); - clusterMirrorMakerOverviewVO.setCheckpointConnector(mirrorMaker.getCheckpointConnectorName()); - clusterMirrorMakerOverviewVO.setTaskCount(mirrorMaker.getTaskCount()); - clusterMirrorMakerOverviewVO.setHeartbeatConnector(mirrorMaker.getHeartbeatConnectorName()); - clusterMirrorMakerOverviewVO.setLatestMetrics(metricsMap.getOrDefault(mirrorMaker.getConnectClusterId() + "@" + mirrorMaker.getConnectorName(), new MirrorMakerMetrics(mirrorMaker.getConnectClusterId(), mirrorMaker.getConnectorName()))); - clusterMirrorMakerOverviewVOList.add(clusterMirrorMakerOverviewVO); - } - return clusterMirrorMakerOverviewVOList; - } - - PaginationResult pagingMirrorMakerInLocal(List mirrorMakerOverviewVOList, ClusterMirrorMakersOverviewDTO dto) { - List mirrorMakerVOList = PaginationUtil.pageByFuzzyFilter(mirrorMakerOverviewVOList, dto.getSearchKeywords(), Arrays.asList("connectorName")); - - //排序 - if (!dto.getLatestMetricNames().isEmpty()) { - PaginationMetricsUtil.sortMetrics(mirrorMakerVOList, "latestMetrics", dto.getSortMetricNameList(), "connectorName", dto.getSortType()); - } else { - PaginationUtil.pageBySort(mirrorMakerVOList, dto.getSortField(), dto.getSortType(), "connectorName", dto.getSortType()); - } - - //分页 - return PaginationUtil.pageBySubData(mirrorMakerVOList, dto); - } - - public static List supplyData2ClusterMirrorMakerOverviewVOList(List voList, - List metricLineVOList) { - Map> metricLineMap = new HashMap<>(); - if (metricLineVOList != null) { - for (MetricMultiLinesVO metricMultiLinesVO : metricLineVOList) { - metricMultiLinesVO.getMetricLines() - .forEach(metricLineVO -> { - String key = metricLineVO.getName(); - List metricLineVOS = metricLineMap.getOrDefault(key, new ArrayList<>()); - metricLineVOS.add(metricLineVO); - metricLineMap.put(key, metricLineVOS); - }); - } - } - - voList.forEach(elem -> { - elem.setMetricLines(metricLineMap.get(elem.getConnectClusterId() + "#" + elem.getConnectorName())); - }); - - return voList; - } - - private List completeClusterInfo(List mirrorMakerVOList) { - - Map connectorInfoMap = new HashMap<>(); - - for (ClusterMirrorMakerOverviewVO mirrorMakerVO : mirrorMakerVOList) { - ApiCallThreadPoolService.runnableTask(String.format("method=completeClusterInfo||connectClusterId=%d||connectorName=%s||getMirrorMakerInfo", mirrorMakerVO.getConnectClusterId(), mirrorMakerVO.getConnectorName()), - 3000 - , () -> { - Result connectorInfoRet = connectorService.getConnectorInfoFromCluster(mirrorMakerVO.getConnectClusterId(), mirrorMakerVO.getConnectorName()); - if (connectorInfoRet.hasData()) { - connectorInfoMap.put(mirrorMakerVO.getConnectClusterId() + mirrorMakerVO.getConnectorName(), connectorInfoRet.getData()); - } - - return connectorInfoRet.getData(); - }); - } - - ApiCallThreadPoolService.waitResult(1000); - - List newMirrorMakerVOList = new ArrayList<>(); - for (ClusterMirrorMakerOverviewVO mirrorMakerVO : mirrorMakerVOList) { - KSConnectorInfo connectorInfo = connectorInfoMap.get(mirrorMakerVO.getConnectClusterId() + mirrorMakerVO.getConnectorName()); - if (connectorInfo == null) { - continue; - } - - String sourceClusterAlias = connectorInfo.getConfig().get(MIRROR_MAKER_SOURCE_CLUSTER_ALIAS_FIELD_NAME); - String targetClusterAlias = connectorInfo.getConfig().get(MIRROR_MAKER_TARGET_CLUSTER_ALIAS_FIELD_NAME); - //先默认设置为集群别名 - mirrorMakerVO.setSourceKafkaClusterName(sourceClusterAlias); - mirrorMakerVO.setDestKafkaClusterName(targetClusterAlias); - - if (!ValidateUtils.isBlank(sourceClusterAlias) && CommonUtils.isNumeric(sourceClusterAlias)) { - ClusterPhy clusterPhy = LoadedClusterPhyCache.getByPhyId(Long.valueOf(sourceClusterAlias)); - if (clusterPhy != null) { - mirrorMakerVO.setSourceKafkaClusterId(clusterPhy.getId()); - mirrorMakerVO.setSourceKafkaClusterName(clusterPhy.getName()); - } - } - - if (!ValidateUtils.isBlank(targetClusterAlias) && CommonUtils.isNumeric(targetClusterAlias)) { - ClusterPhy clusterPhy = LoadedClusterPhyCache.getByPhyId(Long.valueOf(targetClusterAlias)); - if (clusterPhy != null) { - mirrorMakerVO.setDestKafkaClusterId(clusterPhy.getId()); - mirrorMakerVO.setDestKafkaClusterName(clusterPhy.getName()); - } - } - - newMirrorMakerVOList.add(mirrorMakerVO); - - } - - return newMirrorMakerVOList; - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/GroupManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/GroupManager.java deleted file mode 100644 index 5a6d3ac6..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/GroupManager.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.group; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterGroupSummaryDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.group.GroupOffsetResetDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.TopicPartitionKS; -import com.xiaojukeji.know.streaming.km.common.bean.po.group.GroupMemberPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicConsumedDetailVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicOverviewVO; -import com.xiaojukeji.know.streaming.km.common.exception.AdminOperateException; -import com.xiaojukeji.know.streaming.km.common.exception.NotExistException; - -import java.util.List; -import java.util.Set; - -public interface GroupManager { - PaginationResult pagingGroupMembers(Long clusterPhyId, - String topicName, - String groupName, - String searchTopicKeyword, - String searchGroupKeyword, - PaginationBaseDTO dto); - - PaginationResult pagingGroupTopicMembers(Long clusterPhyId, String groupName, PaginationBaseDTO dto); - - PaginationResult pagingClusterGroupsOverview(Long clusterPhyId, ClusterGroupSummaryDTO dto); - - PaginationResult pagingGroupTopicConsumedMetrics(Long clusterPhyId, - String topicName, - String groupName, - List latestMetricNames, - PaginationSortDTO dto)throws NotExistException, AdminOperateException; - - Result> listClusterPhyGroupPartitions(Long clusterPhyId, String groupName, Long startTime, Long endTime); - - Result resetGroupOffsets(GroupOffsetResetDTO dto, String operator) throws Exception; - - List getGroupTopicOverviewVOList(Long clusterPhyId, List groupMemberPOList); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/impl/GroupManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/impl/GroupManagerImpl.java deleted file mode 100644 index 17216793..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/group/impl/GroupManagerImpl.java +++ /dev/null @@ -1,371 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.group.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.group.GroupManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterGroupSummaryDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.group.GroupOffsetResetDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.partition.PartitionOffsetDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.group.Group; -import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopicMember; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSGroupDescription; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSMemberConsumerAssignment; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSMemberDescription; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.offset.KSOffsetSpec; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.TopicPartitionKS; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.po.group.GroupMemberPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicConsumedDetailVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicOverviewVO; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.constant.PaginationConstant; -import com.xiaojukeji.know.streaming.km.common.converter.GroupConverter; -import com.xiaojukeji.know.streaming.km.common.enums.AggTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.OffsetTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum; -import com.xiaojukeji.know.streaming.km.common.exception.AdminOperateException; -import com.xiaojukeji.know.streaming.km.common.exception.NotExistException; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.group.GroupMetricService; -import com.xiaojukeji.know.streaming.km.core.service.group.GroupService; -import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.GroupMetricVersionItems; -import com.xiaojukeji.know.streaming.km.persistence.es.dao.GroupMetricESDAO; -import org.apache.kafka.common.ConsumerGroupState; -import org.apache.kafka.common.TopicPartition; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.stream.Collectors; - -import static com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum.CONNECT_CLUSTER_PROTOCOL_TYPE; - -@Component -public class GroupManagerImpl implements GroupManager { - private static final ILog log = LogFactory.getLog(GroupManagerImpl.class); - - @Autowired - private TopicService topicService; - - @Autowired - private GroupService groupService; - - @Autowired - private PartitionService partitionService; - - @Autowired - private GroupMetricService groupMetricService; - - @Autowired - private GroupMetricESDAO groupMetricESDAO; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Override - public PaginationResult pagingGroupMembers(Long clusterPhyId, - String topicName, - String groupName, - String searchTopicKeyword, - String searchGroupKeyword, - PaginationBaseDTO dto) { - PaginationResult paginationResult = groupService.pagingGroupMembers(clusterPhyId, topicName, groupName, searchTopicKeyword, searchGroupKeyword, dto); - - if (!paginationResult.hasData()) { - return PaginationResult.buildSuc(new ArrayList<>(), paginationResult); - } - - List groupTopicVOList = this.getGroupTopicOverviewVOList(clusterPhyId, paginationResult.getData().getBizData()); - - return PaginationResult.buildSuc(groupTopicVOList, paginationResult); - } - - @Override - public PaginationResult pagingGroupTopicMembers(Long clusterPhyId, String groupName, PaginationBaseDTO dto) { - Group group = groupService.getGroupFromDB(clusterPhyId, groupName); - - //没有topicMember则直接返回 - if (group == null || ValidateUtils.isEmptyList(group.getTopicMembers())) { - return PaginationResult.buildSuc(dto); - } - - //排序 - List groupTopicMembers = PaginationUtil.pageBySort(group.getTopicMembers(), PaginationConstant.DEFAULT_GROUP_TOPIC_SORTED_FIELD, SortTypeEnum.DESC.getSortType()); - - //分页 - PaginationResult paginationResult = PaginationUtil.pageBySubData(groupTopicMembers, dto); - - List groupMemberPOList = paginationResult.getData().getBizData().stream().map(elem -> new GroupMemberPO(clusterPhyId, elem.getTopicName(), groupName, group.getState().getState(), elem.getMemberCount())).collect(Collectors.toList()); - - return PaginationResult.buildSuc(this.getGroupTopicOverviewVOList(clusterPhyId, groupMemberPOList), paginationResult); - } - - @Override - public PaginationResult pagingClusterGroupsOverview(Long clusterPhyId, ClusterGroupSummaryDTO dto) { - List groupList = groupService.listClusterGroups(clusterPhyId); - - // 类型转化 - List voList = groupList.stream().map(elem -> GroupConverter.convert2GroupOverviewVO(elem)).collect(Collectors.toList()); - - // 搜索groupName - voList = PaginationUtil.pageByFuzzyFilter(voList, dto.getSearchGroupName(), Arrays.asList("name")); - - //搜索topic - if (!ValidateUtils.isBlank(dto.getSearchTopicName())) { - voList = voList.stream().filter(elem -> { - for (String topicName : elem.getTopicNameList()) { - if (topicName.contains(dto.getSearchTopicName())) { - return true; - } - } - return false; - }).collect(Collectors.toList()); - } - - // 分页 后 返回 - return PaginationUtil.pageBySubData(voList, dto); - } - - @Override - public PaginationResult pagingGroupTopicConsumedMetrics(Long clusterPhyId, - String topicName, - String groupName, - List latestMetricNames, - PaginationSortDTO dto) throws NotExistException, AdminOperateException { - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(clusterPhyId); - if (clusterPhy == null) { - return PaginationResult.buildFailure(MsgConstant.getClusterPhyNotExist(clusterPhyId), dto); - } - - // 获取消费组消费的TopicPartition列表 - Map consumedOffsetMap = groupService.getGroupOffsetFromKafka(clusterPhyId, groupName); - List partitionList = consumedOffsetMap.keySet() - .stream() - .filter(elem -> elem.topic().equals(topicName)) - .map(elem -> elem.partition()) - .collect(Collectors.toList()); - Collections.sort(partitionList); - - // 获取消费组当前运行信息 - KSGroupDescription groupDescription = groupService.getGroupDescriptionFromKafka(clusterPhy, groupName); - - // 转换存储格式 - Map tpMemberMap = new HashMap<>(); - - //如果不是connect集群 - if (!groupDescription.protocolType().equals(CONNECT_CLUSTER_PROTOCOL_TYPE)) { - for (KSMemberDescription description : groupDescription.members()) { - KSMemberConsumerAssignment assignment = (KSMemberConsumerAssignment) description.assignment(); - for (TopicPartition tp : assignment.topicPartitions()) { - tpMemberMap.put(tp, description); - } - } - } - - // 获取指标 - PaginationResult metricsResult = this.pagingGroupTopicPartitionMetrics(clusterPhyId, groupName, topicName, partitionList, latestMetricNames, dto); - if (metricsResult.failed()) { - return PaginationResult.buildFailure(metricsResult, dto); - } - - // 数据组装 - List voList = new ArrayList<>(); - for (GroupMetrics groupMetrics: metricsResult.getData().getBizData()) { - GroupTopicConsumedDetailVO vo = new GroupTopicConsumedDetailVO(); - vo.setTopicName(topicName); - vo.setPartitionId(groupMetrics.getPartitionId()); - - KSMemberDescription ksMemberDescription = tpMemberMap.get(new TopicPartition(topicName, groupMetrics.getPartitionId())); - if (ksMemberDescription != null) { - vo.setMemberId(ksMemberDescription.consumerId()); - vo.setHost(ksMemberDescription.host()); - vo.setClientId(ksMemberDescription.clientId()); - } - - vo.setLatestMetrics(groupMetrics); - voList.add(vo); - } - - return PaginationResult.buildSuc(voList, metricsResult); - } - - @Override - public Result> listClusterPhyGroupPartitions(Long clusterPhyId, String groupName, Long startTime, Long endTime) { - try { - return Result.buildSuc(groupMetricESDAO.listGroupTopicPartitions(clusterPhyId, groupName, startTime, endTime)); - }catch (Exception e){ - return Result.buildFailure(e.getMessage()); - } - } - - @Override - public Result resetGroupOffsets(GroupOffsetResetDTO dto, String operator) throws Exception { - Result rv = this.checkFieldLegal(dto); - if (rv.failed()) { - return rv; - } - - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(dto.getClusterId()); - if (clusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getClusterPhyNotExist(dto.getClusterId())); - } - - KSGroupDescription description = groupService.getGroupDescriptionFromKafka(clusterPhy, dto.getGroupName()); - if (ConsumerGroupState.DEAD.equals(description.state()) && !dto.isCreateIfNotExist()) { - return Result.buildFromRSAndMsg(ResultStatus.KAFKA_OPERATE_FAILED, "group不存在, 重置失败"); - } - - if (!ConsumerGroupState.EMPTY.equals(description.state()) && !ConsumerGroupState.DEAD.equals(description.state())) { - return Result.buildFromRSAndMsg(ResultStatus.KAFKA_OPERATE_FAILED, String.format("group处于%s, 重置失败(仅Empty | Dead 情况可重置)", GroupStateEnum.getByRawState(description.state()).getState())); - } - - // 获取offset - Result> offsetMapResult = this.getPartitionOffset(dto); - if (offsetMapResult.failed()) { - return Result.buildFromIgnoreData(offsetMapResult); - } - - // 重置offset - return groupService.resetGroupOffsets(dto.getClusterId(), dto.getGroupName(), offsetMapResult.getData(), operator); - } - - @Override - public List getGroupTopicOverviewVOList(Long clusterPhyId, List groupMemberPOList) { - // 获取指标 - Result> metricsListResult = groupMetricService.listLatestMetricsAggByGroupTopicFromES( - clusterPhyId, - groupMemberPOList.stream().map(elem -> new GroupTopic(elem.getGroupName(), elem.getTopicName())).collect(Collectors.toList()), - Arrays.asList(GroupMetricVersionItems.GROUP_METRIC_LAG), - AggTypeEnum.MAX - ); - if (metricsListResult.failed()) { - // 如果查询失败,则输出错误信息,但是依旧进行已有数据的返回 - log.error("method=completeMetricData||clusterPhyId={}||result={}||errMsg=search es failed", clusterPhyId, metricsListResult); - } - return this.convert2GroupTopicOverviewVOList(groupMemberPOList, metricsListResult.getData()); - } - - - /**************************************************** private method ****************************************************/ - - - private Result checkFieldLegal(GroupOffsetResetDTO dto) { - if (dto == null) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "参数为空"); - } - - Topic topic = topicService.getTopic(dto.getClusterId(), dto.getTopicName()); - if (topic == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getTopicNotExist(dto.getClusterId(), dto.getTopicName())); - } - - if (OffsetTypeEnum.PRECISE_OFFSET.getResetType() == dto.getResetType() - && ValidateUtils.isEmptyList(dto.getOffsetList())) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "参数错误,指定offset重置需传offset信息"); - } - - if (OffsetTypeEnum.PRECISE_TIMESTAMP.getResetType() == dto.getResetType() - && ValidateUtils.isNull(dto.getTimestamp())) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "参数错误,指定时间重置需传时间信息"); - } - - return Result.buildSuc(); - } - - private Result> getPartitionOffset(GroupOffsetResetDTO dto) { - if (OffsetTypeEnum.PRECISE_OFFSET.getResetType() == dto.getResetType()) { - return Result.buildSuc(dto.getOffsetList().stream().collect(Collectors.toMap( - elem -> new TopicPartition(dto.getTopicName(), elem.getPartitionId()), - PartitionOffsetDTO::getOffset, - (key1 , key2) -> key2 - ))); - } - - KSOffsetSpec offsetSpec = null; - if (OffsetTypeEnum.PRECISE_TIMESTAMP.getResetType() == dto.getResetType()) { - offsetSpec = KSOffsetSpec.forTimestamp(dto.getTimestamp()); - } else if (OffsetTypeEnum.EARLIEST.getResetType() == dto.getResetType()) { - offsetSpec = KSOffsetSpec.earliest(); - } else { - offsetSpec = KSOffsetSpec.latest(); - } - - return partitionService.getPartitionOffsetFromKafka(dto.getClusterId(), dto.getTopicName(), offsetSpec); - } - - private List convert2GroupTopicOverviewVOList(List poList, List metricsList) { - if (metricsList == null) { - metricsList = new ArrayList<>(); - } - - // > - Map> metricsMap = new HashMap<>(); - metricsList.stream().forEach(elem -> { - metricsMap.putIfAbsent(elem.getGroup(), new HashMap<>()); - metricsMap.get(elem.getGroup()).put(elem.getTopic(), elem); - }); - - List voList = new ArrayList<>(); - for (GroupMemberPO po: poList) { - GroupTopicOverviewVO vo = ConvertUtil.obj2Obj(po, GroupTopicOverviewVO.class); - if (vo == null) { - continue; - } - - GroupMetrics metrics = metricsMap.getOrDefault(po.getGroupName(), new HashMap<>()).get(po.getTopicName()); - if (metrics != null) { - vo.setMaxLag(ConvertUtil.Float2Long(metrics.getMetrics().get(GroupMetricVersionItems.GROUP_METRIC_LAG))); - } - - voList.add(vo); - } - - return voList; - } - - private PaginationResult pagingGroupTopicPartitionMetrics(Long clusterPhyId, - String groupName, - String topicName, - List partitionIdList, - List latestMetricNames, - PaginationSortDTO dto) { - - - // 获取Group指标信息 - Result> groupMetricsResult = groupMetricService.collectGroupMetricsFromKafka(clusterPhyId, groupName, latestMetricNames == null ? Arrays.asList() : latestMetricNames); - - - // 转换Group指标 - List esGroupMetricsList = groupMetricsResult.hasData() ? groupMetricsResult.getData().stream().filter(elem -> topicName.equals(elem.getTopic())).collect(Collectors.toList()) : new ArrayList<>(); - Map esMetricsMap = new HashMap<>(); - for (GroupMetrics groupMetrics: esGroupMetricsList) { - esMetricsMap.put(groupMetrics.getPartitionId(), groupMetrics); - } - - List allPartitionGroupMetrics = new ArrayList<>(); - for (Integer partitionId: partitionIdList) { - allPartitionGroupMetrics.add(esMetricsMap.getOrDefault(partitionId, new GroupMetrics(clusterPhyId, groupName, topicName, partitionId))); - } - - return PaginationUtil.pageBySubData( - (List)PaginationMetricsUtil.sortMetrics(allPartitionGroupMetrics, dto.getSortField(), "partitionId", dto.getSortType()), - dto - ); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/KafkaAclManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/KafkaAclManager.java deleted file mode 100644 index 1a392ba6..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/KafkaAclManager.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.kafkaacl; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.acl.AclAtomDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; - -import java.util.List; - -/** - * - */ -public interface KafkaAclManager { - Result batchCreateKafkaAcl(List dtoList, String operator); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/impl/KafkaAclManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/impl/KafkaAclManagerImpl.java deleted file mode 100644 index e8af01e0..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkaacl/impl/KafkaAclManagerImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.kafkaacl.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.kafkaacl.KafkaAclManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.acl.AclAtomDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.converter.KafkaAclConverter; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.core.service.acl.OpKafkaAclService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class KafkaAclManagerImpl implements KafkaAclManager { - private static final ILog log = LogFactory.getLog(KafkaAclManagerImpl.class); - - @Autowired - private OpKafkaAclService opKafkaAclService; - - @Override - public Result batchCreateKafkaAcl(List dtoList, String operator) { - log.debug("method=batchCreateKafkaAcl||dtoList={}||operator={}", ConvertUtil.obj2Json(dtoList), operator); - - for (AclAtomDTO dto: dtoList) { - Result rv = opKafkaAclService.createKafkaAcl(KafkaAclConverter.convert2ACLAtomParam(dto), operator); - if (rv.failed()) { - return rv; - } - } - - return Result.buildSuc(); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/KafkaUserManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/KafkaUserManager.java deleted file mode 100644 index c32b7b17..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/KafkaUserManager.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.kafkauser; - - -import com.xiaojukeji.know.streaming.km.common.bean.dto.kafkauser.ClusterKafkaUserTokenDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser.KafkaUserTokenVO; - -public interface KafkaUserManager { - /** - * 新增KafkaUser - */ - Result createKafkaUserWithTokenEncrypted(ClusterKafkaUserTokenDTO dto, String operator); - - /** - * 修改KafkaUser - */ - Result modifyKafkaUserWithTokenEncrypted(ClusterKafkaUserTokenDTO dto, String operator); - - /** - * 查看密码 - */ - Result getKafkaUserTokenWithEncrypt(Long clusterPhyId, String kafkaUser); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/impl/KafkaUserManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/impl/KafkaUserManagerImpl.java deleted file mode 100644 index 8cd66e0f..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/kafkauser/impl/KafkaUserManagerImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.kafkauser.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.didiglobal.logi.security.util.PWEncryptUtil; -import com.xiaojukeji.know.streaming.km.biz.kafkauser.KafkaUserManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.kafkauser.ClusterKafkaUserTokenDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkauser.KafkaUser; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.kafkauser.KafkaUserReplaceParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.po.KafkaUserPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser.KafkaUserTokenVO; -import com.xiaojukeji.know.streaming.km.common.converter.KafkaUserVOConverter; -import com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterAuthTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.AESUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.kafkauser.KafkaUserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class KafkaUserManagerImpl implements KafkaUserManager { - private static final ILog log = LogFactory.getLog(KafkaUserManagerImpl.class); - - @Autowired - private KafkaUserService kafkaUserService; - - @Override - public Result createKafkaUserWithTokenEncrypted(ClusterKafkaUserTokenDTO dto, String operator) { - if (!ClusterAuthTypeEnum.isScram(dto.getAuthType())) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "不支持该认证方式"); - } - - String rawToken = AESUtils.decrypt(dto.getToken()); - if (rawToken == null) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "KafkaUser密钥解密失败"); - } - - return kafkaUserService.createKafkaUser(new KafkaUserReplaceParam(dto.getClusterId(), dto.getKafkaUser(), rawToken), operator); - } - - @Override - public Result modifyKafkaUserWithTokenEncrypted(ClusterKafkaUserTokenDTO dto, String operator) { - if (!ClusterAuthTypeEnum.isScram(dto.getAuthType())) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "不支持该认证方式"); - } - - String rawToken = AESUtils.decrypt(dto.getToken()); - if (rawToken == null) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "KafkaUser密钥解密失败"); - } - - return kafkaUserService.modifyKafkaUser(new KafkaUserReplaceParam(dto.getClusterId(), dto.getKafkaUser(), rawToken), operator); - } - - @Override - public Result getKafkaUserTokenWithEncrypt(Long clusterPhyId, String kafkaUser) { - Result voResult = this.getKafkaUserToken(clusterPhyId, kafkaUser); - if (voResult.failed() || ValidateUtils.isNull(voResult.getData().getToken())) { - // 获取失败 或 无密钥信息,则直接返回 - return voResult; - } - - // 对Token进行加密 - voResult.getData().setToken(AESUtils.encrypt(voResult.getData().getToken())); - return voResult; - } - - /**************************************************** private method ****************************************************/ - - private Result getKafkaUserToken(Long clusterPhyId, String kafkaUser) { - Result kafkaUserResult = kafkaUserService.getKafkaUserFromKafka(clusterPhyId, kafkaUser); - if (kafkaUserResult.failed()) { - return Result.buildFromIgnoreData(kafkaUserResult); - } - - KafkaUserPO kafkaUserPO = kafkaUserService.getKafkaUserFromDB(clusterPhyId, kafkaUser); - if (kafkaUserPO == null) { - // DB中无数据,则直接返回kafka中查询到的数据 - return Result.buildSuc(KafkaUserVOConverter.convert2KafkaUserTokenVO(kafkaUserResult.getData(), false, null)); - } - - try { - String rawToken = PWEncryptUtil.decode(kafkaUserPO.getToken()); - - if (kafkaUserService.isTokenEqual2CredentialProps(clusterPhyId, kafkaUserResult.getData().getProps(), rawToken)) { - // 与DB中数据一致 - return Result.buildSuc(KafkaUserVOConverter.convert2KafkaUserTokenVO(kafkaUserResult.getData(), true, rawToken)); - } else { - // 与DB中数据不一致 - return Result.buildSuc(KafkaUserVOConverter.convert2KafkaUserTokenVO(kafkaUserResult.getData(), false, rawToken)); - } - } catch (Exception e) { - // DB中数据不一致,则直接返回kafka中查询到的数据 - return Result.buildSuc(KafkaUserVOConverter.convert2KafkaUserTokenVO(kafkaUserResult.getData(), false, null)); - } - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/ReassignManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/ReassignManager.java deleted file mode 100644 index ee14a874..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/ReassignManager.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.reassign; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.change.CreateChangeReplicasPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.move.CreateMoveReplicaPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.ReassignTopicOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan.ReassignPlanVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.ReassignTopicOverviewVO; - -import java.util.List; - -public interface ReassignManager { - /** - * 创建迁移计划Json - * @param dtoList - * @return - */ - Result createReassignmentPlanJson(List dtoList); - - /** - * 创建副本变更Json - * @param dtoList - * @return - */ - Result createReplicaChangePlanJson(List dtoList); - - /** - * 迁移Topic的信息 - * @param dto - * @return - */ - Result> getReassignmentTopicsOverview(ReassignTopicOverviewDTO dto); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/impl/ReassignManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/impl/ReassignManagerImpl.java deleted file mode 100644 index 4909ee60..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/reassign/impl/ReassignManagerImpl.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.reassign.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.reassign.ReassignManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.change.CreateChangeReplicasPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.move.CreateMoveReplicaPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.ReassignTopicOverviewDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.ReassignPlan; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.point.MetricPointVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan.ReassignPlanVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.ReassignTopicOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan.ReassignTopicPlanVO; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.converter.ReassignVOConverter; -import com.xiaojukeji.know.streaming.km.common.enums.AggTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.reassign.ReassignService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicMetricService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.TopicMetricVersionItems; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -@Component -public class ReassignManagerImpl implements ReassignManager { - private static final ILog log = LogFactory.getLog(ReassignManagerImpl.class); - - @Autowired - private ReassignService reassignService; - - @Autowired - private TopicService topicService; - - @Autowired - private TopicMetricService topicMetricService; - - @Override - public Result createReassignmentPlanJson(List dtoList) { - if (ValidateUtils.isEmptyList(dtoList)) { - return Result.buildSuc(new ReassignPlanVO(new ArrayList<>())); - } - - List topicPlanList = new ArrayList<>(); - for (CreateMoveReplicaPlanDTO planDTO: dtoList) { - Result planResult = reassignService.generateReassignmentJson( - planDTO.getClusterId(), - planDTO.getTopicName(), - planDTO.getPartitionIdList(), - planDTO.getBrokerIdList(), - planDTO.getEnableRackAwareness() - ); - if (planResult.failed()) { - // 出错则直接返回错误 - return Result.buildFromIgnoreData(planResult); - } - - // 转换格式 - topicPlanList.add(ReassignVOConverter.convert2ReassignTopicPlanVO(planResult.getData())); - } - - return Result.buildSuc(new ReassignPlanVO(topicPlanList)); - } - - @Override - public Result createReplicaChangePlanJson(List dtoList) { - if (ValidateUtils.isEmptyList(dtoList)) { - return Result.buildSuc(new ReassignPlanVO(new ArrayList<>())); - } - - List topicPlanList = new ArrayList<>(); - for (CreateChangeReplicasPlanDTO planDTO: dtoList) { - Result planResult = reassignService.generateReplicaChangeReassignmentJson( - planDTO.getClusterId(), - planDTO.getTopicName(), - planDTO.getNewReplicaNum(), - planDTO.getBrokerIdList() - ); - if (planResult.failed()) { - // 出错则直接返回错误 - return Result.buildFromIgnoreData(planResult); - } - - // 转换格式 - topicPlanList.add(ReassignVOConverter.convert2ReassignTopicPlanVO(planResult.getData())); - } - - return Result.buildSuc(new ReassignPlanVO(topicPlanList)); - } - - @Override - public Result> getReassignmentTopicsOverview(ReassignTopicOverviewDTO dto) { - Map topicMap = topicService.listTopicsFromDB(dto.getClusterId()).stream().collect(Collectors.toMap(Topic::getTopicName, Function.identity())); - - Map voMap = new HashMap<>(); - for (String topicName: dto.getTopicNameList()) { - Topic topic = topicMap.get(topicName); - if (topic == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getTopicNotExist(dto.getClusterId(), topicName)); - } - - ReassignTopicOverviewVO vo = ConvertUtil.obj2Obj(topic, ReassignTopicOverviewVO.class); - vo.setPartitionIdList(new ArrayList<>(topic.getPartitionMap().keySet())); - vo.setRetentionMs(topic.getRetentionMs()); - vo.setLatestDaysAvgBytesInList(new ArrayList<>()); - vo.setLatestDaysMaxBytesInList(new ArrayList<>()); - voMap.put(topicName, vo); - } - - Long now = System.currentTimeMillis(); - - // 补充近三天指标 - for (int idx = 0; idx < 3; ++idx) { - Long startTime = now - (idx + 1) * 24L * 60L * 60L * 1000L; - Long endTime = now - idx * 24L * 60L * 60L * 1000L; - - // 查询avg指标 - Result> avgMetricMapResult = topicMetricService.getAggMetricPointFromES( - dto.getClusterId(), - dto.getTopicNameList(), - TopicMetricVersionItems.TOPIC_METRIC_BYTES_IN, - AggTypeEnum.AVG, - startTime, - endTime - ); - Map avgMetricMap = avgMetricMapResult.hasData()? avgMetricMapResult.getData(): new HashMap<>(); - avgMetricMap.values().forEach(elem -> elem.setTimeStamp(endTime)); - - // 查询max指标 - Result> maxMetricMapResult = topicMetricService.getAggMetricPointFromES( - dto.getClusterId(), - dto.getTopicNameList(), - TopicMetricVersionItems.TOPIC_METRIC_BYTES_IN, - AggTypeEnum.MAX, - startTime, - endTime - ); - Map maxMetricMap = maxMetricMapResult.hasData()? maxMetricMapResult.getData(): new HashMap<>(); - - // 补充到vo中 - this.supplyLatestMetrics(voMap, avgMetricMap, maxMetricMap); - } - - return Result.buildSuc(new ArrayList<>(voMap.values())); - } - - /**************************************************** private method ****************************************************/ - - private void supplyLatestMetrics(Map voMap, - Map avgMetricMap, - Map maxMetricMap) { - for (Map.Entry entry: voMap.entrySet()) { - entry.getValue().getLatestDaysAvgBytesInList().add(avgMetricMap.get(entry.getKey())); - entry.getValue().getLatestDaysMaxBytesInList().add(maxMetricMap.get(entry.getKey())); - } - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/SelfManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/SelfManager.java deleted file mode 100644 index 9bb59ffc..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/SelfManager.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.self; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.self.SelfMetricsVO; - -import java.util.Properties; - -public interface SelfManager { - Result metrics(); - - Result version(); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/impl/SelfManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/impl/SelfManagerImpl.java deleted file mode 100644 index b4af754a..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/self/impl/SelfManagerImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.self.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.didiglobal.logi.security.common.vo.user.UserBriefVO; -import com.didiglobal.logi.security.service.UserService; -import com.xiaojukeji.know.streaming.km.biz.self.SelfManager; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.self.SelfMetricsVO; -import com.xiaojukeji.know.streaming.km.common.utils.GitPropUtil; -import com.xiaojukeji.know.streaming.km.common.utils.NetUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.km.KmNodeService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Properties; - -@Component -public class SelfManagerImpl implements SelfManager { - private static final ILog log = LogFactory.getLog(SelfManagerImpl.class); - - @Autowired - private BrokerService brokerService; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private UserService userService; - - @Autowired - private KmNodeService kmNodeService; - - @Override - public Result metrics() { - SelfMetricsVO vo = new SelfMetricsVO(); - - // ks自身信息 - vo.setKsIp(NetUtils.localIp()); - vo.setKsClusterKey(NetUtils.localMac()); - - List userBriefVOList = userService.getAllUserBriefList(); - vo.setKsUserCount(ValidateUtils.isNull(userBriefVOList)? 0: userBriefVOList.size()); - vo.setKsServerIps(kmNodeService.listKmHosts()); - - // 纳管集群信息 - vo.setKafkaClusterCount(clusterPhyService.listAllClusters().size()); - vo.setKafkaBrokerCount(brokerService.countAllBrokers()); - - return Result.buildSuc(vo); - } - - @Override - public Result version() { - return Result.buildSuc(GitPropUtil.getProps()); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/OpTopicManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/OpTopicManager.java deleted file mode 100644 index 5c3fa742..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/OpTopicManager.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicExpansionDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; - -public interface OpTopicManager { - /** - * 创建Topic - */ - Result createTopic(TopicCreateDTO dto, String operator); - - /** - * 删除Topic - */ - Result deleteTopicCombineRes(Long clusterPhyId, String topicName, String operator); - - /** - * 扩分区 - */ - Result expandTopic(TopicExpansionDTO dto, String operator); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicConfigManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicConfigManager.java deleted file mode 100644 index bddfb37d..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicConfigManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaTopicDefaultConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; - -import java.util.List; - -public interface TopicConfigManager { - /** - * 获取Topic默认配置 - * @param clusterPhyId 物理集群ID - * @return - */ - Result> getDefaultTopicConfig(Long clusterPhyId); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicStateManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicStateManager.java deleted file mode 100644 index f2c05300..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/TopicStateManager.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicRecordDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicBrokersPartitionsSummaryVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicRecordVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.broker.TopicBrokerAllVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition.TopicPartitionVO; -import com.xiaojukeji.know.streaming.km.common.exception.AdminOperateException; -import com.xiaojukeji.know.streaming.km.common.exception.NotExistException; - -import java.util.List; - -public interface TopicStateManager { - TopicBrokerAllVO getTopicBrokerAll(Long clusterPhyId, String topicName, String searchBrokerHost) throws NotExistException; - - Result> getTopicMessages(Long clusterPhyId, String topicName, TopicRecordDTO dto) throws AdminOperateException; - - Result getTopicState(Long clusterPhyId, String topicName); - - Result> getTopicPartitions(Long clusterPhyId, String topicName, List metricsNames); - - Result getTopicBrokersPartitionsSummary(Long clusterPhyId, String topicName); - - PaginationResult pagingTopicGroupsOverview(Long clusterPhyId, String topicName, String searchGroupName, PaginationBaseDTO dto); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/OpTopicManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/OpTopicManagerImpl.java deleted file mode 100644 index 5d27ed74..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/OpTopicManagerImpl.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.topic.OpTopicManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicCreateDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicExpansionDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic.TopicCreateParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic.TopicParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic.TopicPartitionExpandParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.utils.BackoffUtils; -import com.xiaojukeji.know.streaming.km.common.utils.FutureUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.common.utils.kafka.KafkaReplicaAssignUtil; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionService; -import com.xiaojukeji.know.streaming.km.core.service.topic.OpTopicService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import kafka.admin.AdminUtils; -import kafka.admin.BrokerMetadata; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.interceptor.TransactionAspectSupport; -import scala.Option; -import scala.collection.Seq; -import scala.jdk.javaapi.CollectionConverters; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class OpTopicManagerImpl implements OpTopicManager { - private static final ILog log = LogFactory.getLog(OpTopicManagerImpl.class); - - @Autowired - private TopicService topicService; - - @Autowired - private BrokerService brokerService; - - @Autowired - private OpTopicService opTopicService; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private PartitionService partitionService; - - @Override - public Result createTopic(TopicCreateDTO dto, String operator) { - log.info("method=createTopic||param={}||operator={}.", dto, operator); - - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(dto.getClusterId()); - if (clusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getClusterPhyNotExist(dto.getClusterId())); - } - - // 构造assignmentMap - scala.collection.Map> rawAssignmentMap = AdminUtils.assignReplicasToBrokers( - this.buildBrokerMetadataSeq(dto.getClusterId(), dto.getBrokerIdList()), - dto.getPartitionNum(), - dto.getReplicaNum(), - -1, - -1 - ); - - // 类型转换 - Map> assignmentMap = new HashMap<>(); - rawAssignmentMap. - toStream(). - foreach(elem -> assignmentMap.put( - (Integer) elem._1, - CollectionConverters.asJava(elem._2).stream().map(item -> (Integer)item).collect(Collectors.toList())) - ); - - // 创建Topic - Result createTopicRes = opTopicService.createTopic( - new TopicCreateParam( - dto.getClusterId(), - dto.getTopicName(), - new HashMap((Map) dto.getProperties()), - assignmentMap, - dto.getDescription() - ), - operator - ); - if (createTopicRes.successful()){ - try{ - FutureUtil.quickStartupFutureUtil.submitTask(() -> { - BackoffUtils.backoff(3000); - Result> partitionsResult = partitionService.listPartitionsFromKafka(clusterPhy, dto.getTopicName()); - if (partitionsResult.successful()){ - partitionService.updatePartitions(clusterPhy.getId(), dto.getTopicName(), partitionsResult.getData(), new ArrayList<>()); - } - }); - }catch (Exception e) { - log.error("method=createTopic||param={}||operator={}||msg=add partition to db failed||errMsg=exception", dto, operator, e); - return Result.buildFromRSAndMsg(ResultStatus.MYSQL_OPERATE_FAILED, "Topic创建成功,但记录Partition到DB中失败,等待定时任务同步partition信息"); - } - } - return createTopicRes; - } - - @Override - public Result deleteTopicCombineRes(Long clusterPhyId, String topicName, String operator) { - // 删除Topic - Result rv = opTopicService.deleteTopic(new TopicParam(clusterPhyId, topicName), operator); - if (rv.failed()) { - return rv; - } - - // 删除Topic相关的ACL信息 - - return Result.buildSuc(); - } - - @Override - @Transactional - public Result expandTopic(TopicExpansionDTO dto, String operator) { - Topic topic = topicService.getTopic(dto.getClusterId(), dto.getTopicName()); - if (topic == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getTopicNotExist(dto.getClusterId(), dto.getTopicName())); - } - - TopicPartitionExpandParam expandParam = new TopicPartitionExpandParam( - dto.getClusterId(), - dto.getTopicName(), - topic.getPartitionMap(), - this.generateNewPartitionAssignment(dto.getClusterId(), topic, dto.getBrokerIdList(), dto.getIncPartitionNum()) - ); - - // 更新DB分区数信息, 其他信息交由后台任务进行更新 - Result rv = topicService.updatePartitionNum(topic.getClusterPhyId(), topic.getTopicName(), topic.getPartitionNum() + dto.getIncPartitionNum()); - if (rv.failed()){ - return rv; - } - - rv = opTopicService.expandTopic(expandParam, operator); - if (rv.failed()) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - return rv; - } - return rv; - } - - - /**************************************************** private method ****************************************************/ - - - private Seq buildBrokerMetadataSeq(Long clusterPhyId, final List selectedBrokerIdList) { - // 选取Broker列表 - List brokerList = brokerService.listAliveBrokersFromDB(clusterPhyId).stream().filter( elem -> - selectedBrokerIdList == null || selectedBrokerIdList.contains(elem.getBrokerId()) - ).collect(Collectors.toList()); - - List brokerMetadataList = new ArrayList<>(); - for (Broker broker: brokerList) { - brokerMetadataList.add(new BrokerMetadata(broker.getBrokerId(), Option.apply(broker.getRack()))); - } - - return CollectionConverters.asScala(brokerMetadataList); - } - - private Map> generateNewPartitionAssignment(Long clusterPhyId, Topic topic, List brokerIdList, Integer incPartitionNum) { - if (ValidateUtils.isEmptyList(brokerIdList)) { - // 如果brokerId列表为空,则获取当前集群存活的Broker列表 - brokerIdList = brokerService.listAliveBrokersFromDB(clusterPhyId).stream().map( elem -> elem.getBrokerId()).collect(Collectors.toList()); - } - - Map brokerRackMap = new HashMap<>(); - for (Broker broker: brokerService.listAliveBrokersFromDB(clusterPhyId)) { - if (brokerIdList != null && !brokerIdList.contains(broker.getBrokerId())) { - continue; - } - - brokerRackMap.put(broker.getBrokerId(), broker.getRack() == null? "": broker.getRack()); - } - - // 生成分配规则 - return KafkaReplicaAssignUtil.generateNewPartitionAssignment(brokerRackMap, topic.getPartitionMap(), incPartitionNum); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicConfigManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicConfigManagerImpl.java deleted file mode 100644 index ccb02cf6..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicConfigManagerImpl.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.topic.TopicConfigManager; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaConfigDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaTopicDefaultConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.broker.BrokerParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.VersionItemParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.converter.KafkaConfigConverter; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.exception.VCHandlerNotExistException; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerConfigService; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicConfigService; -import com.xiaojukeji.know.streaming.km.core.service.version.BaseKafkaVersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.*; -import java.util.stream.Collectors; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum.*; - -@Component -public class TopicConfigManagerImpl extends BaseKafkaVersionControlService implements TopicConfigManager { - private static final ILog log = LogFactory.getLog(TopicConfigManagerImpl.class); - - private static final String GET_DEFAULT_TOPIC_CONFIG = "getDefaultTopicConfig"; - - @Autowired - private BrokerService brokerService; - - @Autowired - private BrokerConfigService brokerConfigService; - - @Autowired - private TopicConfigService topicConfigService; - - @Override - protected VersionItemTypeEnum getVersionItemType() { - return VersionItemTypeEnum.SERVICE_OP_TOPIC_CONFIG; - } - - @PostConstruct - private void init() { - registerVCHandler(GET_DEFAULT_TOPIC_CONFIG, V_0_10_0_0, V_0_11_0_0, "getDefaultTopicConfigByLocal", this::getDefaultTopicConfigByLocal); - registerVCHandler(GET_DEFAULT_TOPIC_CONFIG, V_0_11_0_0, V_MAX, "getDefaultTopicConfigByClient", this::getDefaultTopicConfigByClient); - } - - @Override - public Result> getDefaultTopicConfig(Long clusterPhyId) { - try { - List aliveBrokerList = brokerService.listAliveBrokersFromDB(clusterPhyId); - Integer aliveBrokerId = null; - if (!aliveBrokerList.isEmpty()) { - aliveBrokerId = aliveBrokerList.get(0).getBrokerId(); - } - - return (Result>) doVCHandler(clusterPhyId, GET_DEFAULT_TOPIC_CONFIG, new BrokerParam(clusterPhyId, aliveBrokerId)); - } catch (VCHandlerNotExistException e) { - return Result.buildFailure(e.getResultStatus()); - } - } - - private Result> getDefaultTopicConfigByLocal(VersionItemParam itemParam) { - BrokerParam brokerParam = (BrokerParam) itemParam; - return Result.buildSuc(KafkaConfigConverter.convert2KafkaTopicDefaultConfigList( - topicConfigService.getConfigNamesAndDocs(brokerParam.getClusterPhyId()), - new HashMap<>() - )); - } - - private Result> getDefaultTopicConfigByClient(VersionItemParam itemParam) { - BrokerParam brokerParam = (BrokerParam) itemParam; - - Result> defaultConfigResult = brokerConfigService.getBrokerConfigDetailFromKafka(brokerParam.getClusterPhyId(), brokerParam.getBrokerId()); - if (defaultConfigResult.failed()) { - // 获取配置错误,但是不直接返回 - log.error("method=getDefaultTopicConfigByClient||param={}||result={}.", brokerParam, defaultConfigResult); - } - - return Result.buildSuc(KafkaConfigConverter.convert2KafkaTopicDefaultConfigList( - topicConfigService.getConfigNamesAndDocs(brokerParam.getClusterPhyId()), - !defaultConfigResult.hasData()? - new HashMap<>(): - defaultConfigResult.getData().stream().filter(elem -> !ValidateUtils.isNull(elem.getValue())).collect(Collectors.toMap(KafkaConfigDetail::getName, KafkaConfigDetail::getValue)) - ) - ); - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicStateManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicStateManagerImpl.java deleted file mode 100644 index cd970528..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/topic/impl/TopicStateManagerImpl.java +++ /dev/null @@ -1,453 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.topic.impl; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.biz.group.GroupManager; -import com.xiaojukeji.know.streaming.km.biz.topic.TopicStateManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.TopicRecordDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.offset.KSOffsetSpec; -import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.po.group.GroupMemberPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.broker.BrokerReplicaSummaryVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupTopicOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicBrokersPartitionsSummaryVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicRecordVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicStateVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.broker.TopicBrokerAllVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.broker.TopicBrokerSingleVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition.TopicPartitionVO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant; -import com.xiaojukeji.know.streaming.km.common.converter.TopicVOConverter; -import com.xiaojukeji.know.streaming.km.common.enums.OffsetTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import com.xiaojukeji.know.streaming.km.common.exception.AdminOperateException; -import com.xiaojukeji.know.streaming.km.common.exception.NotExistException; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.group.GroupService; -import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionMetricService; -import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicConfigService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicMetricService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.TopicMetricVersionItems; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.kafka.clients.consumer.*; -import org.apache.kafka.common.TopicPartition; -import org.apache.kafka.common.config.TopicConfig; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.Duration; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -@Component -public class TopicStateManagerImpl implements TopicStateManager { - private static final ILog log = LogFactory.getLog(TopicStateManagerImpl.class); - - @Autowired - private TopicService topicService; - - @Autowired - private BrokerService brokerService; - - @Autowired - private PartitionService partitionService; - - @Autowired - private PartitionMetricService partitionMetricService; - - @Autowired - private TopicMetricService topicMetricService; - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private TopicConfigService topicConfigService; - - @Autowired - private GroupService groupService; - - @Autowired - private GroupManager groupManager; - - @Override - public TopicBrokerAllVO getTopicBrokerAll(Long clusterPhyId, String topicName, String searchBrokerHost) throws NotExistException { - Topic topic = topicService.getTopic(clusterPhyId, topicName); - - List partitionList = partitionService.listPartitionByTopic(clusterPhyId, topicName); - Map> brokerIdPartitionListMap = this.convert2BrokerIdPartitionListMap(partitionList); - - Map brokerMap = brokerService.listAllBrokerByTopic(clusterPhyId, topicName).stream().collect(Collectors.toMap(Broker::getBrokerId, Function.identity())); - - TopicBrokerAllVO allVO = new TopicBrokerAllVO(); - - allVO.setTotal(topic.getBrokerIdSet().size()); - allVO.setLive((int)brokerMap.values().stream().filter(elem -> elem.alive()).count()); - allVO.setDead(allVO.getTotal() - allVO.getLive()); - - allVO.setPartitionCount(topic.getPartitionNum()); - allVO.setBrokerPartitionStateList(new ArrayList<>()); - allVO.setUnderReplicatedPartitionIdList(new ArrayList<>()); - allVO.setNoLeaderPartitionIdList(new ArrayList<>()); - - // 补充无Leader及未同步的分区 - for (Partition partition: partitionList) { - if (partition.getLeaderBrokerId() == null || Constant.INVALID_CODE == partition.getLeaderBrokerId()) { - allVO.getNoLeaderPartitionIdList().add(partition.getPartitionId()); - } - if (partition.getInSyncReplicaList().size() != partition.getAssignReplicaList().size()) { - allVO.getUnderReplicatedPartitionIdList().add(partition.getPartitionId()); - } - } - - // 补充Broker中分区的详情 - for (Integer brokerId: topic.getBrokerIdSet()) { - Broker broker = brokerMap.get(brokerId); - if (!ValidateUtils.isBlank(searchBrokerHost) && (broker == null || !broker.getHost().contains(searchBrokerHost))) { - // 不满足搜索的要求,则直接略过该Broker - continue; - } - allVO.getBrokerPartitionStateList().add(this.getTopicBrokerSingle(clusterPhyId, topicName, brokerIdPartitionListMap, brokerId, broker)); - } - - return allVO; - } - - @Override - public Result> getTopicMessages(Long clusterPhyId, String topicName, TopicRecordDTO dto) throws AdminOperateException { - long startTime = System.currentTimeMillis(); - - // 获取集群 - ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(clusterPhyId); - if (clusterPhy == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getClusterPhyNotExist(clusterPhyId)); - } - - // 获取分区beginOffset - Result> beginOffsetsMapResult = partitionService.getPartitionOffsetFromKafka(clusterPhyId, topicName, dto.getFilterPartitionId(), KSOffsetSpec.earliest()); - if (beginOffsetsMapResult.failed()) { - return Result.buildFromIgnoreData(beginOffsetsMapResult); - } - // 获取分区endOffset - Result> endOffsetsMapResult = partitionService.getPartitionOffsetFromKafka(clusterPhyId, topicName, dto.getFilterPartitionId(), KSOffsetSpec.latest()); - if (endOffsetsMapResult.failed()) { - return Result.buildFromIgnoreData(endOffsetsMapResult); - } - - List voList = new ArrayList<>(); - - KafkaConsumer kafkaConsumer = null; - try { - // 创建kafka-consumer - kafkaConsumer = new KafkaConsumer<>(this.generateClientProperties(clusterPhy, dto.getMaxRecords())); - - List partitionList = new ArrayList<>(); - long maxMessage = 0; - for (Map.Entry entry : endOffsetsMapResult.getData().entrySet()) { - long begin = beginOffsetsMapResult.getData().get(entry.getKey()); - long end = entry.getValue(); - if (begin == end){ - continue; - } - maxMessage += end - begin; - partitionList.add(entry.getKey()); - } - maxMessage = Math.min(maxMessage, dto.getMaxRecords()); - kafkaConsumer.assign(partitionList); - - Map partitionOffsetAndTimestampMap = new HashMap<>(); - // 获取指定时间每个分区的offset(按指定开始时间查询消息时) - if (OffsetTypeEnum.PRECISE_TIMESTAMP.getResetType() == dto.getFilterOffsetReset()) { - Map timestampsToSearch = new HashMap<>(); - partitionList.forEach(topicPartition -> { - timestampsToSearch.put(topicPartition, dto.getStartTimestampUnitMs()); - }); - partitionOffsetAndTimestampMap = kafkaConsumer.offsetsForTimes(timestampsToSearch); - } - - for (TopicPartition partition : partitionList) { - if (OffsetTypeEnum.EARLIEST.getResetType() == dto.getFilterOffsetReset()) { - // 重置到最旧 - kafkaConsumer.seek(partition, beginOffsetsMapResult.getData().get(partition)); - } else if (OffsetTypeEnum.PRECISE_TIMESTAMP.getResetType() == dto.getFilterOffsetReset()) { - // 重置到指定时间 - kafkaConsumer.seek(partition, partitionOffsetAndTimestampMap.get(partition).offset()); - } else if (OffsetTypeEnum.PRECISE_OFFSET.getResetType() == dto.getFilterOffsetReset()) { - // 重置到指定位置 - - } else { - // 默认,重置到最新 - kafkaConsumer.seek(partition, Math.max(beginOffsetsMapResult.getData().get(partition), endOffsetsMapResult.getData().get(partition) - dto.getMaxRecords())); - } - } - - // 这里需要减去 KafkaConstant.POLL_ONCE_TIMEOUT_UNIT_MS 是因为poll一次需要耗时,如果这里不减去,则可能会导致poll之后,超过要求的时间 - while (System.currentTimeMillis() - startTime <= dto.getPullTimeoutUnitMs() && voList.size() < maxMessage) { - ConsumerRecords consumerRecords = kafkaConsumer.poll(Duration.ofMillis(KafkaConstant.POLL_ONCE_TIMEOUT_UNIT_MS)); - for (ConsumerRecord consumerRecord : consumerRecords) { - if (this.checkIfIgnore(consumerRecord, dto.getFilterKey(), dto.getFilterValue())) { - continue; - } - - voList.add(TopicVOConverter.convert2TopicRecordVO(topicName, consumerRecord)); - if (voList.size() >= dto.getMaxRecords()) { - break; - } - } - - // 超时则返回 - if (System.currentTimeMillis() - startTime + KafkaConstant.POLL_ONCE_TIMEOUT_UNIT_MS > dto.getPullTimeoutUnitMs() - || voList.size() > dto.getMaxRecords()) { - break; - } - } - - // 排序 - if (ObjectUtils.isNotEmpty(voList)) { - // 默认按时间倒序排序 - if (StringUtils.isBlank(dto.getSortType())) { - dto.setSortType(SortTypeEnum.DESC.getSortType()); - } - PaginationUtil.pageBySort(voList, dto.getSortField(), dto.getSortType()); - } - - return Result.buildSuc(voList.subList(0, Math.min(dto.getMaxRecords(), voList.size()))); - } catch (Exception e) { - log.error("method=getTopicMessages||clusterPhyId={}||topicName={}||param={}||errMsg=exception", clusterPhyId, topicName, dto, e); - - throw new AdminOperateException(e.getMessage(), e, ResultStatus.KAFKA_OPERATE_FAILED); - } finally { - if (kafkaConsumer != null) { - try { - kafkaConsumer.close(Duration.ofMillis(KafkaConstant.POLL_ONCE_TIMEOUT_UNIT_MS)); - } catch (Exception e) { - // ignore - } - } - } - } - - @Override - public Result getTopicState(Long clusterPhyId, String topicName) { - Topic topic = topicService.getTopic(clusterPhyId, topicName); - if (topic == null) { - return Result.buildFromRSAndMsg(ResultStatus.NOT_EXIST, MsgConstant.getTopicNotExist(clusterPhyId, topicName)); - } - - List partitionList = partitionService.listPartitionByTopic(clusterPhyId, topicName); - if (partitionList == null) { - partitionList = new ArrayList<>(); - } - - TopicStateVO vo = new TopicStateVO(); - - // 分区信息 - vo.setPartitionCount(topic.getPartitionNum()); - vo.setAllPartitionHaveLeader(partitionList.stream().filter(elem -> elem.getLeaderBrokerId().equals(-1)).count() <= 0); - - // 副本信息 - vo.setReplicaFactor(topic.getReplicaNum()); - vo.setAllReplicaInSync(partitionList.stream().filter(elem -> elem.getInSyncReplicaList().size() != topic.getReplicaNum()).count() <= 0); - - // 配置信息 - Map topicConfigMap = new HashMap<>(); - Result> configResult = topicConfigService.getTopicConfigFromKafka(clusterPhyId, topicName); - if (configResult.hasData()) { - topicConfigMap = configResult.getData(); - } - - // 最小副本 - Integer minIsr = ConvertUtil.string2Integer(topicConfigMap.get(TopicConfig.MIN_IN_SYNC_REPLICAS_CONFIG)); - if (minIsr == null) { - vo.setMinimumIsr(null); - vo.setAllPartitionMatchAtMinIsr(null); - } else { - vo.setMinimumIsr(minIsr); - vo.setAllPartitionMatchAtMinIsr(partitionList.stream().filter(elem -> elem.getInSyncReplicaList().size() < minIsr).count() <= 0); - } - - // 压缩方式 - String cleanupPolicy = topicConfigMap.get(TopicConfig.CLEANUP_POLICY_CONFIG); - if (ValidateUtils.isBlank(cleanupPolicy)) { - vo.setCompacted(null); - } else { - vo.setCompacted(cleanupPolicy.contains(TopicConfig.CLEANUP_POLICY_COMPACT)); - } - - return Result.buildSuc(vo); - } - - @Override - public Result> getTopicPartitions(Long clusterPhyId, String topicName, List metricsNames) { - List partitionList = partitionService.listPartitionByTopic(clusterPhyId, topicName); - if (ValidateUtils.isEmptyList(partitionList)) { - return Result.buildSuc(); - } - - Result> metricsResult = partitionMetricService.collectPartitionsMetricsFromKafka(clusterPhyId, topicName, metricsNames); - if (metricsResult.failed()) { - // 仅打印错误日志,但是不直接返回错误 - log.error( - "method=getTopicPartitions||clusterPhyId={}||topicName={}||result={}||msg=get metrics from es failed", - clusterPhyId, topicName, metricsResult - ); - } - - // 转map - Map metricsMap = new HashMap<>(); - if (metricsResult.hasData()) { - for (PartitionMetrics metrics: metricsResult.getData()) { - metricsMap.put(metrics.getPartitionId(), metrics); - } - } - - List voList = new ArrayList<>(); - for (Partition partition: partitionList) { - voList.add(TopicVOConverter.convert2TopicPartitionVO(partition, metricsMap.get(partition.getPartitionId()))); - } - return Result.buildSuc(voList); - } - - @Override - public Result getTopicBrokersPartitionsSummary(Long clusterPhyId, String topicName) { - List partitionList = partitionService.listPartitionByTopic(clusterPhyId, topicName); - Map brokerMap = brokerService.listAllBrokerByTopic(clusterPhyId, topicName).stream().collect(Collectors.toMap(Broker::getBrokerId, Function.identity())); - - TopicBrokersPartitionsSummaryVO vo = new TopicBrokersPartitionsSummaryVO(); - - // Broker统计信息 - vo.setBrokerCount(brokerMap.size()); - vo.setLiveBrokerCount((int)brokerMap.values().stream().filter(elem -> elem.alive()).count()); - vo.setDeadBrokerCount(vo.getBrokerCount() - vo.getLiveBrokerCount()); - - // Partition统计信息 - vo.setPartitionCount(partitionList.size()); - vo.setNoLeaderPartitionCount(0); - vo.setUnderReplicatedPartitionCount(0); - - // 补充无Leader及未同步的分区 - for (Partition partition: partitionList) { - if (partition.getLeaderBrokerId() == null || Constant.INVALID_CODE == partition.getLeaderBrokerId()) { - vo.setNoLeaderPartitionCount(vo.getNoLeaderPartitionCount() + 1); - } - - if (partition.getInSyncReplicaList().size() != partition.getAssignReplicaList().size()) { - vo.setUnderReplicatedPartitionCount(vo.getUnderReplicatedPartitionCount() + 1); - } - } - - return Result.buildSuc(vo); - } - - @Override - public PaginationResult pagingTopicGroupsOverview(Long clusterPhyId, String topicName, String searchGroupName, PaginationBaseDTO dto) { - PaginationResult paginationResult = groupService.pagingGroupMembers(clusterPhyId, topicName, "", "", searchGroupName, dto); - - if (!paginationResult.hasData()) { - return PaginationResult.buildSuc(new ArrayList<>(), paginationResult); - } - - List groupTopicVOList = groupManager.getGroupTopicOverviewVOList(clusterPhyId, paginationResult.getData().getBizData()); - - return PaginationResult.buildSuc(groupTopicVOList, paginationResult); - } - - /**************************************************** private method ****************************************************/ - - private boolean checkIfIgnore(ConsumerRecord consumerRecord, String filterKey, String filterValue) { - if (filterKey != null && consumerRecord.key() == null) { - // ignore - return true; - } - if (filterKey != null && consumerRecord.key() != null && !consumerRecord.key().contains(filterKey)) { - return true; - } - - if (filterValue != null && consumerRecord.value() == null) { - // ignore - return true; - } - if (filterValue != null && consumerRecord.value() != null && !consumerRecord.value().contains(filterValue)) { - return true; - } - - return false; - } - - private TopicBrokerSingleVO getTopicBrokerSingle(Long clusterPhyId, - String topicName, - Map> brokerIdPartitionListMap, - Integer brokerId, - Broker broker) { - TopicBrokerSingleVO singleVO = new TopicBrokerSingleVO(); - singleVO.setBrokerId(brokerId); - singleVO.setHost(broker != null? broker.getHost(): null); - singleVO.setAlive(broker != null && broker.alive()); - - TopicMetrics metrics = topicMetricService.getTopicLatestMetricsFromES(clusterPhyId, brokerId, topicName, Arrays.asList( - TopicMetricVersionItems.TOPIC_METRIC_BYTES_IN, - TopicMetricVersionItems.TOPIC_METRIC_BYTES_OUT - )); - if (metrics != null) { - singleVO.setBytesInOneMinuteRate(metrics.getMetrics().get(TopicMetricVersionItems.TOPIC_METRIC_BYTES_IN)); - singleVO.setBytesOutOneMinuteRate(metrics.getMetrics().get(TopicMetricVersionItems.TOPIC_METRIC_BYTES_OUT)); - } - singleVO.setReplicaList(this.getBrokerReplicaSummaries(brokerId, brokerIdPartitionListMap.getOrDefault(brokerId, new ArrayList<>()))); - return singleVO; - } - - private List getBrokerReplicaSummaries(Integer brokerId, List partitionList) { - List voList = new ArrayList<>(); - for (Partition partition: partitionList) { - BrokerReplicaSummaryVO summaryVO = new BrokerReplicaSummaryVO(); - summaryVO.setTopicName(partition.getTopicName()); - summaryVO.setPartitionId(partition.getPartitionId()); - summaryVO.setLeaderBrokerId(partition.getLeaderBrokerId()); - summaryVO.setIsLeaderReplace(brokerId.equals(partition.getLeaderBrokerId())); - summaryVO.setInSync(partition.getInSyncReplicaList().contains(brokerId)); - voList.add(summaryVO); - } - return voList; - } - - private Map> convert2BrokerIdPartitionListMap(List partitionList) { - Map> brokerIdPartitionListMap = new HashMap<>(); - for (Partition partition: partitionList) { - for (Integer brokerId: partition.getAssignReplicaList()) { - brokerIdPartitionListMap.putIfAbsent(brokerId, new ArrayList<>()); - brokerIdPartitionListMap.get(brokerId).add(partition); - } - } - return brokerIdPartitionListMap; - } - - private Properties generateClientProperties(ClusterPhy clusterPhy, Integer maxPollRecords) { - Properties props = ConvertUtil.str2ObjByJson(clusterPhy.getClientProperties(), Properties.class); - props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, clusterPhy.getBootstrapServers()); - props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); - props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); - props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); - - props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, Math.max(2, Math.min(5, maxPollRecords))); - return props; - } -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/VersionControlManager.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/VersionControlManager.java deleted file mode 100644 index ea4a9dc2..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/VersionControlManager.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.version; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.UserMetricConfigDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.vo.config.metric.UserMetricConfigVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.version.VersionItemVO; - -import java.util.List; -import java.util.Map; - -public interface VersionControlManager { - - /** - * 查询当前所有的兼容性(指标、前端操作)配置信息 - * @return - */ - Result> listAllVersionItem(); - - /** - * 获取当前ks所有支持的kafka版本 - * @return - */ - Result> listAllKafkaVersions(); - - /** - * 获取全部集群 clusterId 中类型为 type 的指标,不论支持不支持 - * @param clusterId - * @param type - * @return - */ - Result> listKafkaClusterVersionControlItem(Long clusterId, Integer type); - - /** - * 获取当前用户设置的用于展示的指标配置 - * @param clusterId - * @param type - * @param operator - * @return - */ - Result> listUserMetricItem(Long clusterId, Integer type, String operator); - - /** - * 更新用户配置的指标项 - * @param clusterId - * @param type - * @param userMetricConfigDTO - * @param operator - * @return - */ - Result updateUserMetricItem(Long clusterId, Integer type, - UserMetricConfigDTO userMetricConfigDTO, String operator); -} diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/impl/VersionControlManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/impl/VersionControlManagerImpl.java deleted file mode 100644 index 740974d7..00000000 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/version/impl/VersionControlManagerImpl.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.xiaojukeji.know.streaming.km.biz.version.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.didiglobal.logi.security.common.dto.config.ConfigDTO; -import com.didiglobal.logi.security.service.ConfigService; -import com.xiaojukeji.know.streaming.km.biz.version.VersionControlManager; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDetailDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.UserMetricConfigDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.metric.UserMetricConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.vo.config.metric.UserMetricConfigVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.version.VersionItemVO; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.VersionUtil; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import javax.annotation.PostConstruct; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum.V_MAX; -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.BrokerMetricVersionItems.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ClusterMetricVersionItems.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.GroupMetricVersionItems.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.TopicMetricVersionItems.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.connect.MirrorMakerMetricVersionItems.*; -import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ZookeeperMetricVersionItems.*; - -@Service -public class VersionControlManagerImpl implements VersionControlManager { - protected static final ILog LOGGER = LogFactory.getLog(VersionControlManagerImpl.class); - - private static final String NOT_SUPPORT_DESC = ",(该指标只支持%s及以上的版本)"; - private static final String NOT_SUPPORT_DESC1 = ",(该指标只支持%s及以上和%s以下的版本)"; - - private static final String CONFIG_GROUP = "UserMetricConfig"; - - Set defaultMetrics = new HashSet<>(); - - @PostConstruct - public void init(){ - // topic - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_HEALTH_STATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_FAILED_FETCH_REQ, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_FAILED_PRODUCE_REQ, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_UNDER_REPLICA_PARTITIONS, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_TOTAL_PRODUCE_REQUESTS, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_BYTES_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_BYTES_OUT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_BYTES_REJECTED, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_MESSAGE_IN, true)); - - // cluster - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_HEALTH_STATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_ACTIVE_CONTROLLER_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_BYTES_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_BYTES_OUT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_CONNECTIONS, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_MESSAGES_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_PARTITIONS_NO_LEADER, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_PARTITION_URP, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_TOTAL_LOG_SIZE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_TOTAL_PRODUCE_REQ, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_TOTAL_REQ_QUEUE_SIZE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_TOTAL_RES_QUEUE_SIZE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_GROUP_REBALANCES, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CLUSTER.getCode(), CLUSTER_METRIC_JOB_RUNNING, true)); - - // group - defaultMetrics.add(new UserMetricConfig(METRIC_GROUP.getCode(), GROUP_METRIC_OFFSET_CONSUMED, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_GROUP.getCode(), GROUP_METRIC_LAG, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_GROUP.getCode(), GROUP_METRIC_STATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_GROUP.getCode(), GROUP_METRIC_HEALTH_STATE, true)); - - // broker - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_HEALTH_STATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_CONNECTION_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_MESSAGE_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_NETWORK_RPO_AVG_IDLE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_REQ_AVG_IDLE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_TOTAL_PRODUCE_REQ, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_TOTAL_REQ_QUEUE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_TOTAL_RES_QUEUE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_LEADERS_SKEW, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_UNDER_REPLICATE_PARTITION, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_PARTITIONS_SKEW, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_BYTES_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_BYTES_OUT, true)); - - // zookeeper - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_HEALTH_STATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_HEALTH_CHECK_PASSED, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_HEALTH_CHECK_TOTAL, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_MAX_REQUEST_LATENCY, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_OUTSTANDING_REQUESTS, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_NODE_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_WATCH_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_NUM_ALIVE_CONNECTIONS, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_PACKETS_RECEIVED, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_PACKETS_SENT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_EPHEMERALS_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_APPROXIMATE_DATA_SIZE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_OPEN_FILE_DESCRIPTOR_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_KAFKA_ZK_DISCONNECTS_PER_SEC, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_KAFKA_ZK_SYNC_CONNECTS_PER_SEC, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_ZOOKEEPER.getCode(), ZOOKEEPER_METRIC_KAFKA_ZK_REQUEST_LATENCY_99TH, true)); - - // mm2 - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_BYTE_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_BYTE_RATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_RECORD_AGE_MS_MAX, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_RECORD_COUNT, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_RECORD_RATE, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_CONNECT_MIRROR_MAKER.getCode(), MIRROR_MAKER_METRIC_REPLICATION_LATENCY_MS_MAX, true)); - } - - @Autowired - private ClusterPhyService clusterPhyService; - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private ConfigService configService; - - @Override - public Result> listAllVersionItem() { - List allVersionItemVO = new ArrayList<>(); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_TOPIC.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CLUSTER.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_GROUP.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_BROKER.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_PARTITION.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_REPLICATION.getCode()), VersionItemVO.class)); - - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_ZOOKEEPER.getCode()), VersionItemVO.class)); - - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_CLUSTER.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_CONNECTOR.getCode()), VersionItemVO.class)); - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_MIRROR_MAKER.getCode()), VersionItemVO.class)); - - allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(WEB_OP.getCode()), VersionItemVO.class)); - - Map map = allVersionItemVO.stream().collect( - Collectors.toMap( - u -> u.getType() + "@" + u.getName(), - Function.identity(), - (v1, v2) -> v1) - ); - - return Result.buildSuc(map); - } - - @Override - public Result> listAllKafkaVersions() { - return Result.buildSuc(VersionEnum.allVersionsWithOutMax()); - } - - @Override - public Result> listKafkaClusterVersionControlItem(Long clusterId, Integer type) { - List allItem = versionControlService.listVersionControlItem(type); - List versionItemVOS = new ArrayList<>(); - - String versionStr = clusterPhyService.getVersionFromCacheFirst(clusterId); - - for (VersionControlItem item : allItem){ - VersionItemVO itemVO = ConvertUtil.obj2Obj(item, VersionItemVO.class); - boolean support = versionControlService.isClusterSupport(versionStr, item); - - itemVO.setSupport(support); - itemVO.setDesc(itemSupportDesc(item, support)); - - versionItemVOS.add(itemVO); - } - - return Result.buildSuc(versionItemVOS); - } - - @Override - public Result> listUserMetricItem(Long clusterId, Integer type, String operator) { - Result> ret = listKafkaClusterVersionControlItem(clusterId, type); - if(null == ret || ret.failed()){ - return Result.buildFail(); - } - - List userMetricConfigVOS = new ArrayList<>(); - List allVersionItemVOs = ret.getData(); - Set userMetricConfigs = getUserMetricConfig(operator); - - Map userMetricConfigMap = userMetricConfigs.stream().collect( - Collectors.toMap(u -> u.getType() + "@" + u.getMetric(), Function.identity() )); - - for(VersionItemVO itemVO : allVersionItemVOs){ - UserMetricConfigVO userMetricConfigVO = new UserMetricConfigVO(); - - int itemType = itemVO.getType(); - String metric = itemVO.getName(); - - UserMetricConfig umc = userMetricConfigMap.get(itemType + "@" + metric); - userMetricConfigVO.setSet(null != umc && umc.isSet()); - if (umc != null) { - userMetricConfigVO.setRank(umc.getRank()); - } - userMetricConfigVO.setName(itemVO.getName()); - userMetricConfigVO.setType(itemVO.getType()); - userMetricConfigVO.setDesc(itemVO.getDesc()); - userMetricConfigVO.setMinVersion(itemVO.getMinVersion()); - userMetricConfigVO.setMaxVersion(itemVO.getMaxVersion()); - userMetricConfigVO.setSupport(itemVO.getSupport()); - - userMetricConfigVOS.add(userMetricConfigVO); - } - - LOGGER.debug("method=listUserMetricItem||clusterId={}||type={}||operator={}||userMetricConfigs={}||userMetricConfigVO={}", - clusterId, type, operator, JSON.toJSONString(userMetricConfigs), JSON.toJSONString(userMetricConfigVOS)); - - return Result.buildSuc(userMetricConfigVOS); - } - - @Override - public Result updateUserMetricItem(Long clusterId, Integer type, UserMetricConfigDTO dto, String operator) { - Map metricsSetMap = dto.getMetricsSet(); - - //转换metricDetailDTOList - List metricDetailDTOList = dto.getMetricDetailDTOList(); - Map metricDetailMap = new HashMap<>(); - if (metricDetailDTOList != null && !metricDetailDTOList.isEmpty()) { - metricDetailMap = metricDetailDTOList.stream().collect(Collectors.toMap(MetricDetailDTO::getMetric, Function.identity())); - } - - //转换metricsSetMap - if (metricsSetMap != null && !metricsSetMap.isEmpty()) { - for (Map.Entry metricAndShowEntry : metricsSetMap.entrySet()) { - if (metricDetailMap.containsKey(metricAndShowEntry.getKey())) continue; - metricDetailMap.put(metricAndShowEntry.getKey(), new MetricDetailDTO(metricAndShowEntry.getKey(), metricAndShowEntry.getValue(), null)); - } - } - - if (metricDetailMap.isEmpty()) { - return Result.buildSuc(); - } - - Set userMetricConfigs = getUserMetricConfig(operator); - for (MetricDetailDTO metricDetailDTO : metricDetailMap.values()) { - UserMetricConfig userMetricConfig = new UserMetricConfig(type, metricDetailDTO.getMetric(), metricDetailDTO.getSet(), metricDetailDTO.getRank()); - userMetricConfigs.remove(userMetricConfig); - userMetricConfigs.add(userMetricConfig); - } - - ConfigDTO configDTO = new ConfigDTO(); - configDTO.setValueGroup(CONFIG_GROUP); - configDTO.setValueName(operator); - configDTO.setValue(JSON.toJSONString(userMetricConfigs)); - configDTO.setOperator(operator); - configDTO.setStatus(1); - - com.didiglobal.logi.security.common.Result result = configService.editConfig(configDTO, operator); - - - LOGGER.debug("method=updateUserMetricItem||clusterId={}||type={}||operator={}||userMetricConfigs={}||metricsSetMap={}", - clusterId, type, operator, JSON.toJSONString(userMetricConfigs), JSON.toJSONString(metricsSetMap)); - - return Result.build(result.successed()); - } - - /**************************************************** private method ****************************************************/ - - private String itemSupportDesc(VersionControlItem item, boolean support){ - if(support){return item.getDesc();} - - boolean bMaxVersion = (item.getMaxVersion() == V_MAX.getVersionL().longValue()); - - String minVersion = VersionUtil.dNormailze(item.getMinVersion()); - String maxVersion = VersionUtil.dNormailze(item.getMaxVersion()); - - if(bMaxVersion){ - return item.getDesc() + String.format(NOT_SUPPORT_DESC, minVersion); - } - - return item.getDesc() + String.format(NOT_SUPPORT_DESC1, minVersion, maxVersion); - } - - private Set getUserMetricConfig(String operator){ - String value = configService.stringSetting(CONFIG_GROUP, operator, ""); - if(StringUtils.isEmpty(value)){ - return defaultMetrics; - } - - return JSON.parseObject(value, new TypeReference>() {}); - } - - public static void main(String[] args){ - Set defaultMetrics = new HashSet<>(); - - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_BYTES_IN, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_MESSAGES, true)); - defaultMetrics.add(new UserMetricConfig(METRIC_TOPIC.getCode(), TOPIC_METRIC_MESSAGES, true)); - - String value = JSON.toJSONString(defaultMetrics); - - Set userMetricConfigs = JSON.parseObject(value, new TypeReference>(){}); - - System.out.println(value); - } -} diff --git a/km-collector/pom.xml b/km-collector/pom.xml deleted file mode 100644 index e1fc023d..00000000 --- a/km-collector/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - com.xiaojukeji.kafka - km-collector - ${km.revision} - jar - - - km - com.xiaojukeji.kafka - ${km.revision} - - - - - com.xiaojukeji.kafka - km-common - ${project.parent.version} - - - com.xiaojukeji.kafka - km-core - ${project.parent.version} - - - org.springframework - spring-webmvc - - - \ No newline at end of file diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/AbstractMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/AbstractMetricCollector.java deleted file mode 100644 index ceb1fbff..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/AbstractMetricCollector.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric; - -import com.xiaojukeji.know.streaming.km.collector.service.CollectThreadPoolService; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent; -import com.xiaojukeji.know.streaming.km.common.component.SpringTool; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import org.springframework.beans.factory.annotation.Autowired; - - - -/** - * @author didi - */ -public abstract class AbstractMetricCollector { - public abstract String getClusterVersion(C c); - - public abstract VersionItemTypeEnum collectorType(); - - @Autowired - private CollectThreadPoolService collectThreadPoolService; - - public abstract void collectMetrics(C c); - - protected FutureWaitUtil getFutureUtilByClusterPhyId(Long clusterPhyId) { - return collectThreadPoolService.selectSuitableFutureUtil(clusterPhyId * 1000L + this.collectorType().getCode()); - } - - protected void publishMetric(T event){ - SpringTool.publish(event); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/AbstractConnectMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/AbstractConnectMetricCollector.java deleted file mode 100644 index 78ca717c..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/AbstractConnectMetricCollector.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.LoggerUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -/** - * @author didi - */ -public abstract class AbstractConnectMetricCollector extends AbstractMetricCollector { - private static final ILog LOGGER = LogFactory.getLog(AbstractConnectMetricCollector.class); - - protected static final ILog METRIC_COLLECTED_LOGGER = LoggerUtil.getMetricCollectedLogger(); - - @Autowired - private ConnectClusterService connectClusterService; - - public abstract List collectConnectMetrics(ConnectCluster connectCluster); - - @Override - public String getClusterVersion(ConnectCluster connectCluster){ - return connectClusterService.getClusterVersion(connectCluster.getId()); - } - - @Override - public void collectMetrics(ConnectCluster connectCluster) { - long startTime = System.currentTimeMillis(); - - // 采集指标 - List metricsList = this.collectConnectMetrics(connectCluster); - - // 输出耗时信息 - LOGGER.info( - "metricType={}||connectClusterId={}||costTimeUnitMs={}", - this.collectorType().getMessage(), connectCluster.getId(), System.currentTimeMillis() - startTime - ); - - // 输出采集到的指标信息 - METRIC_COLLECTED_LOGGER.debug("metricType={}||connectClusterId={}||metrics={}!", - this.collectorType().getMessage(), connectCluster.getId(), ConvertUtil.obj2Json(metricsList) - ); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectClusterMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectClusterMetricCollector.java deleted file mode 100644 index df463ea1..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectClusterMetricCollector.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectClusterMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectClusterMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterMetricService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.List; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CONNECT_CLUSTER; - -/** - * @author didi - */ -@Component -public class ConnectClusterMetricCollector extends AbstractConnectMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(ConnectClusterMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private ConnectClusterMetricService connectClusterMetricService; - - @Override - public List collectConnectMetrics(ConnectCluster connectCluster) { - Long startTime = System.currentTimeMillis(); - Long clusterPhyId = connectCluster.getKafkaClusterPhyId(); - Long connectClusterId = connectCluster.getId(); - - ConnectClusterMetrics metrics = new ConnectClusterMetrics(clusterPhyId, connectClusterId); - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - List items = versionControlService.listVersionControlItem(getClusterVersion(connectCluster), collectorType().getCode()); - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(connectClusterId); - - for (VersionControlItem item : items) { - future.runnableTask( - String.format("class=ConnectClusterMetricCollector||connectClusterId=%d||metricName=%s", connectClusterId, item.getName()), - 30000, - () -> { - try { - Result ret = connectClusterMetricService.collectConnectClusterMetricsFromKafka(connectClusterId, item.getName()); - if (null == ret || !ret.hasData()) { - return null; - } - metrics.putMetric(ret.getData().getMetrics()); - - } catch (Exception e) { - LOGGER.error( - "method=collectConnectMetrics||connectClusterId={}||metricName={}||errMsg=exception!", - connectClusterId, item.getName(), e - ); - } - return null; - } - ); - } - - future.waitExecute(30000); - - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - - this.publishMetric(new ConnectClusterMetricEvent(this, Collections.singletonList(metrics))); - - return Collections.singletonList(metrics); - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_CONNECT_CLUSTER; - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectConnectorMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectConnectorMetricCollector.java deleted file mode 100644 index 4da6d8fd..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/ConnectConnectorMetricCollector.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectorMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorMetricService; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CONNECT_CONNECTOR; - -/** - * @author didi - */ -@Component -public class ConnectConnectorMetricCollector extends AbstractConnectMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(ConnectConnectorMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private ConnectorService connectorService; - - @Autowired - private ConnectorMetricService connectorMetricService; - - @Override - public List collectConnectMetrics(ConnectCluster connectCluster) { - Long clusterPhyId = connectCluster.getKafkaClusterPhyId(); - Long connectClusterId = connectCluster.getId(); - - List items = versionControlService.listVersionControlItem(this.getClusterVersion(connectCluster), collectorType().getCode()); - Result> connectorList = connectorService.listConnectorsFromCluster(connectClusterId); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(connectClusterId); - - List metricsList = new ArrayList<>(); - for (String connectorName : connectorList.getData()) { - ConnectorMetrics metrics = new ConnectorMetrics(connectClusterId, connectorName); - metrics.setClusterPhyId(clusterPhyId); - - metricsList.add(metrics); - future.runnableTask( - String.format("class=ConnectConnectorMetricCollector||connectClusterId=%d||connectorName=%s", connectClusterId, connectorName), - 30000, - () -> collectMetrics(connectClusterId, connectorName, metrics, items) - ); - } - future.waitResult(30000); - - this.publishMetric(new ConnectorMetricEvent(this, metricsList)); - - return metricsList; - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_CONNECT_CONNECTOR; - } - - /**************************************************** private method ****************************************************/ - - private void collectMetrics(Long connectClusterId, String connectorName, ConnectorMetrics metrics, List items) { - long startTime = System.currentTimeMillis(); - ConnectorTypeEnum connectorType = connectorService.getConnectorType(connectClusterId, connectorName); - - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - - for (VersionControlItem v : items) { - try { - //过滤已测得指标 - if (metrics.getMetrics().get(v.getName()) != null) { - continue; - } - - Result ret = connectorMetricService.collectConnectClusterMetricsFromKafka(connectClusterId, connectorName, v.getName(), connectorType); - if (null == ret || ret.failed() || null == ret.getData()) { - continue; - } - - metrics.putMetric(ret.getData().getMetrics()); - } catch (Exception e) { - LOGGER.error( - "method=collectMetrics||connectClusterId={}||connectorName={}||metric={}||errMsg=exception!", - connectClusterId, connectorName, v.getName(), e - ); - } - } - - // 记录采集性能 - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/mm2/MirrorMakerMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/mm2/MirrorMakerMetricCollector.java deleted file mode 100644 index 36436fba..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/connect/mm2/MirrorMakerMetricCollector.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.connect.mm2; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.metric.connect.AbstractConnectMetricCollector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.mm2.MirrorMakerTopic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.mm2.MirrorMakerMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.mm2.MirrorMakerMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService; -import com.xiaojukeji.know.streaming.km.core.service.connect.mm2.MirrorMakerMetricService; -import com.xiaojukeji.know.streaming.km.core.service.connect.mm2.MirrorMakerService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant.MIRROR_MAKER_SOURCE_CONNECTOR_TYPE; -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CONNECT_MIRROR_MAKER; - -/** - * @author wyb - * @date 2022/12/15 - */ -@Component -public class MirrorMakerMetricCollector extends AbstractConnectMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(MirrorMakerMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private MirrorMakerService mirrorMakerService; - - @Autowired - private ConnectorService connectorService; - - @Autowired - private MirrorMakerMetricService mirrorMakerMetricService; - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_CONNECT_MIRROR_MAKER; - } - - @Override - public List collectConnectMetrics(ConnectCluster connectCluster) { - Long clusterPhyId = connectCluster.getKafkaClusterPhyId(); - Long connectClusterId = connectCluster.getId(); - - List mirrorMakerList = connectorService.listByConnectClusterIdFromDB(connectClusterId).stream().filter(elem -> elem.getConnectorClassName().equals(MIRROR_MAKER_SOURCE_CONNECTOR_TYPE)).collect(Collectors.toList()); - Map mirrorMakerTopicMap = mirrorMakerService.getMirrorMakerTopicMap(connectClusterId).getData(); - - List items = versionControlService.listVersionControlItem(this.getClusterVersion(connectCluster), collectorType().getCode()); - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - List metricsList = new ArrayList<>(); - - for (ConnectorPO mirrorMaker : mirrorMakerList) { - MirrorMakerMetrics metrics = new MirrorMakerMetrics(clusterPhyId, connectClusterId, mirrorMaker.getConnectorName()); - metricsList.add(metrics); - - List mirrorMakerTopicList = mirrorMakerService.getMirrorMakerTopicList(mirrorMaker, mirrorMakerTopicMap); - future.runnableTask(String.format("class=MirrorMakerMetricCollector||connectClusterId=%d||mirrorMakerName=%s", connectClusterId, mirrorMaker.getConnectorName()), - 30000, - () -> collectMetrics(connectClusterId, mirrorMaker.getConnectorName(), metrics, items, mirrorMakerTopicList)); - } - future.waitResult(30000); - - this.publishMetric(new MirrorMakerMetricEvent(this,metricsList)); - - return metricsList; - } - - /**************************************************** private method ****************************************************/ - private void collectMetrics(Long connectClusterId, String mirrorMakerName, MirrorMakerMetrics metrics, List items, List mirrorMakerTopicList) { - long startTime = System.currentTimeMillis(); - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - - for (VersionControlItem v : items) { - try { - //已测量指标过滤 - if (metrics.getMetrics().get(v.getName()) != null) { - continue; - } - - Result ret = mirrorMakerMetricService.collectMirrorMakerMetricsFromKafka(connectClusterId, mirrorMakerName, mirrorMakerTopicList, v.getName()); - if (ret == null || !ret.hasData()) { - continue; - } - metrics.putMetric(ret.getData().getMetrics()); - - } catch (Exception e) { - LOGGER.error( - "method=collectMetrics||connectClusterId={}||mirrorMakerName={}||metric={}||errMsg=exception!", - connectClusterId, mirrorMakerName, v.getName(), e - ); - - } - } - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - - } -} - - - diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/AbstractKafkaMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/AbstractKafkaMetricCollector.java deleted file mode 100644 index 4c995cfb..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/AbstractKafkaMetricCollector.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.LoggerUtil; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -/** - * @author didi - */ -public abstract class AbstractKafkaMetricCollector extends AbstractMetricCollector { - private static final ILog LOGGER = LogFactory.getLog(AbstractMetricCollector.class); - - protected static final ILog METRIC_COLLECTED_LOGGER = LoggerUtil.getMetricCollectedLogger(); - - @Autowired - private ClusterPhyService clusterPhyService; - - public abstract List collectKafkaMetrics(ClusterPhy clusterPhy); - - @Override - public String getClusterVersion(ClusterPhy clusterPhy){ - return clusterPhyService.getVersionFromCacheFirst(clusterPhy.getId()); - } - - @Override - public void collectMetrics(ClusterPhy clusterPhy) { - long startTime = System.currentTimeMillis(); - - // 采集指标 - List metricsList = this.collectKafkaMetrics(clusterPhy); - - // 输出耗时信息 - LOGGER.info( - "metricType={}||clusterPhyId={}||costTimeUnitMs={}", - this.collectorType().getMessage(), clusterPhy.getId(), System.currentTimeMillis() - startTime - ); - - // 输出采集到的指标信息 - METRIC_COLLECTED_LOGGER.debug("metricType={}||clusterPhyId={}||metrics={}!", - this.collectorType().getMessage(), clusterPhy.getId(), ConvertUtil.obj2Json(metricsList) - ); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/BrokerMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/BrokerMetricCollector.java deleted file mode 100644 index 6ae2a063..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/BrokerMetricCollector.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BrokerMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BrokerMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerMetricService; -import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_BROKER; - -/** - * @author didi - */ -@Component -public class BrokerMetricCollector extends AbstractKafkaMetricCollector { - private static final ILog LOGGER = LogFactory.getLog(BrokerMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private BrokerMetricService brokerMetricService; - - @Autowired - private BrokerService brokerService; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long clusterPhyId = clusterPhy.getId(); - - List brokers = brokerService.listAliveBrokersFromDB(clusterPhy.getId()); - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - List metricsList = new ArrayList<>(); - for(Broker broker : brokers) { - BrokerMetrics metrics = new BrokerMetrics(clusterPhyId, broker.getBrokerId(), broker.getHost(), broker.getPort()); - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - metricsList.add(metrics); - - future.runnableTask( - String.format("class=BrokerMetricCollector||clusterPhyId=%d||brokerId=%d", clusterPhyId, broker.getBrokerId()), - 30000, - () -> collectMetrics(clusterPhyId, metrics, items) - ); - } - - future.waitExecute(30000); - this.publishMetric(new BrokerMetricEvent(this, metricsList)); - - return metricsList; - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_BROKER; - } - - /**************************************************** private method ****************************************************/ - - private void collectMetrics(Long clusterPhyId, BrokerMetrics metrics, List items) { - long startTime = System.currentTimeMillis(); - - for(VersionControlItem v : items) { - try { - if(metrics.getMetrics().containsKey(v.getName())) { - continue; - } - - Result ret = brokerMetricService.collectBrokerMetricsFromKafkaWithCacheFirst(clusterPhyId, metrics.getBrokerId(), v.getName()); - if(null == ret || ret.failed() || null == ret.getData()){ - continue; - } - - metrics.putMetric(ret.getData().getMetrics()); - } catch (Exception e){ - LOGGER.error( - "method=collectMetrics||clusterPhyId={}||brokerId={}||metricName={}||errMsg=exception!", - clusterPhyId, metrics.getBrokerId(), v.getName(), e - ); - } - } - - // 记录采集性能 - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ClusterMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ClusterMetricCollector.java deleted file mode 100644 index f918a0d5..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ClusterMetricCollector.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.ClusterMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterMetricService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.List; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CLUSTER; - -/** - * @author didi - */ -@Component -public class ClusterMetricCollector extends AbstractKafkaMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(ClusterMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private ClusterMetricService clusterMetricService; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long startTime = System.currentTimeMillis(); - Long clusterPhyId = clusterPhy.getId(); - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - - ClusterMetrics metrics = new ClusterMetrics(clusterPhyId, clusterPhy.getKafkaVersion()); - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - for(VersionControlItem v : items) { - future.runnableTask( - String.format("class=ClusterMetricCollector||clusterPhyId=%d||metricName=%s", clusterPhyId, v.getName()), - 30000, - () -> { - try { - if(null != metrics.getMetrics().get(v.getName())){ - return null; - } - - Result ret = clusterMetricService.collectClusterMetricsFromKafka(clusterPhyId, v.getName()); - if(null == ret || ret.failed() || null == ret.getData()){ - return null; - } - - metrics.putMetric(ret.getData().getMetrics()); - } catch (Exception e){ - LOGGER.error( - "method=collectKafkaMetrics||clusterPhyId={}||metricName={}||errMsg=exception!", - clusterPhyId, v.getName(), e - ); - } - - return null; - }); - } - - future.waitExecute(30000); - - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - - publishMetric(new ClusterMetricEvent(this, Collections.singletonList(metrics))); - - return Collections.singletonList(metrics); - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_CLUSTER; - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/GroupMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/GroupMetricCollector.java deleted file mode 100644 index 5e04466f..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/GroupMetricCollector.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.GroupMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.group.GroupMetricService; -import com.xiaojukeji.know.streaming.km.core.service.group.GroupService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.apache.kafka.common.TopicPartition; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_GROUP; - -/** - * @author didi - */ -@Component -public class GroupMetricCollector extends AbstractKafkaMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(GroupMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private GroupMetricService groupMetricService; - - @Autowired - private GroupService groupService; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long clusterPhyId = clusterPhy.getId(); - - List groupNameList = new ArrayList<>(); - try { - groupNameList = groupService.listGroupsFromKafka(clusterPhy); - } catch (Exception e) { - LOGGER.error("method=collectKafkaMetrics||clusterPhyId={}||msg=exception!", clusterPhyId, e); - } - - if(ValidateUtils.isEmptyList(groupNameList)) { - return Collections.emptyList(); - } - - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - Map> metricsMap = new ConcurrentHashMap<>(); - for(String groupName : groupNameList) { - future.runnableTask( - String.format("class=GroupMetricCollector||clusterPhyId=%d||groupName=%s", clusterPhyId, groupName), - 30000, - () -> collectMetrics(clusterPhyId, groupName, metricsMap, items)); - } - - future.waitResult(30000); - - List metricsList = metricsMap.values().stream().collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll); - - publishMetric(new GroupMetricEvent(this, metricsList)); - return metricsList; - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_GROUP; - } - - /**************************************************** private method ****************************************************/ - - private void collectMetrics(Long clusterPhyId, String groupName, Map> metricsMap, List items) { - long startTime = System.currentTimeMillis(); - - Map subMetricMap = new HashMap<>(); - - GroupMetrics groupMetrics = new GroupMetrics(clusterPhyId, groupName, true); - groupMetrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - - for(VersionControlItem v : items) { - try { - String metricName = v.getName(); - - Result> ret = groupMetricService.collectGroupMetricsFromKafka(clusterPhyId, groupName, metricName); - if(null == ret || ret.failed() || ValidateUtils.isEmptyList(ret.getData())) { - continue; - } - - ret.getData().forEach(metrics -> { - if (metrics.isBGroupMetric()) { - groupMetrics.putMetric(metrics.getMetrics()); - return; - } - - TopicPartition tp = new TopicPartition(metrics.getTopic(), metrics.getPartitionId()); - subMetricMap.putIfAbsent(tp, new GroupMetrics(clusterPhyId, metrics.getPartitionId(), metrics.getTopic(), groupName, false)); - subMetricMap.get(tp).putMetric(metrics.getMetrics()); - }); - } catch (Exception e) { - LOGGER.error( - "method=collectMetrics||clusterPhyId={}||groupName={}||errMsg=exception!", - clusterPhyId, groupName, e - ); - } - } - - List metricsList = new ArrayList<>(); - metricsList.add(groupMetrics); - metricsList.addAll(subMetricMap.values()); - - // 记录采集性能 - groupMetrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - - metricsMap.put(groupName, metricsList); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/PartitionMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/PartitionMetricCollector.java deleted file mode 100644 index 30d2cf4b..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/PartitionMetricCollector.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.PartitionMetricEvent; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionMetricService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_PARTITION; - -/** - * @author didi - */ -@Component -public class PartitionMetricCollector extends AbstractKafkaMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(PartitionMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private PartitionMetricService partitionMetricService; - - @Autowired - private TopicService topicService; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long clusterPhyId = clusterPhy.getId(); - List topicList = topicService.listTopicsFromCacheFirst(clusterPhyId); - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - Map> metricsMap = new ConcurrentHashMap<>(); - for (Topic topic : topicList) { - metricsMap.put(topic.getTopicName(), new ConcurrentHashMap<>()); - - future.runnableTask( - String.format("class=PartitionMetricCollector||clusterPhyId=%d||topicName=%s", clusterPhyId, topic.getTopicName()), - 30000, - () -> this.collectMetrics(clusterPhyId, topic.getTopicName(), metricsMap.get(topic.getTopicName()), items) - ); - } - - future.waitExecute(30000); - - List metricsList = new ArrayList<>(); - metricsMap.values().forEach(elem -> metricsList.addAll(elem.values())); - - this.publishMetric(new PartitionMetricEvent(this, metricsList)); - - return metricsList; - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_PARTITION; - } - - /**************************************************** private method ****************************************************/ - - private void collectMetrics(Long clusterPhyId, String topicName, Map metricsMap, List items) { - Set collectedMetricsNameSet = new HashSet<>(); - for (VersionControlItem v : items) { - try { - if (collectedMetricsNameSet.contains(v.getName())) { - // 指标已存在 - continue; - } - collectedMetricsNameSet.add(v.getName()); - - Result> ret = partitionMetricService.collectPartitionsMetricsFromKafkaWithCache( - clusterPhyId, - topicName, - v.getName() - ); - if (null == ret || ret.failed() || null == ret.getData() || ret.getData().isEmpty()) { - continue; - } - - // 记录已经采集的指标 - collectedMetricsNameSet.addAll(ret.getData().get(0).getMetrics().keySet()); - - // 放到map中 - for (PartitionMetrics subMetrics: ret.getData()) { - metricsMap.putIfAbsent(subMetrics.getPartitionId(), subMetrics); - PartitionMetrics allMetrics = metricsMap.get(subMetrics.getPartitionId()); - allMetrics.putMetric(subMetrics.getMetrics()); - } - } catch (Exception e) { - LOGGER.info( - "method=collectMetrics||clusterPhyId={}||topicName={}||metricName={}||errMsg=exception", - clusterPhyId, topicName, v.getName(), e - ); - } - } - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/TopicMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/TopicMetricCollector.java deleted file mode 100644 index 3cd16a20..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/TopicMetricCollector.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.TopicMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicMetricService; -import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_TOPIC; - -/** - * @author didi - */ -@Component -public class TopicMetricCollector extends AbstractKafkaMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(TopicMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private TopicService topicService; - - @Autowired - private TopicMetricService topicMetricService; - - private static final Integer AGG_METRICS_BROKER_ID = -10000; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long clusterPhyId = clusterPhy.getId(); - List topics = topicService.listTopicsFromCacheFirst(clusterPhyId); - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - - FutureWaitUtil future = this.getFutureUtilByClusterPhyId(clusterPhyId); - - Map> allMetricsMap = new ConcurrentHashMap<>(); - - for(Topic topic : topics) { - Map metricsMap = new ConcurrentHashMap<>(); - metricsMap.put(AGG_METRICS_BROKER_ID, new TopicMetrics(topic.getTopicName(), clusterPhyId)); - metricsMap.get(AGG_METRICS_BROKER_ID).putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - - allMetricsMap.put(topic.getTopicName(), metricsMap); - - future.runnableTask( - String.format("class=TopicMetricCollector||clusterPhyId=%d||topicName=%s", clusterPhyId, topic.getTopicName()), - 30000, - () -> collectMetrics(clusterPhyId, topic.getTopicName(), metricsMap, items) - ); - } - - future.waitExecute(30000); - - List metricsList = new ArrayList<>(); - allMetricsMap.values().forEach(elem -> metricsList.addAll(elem.values())); - - this.publishMetric(new TopicMetricEvent(this, metricsList)); - - return metricsList; - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_TOPIC; - } - - /**************************************************** private method ****************************************************/ - - private void collectMetrics(Long clusterPhyId, String topicName, Map metricsMap, List items) { - long startTime = System.currentTimeMillis(); - - TopicMetrics aggMetrics = metricsMap.get(AGG_METRICS_BROKER_ID); - for (VersionControlItem v : items) { - try { - if (aggMetrics.getMetrics().containsKey(v.getName())) { - // 如果已经有该指标,则直接continue - continue; - } - - Result> ret = topicMetricService.collectTopicMetricsFromKafkaWithCacheFirst(clusterPhyId, topicName, v.getName()); - if (null == ret || ret.failed() || ValidateUtils.isEmptyList(ret.getData())) { - // 返回为空、错误、无数据的情况下,直接跳过 - continue; - } - - // 记录数据 - ret.getData().stream().forEach(metrics -> { - if (metrics.isBBrokerAgg()) { - aggMetrics.putMetric(metrics.getMetrics()); - } else { - metricsMap.putIfAbsent( - metrics.getBrokerId(), - new TopicMetrics(topicName, clusterPhyId, metrics.getBrokerId(), false) - ); - - metricsMap.get(metrics.getBrokerId()).putMetric(metrics.getMetrics()); - } - }); - } catch (Exception e) { - LOGGER.error( - "method=collectMetrics||clusterPhyId={}||topicName={}||metricName={}||errMsg=exception!", - clusterPhyId, topicName, v.getName(), e - ); - } - } - - // 记录采集性能 - aggMetrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ZookeeperMetricCollector.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ZookeeperMetricCollector.java deleted file mode 100644 index 314bf728..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/metric/kafka/ZookeeperMetricCollector.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.metric.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkacontroller.KafkaController; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.ZookeeperMetricParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem; -import com.xiaojukeji.know.streaming.km.common.utils.Tuple; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.ZookeeperMetricEvent; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.ZookeeperInfo; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ZookeeperMetrics; -import com.xiaojukeji.know.streaming.km.core.service.kafkacontroller.KafkaControllerService; -import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService; -import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperMetricService; -import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_ZOOKEEPER; - -/** - * @author didi - */ -@Component -public class ZookeeperMetricCollector extends AbstractKafkaMetricCollector { - protected static final ILog LOGGER = LogFactory.getLog(ZookeeperMetricCollector.class); - - @Autowired - private VersionControlService versionControlService; - - @Autowired - private ZookeeperMetricService zookeeperMetricService; - - @Autowired - private ZookeeperService zookeeperService; - - @Autowired - private KafkaControllerService kafkaControllerService; - - @Override - public List collectKafkaMetrics(ClusterPhy clusterPhy) { - Long startTime = System.currentTimeMillis(); - Long clusterPhyId = clusterPhy.getId(); - List items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode()); - List aliveZKList = zookeeperService.listFromDBByCluster(clusterPhyId) - .stream() - .filter(elem -> Constant.ALIVE.equals(elem.getStatus())) - .collect(Collectors.toList()); - KafkaController kafkaController = kafkaControllerService.getKafkaControllerFromDB(clusterPhyId); - - ZookeeperMetrics metrics = ZookeeperMetrics.initWithMetric(clusterPhyId, Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME); - if (ValidateUtils.isEmptyList(aliveZKList)) { - // 没有存活的ZK时,发布事件,然后直接返回 - publishMetric(new ZookeeperMetricEvent(this, Collections.singletonList(metrics))); - return Collections.singletonList(metrics); - } - - // 构造参数 - ZookeeperMetricParam param = new ZookeeperMetricParam( - clusterPhyId, - aliveZKList.stream().map(elem -> new Tuple(elem.getHost(), elem.getPort())).collect(Collectors.toList()), - ConvertUtil.str2ObjByJson(clusterPhy.getZkProperties(), ZKConfig.class), - kafkaController == null? Constant.INVALID_CODE: kafkaController.getBrokerId(), - null - ); - - for(VersionControlItem v : items) { - try { - if(null != metrics.getMetrics().get(v.getName())) { - continue; - } - - param.setMetricName(v.getName()); - - Result ret = zookeeperMetricService.collectMetricsFromZookeeper(param); - if(null == ret || ret.failed() || null == ret.getData()){ - continue; - } - - metrics.putMetric(ret.getData().getMetrics()); - } catch (Exception e){ - LOGGER.error( - "method=collectMetrics||clusterPhyId={}||metricName={}||errMsg=exception!", - clusterPhyId, v.getName(), e - ); - } - } - - metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f); - - this.publishMetric(new ZookeeperMetricEvent(this, Collections.singletonList(metrics))); - - return Collections.singletonList(metrics); - } - - @Override - public VersionItemTypeEnum collectorType() { - return METRIC_ZOOKEEPER; - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/service/CollectThreadPoolService.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/service/CollectThreadPoolService.java deleted file mode 100644 index f5d3c496..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/service/CollectThreadPoolService.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.service; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils; -import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicLong; - -@Service -public class CollectThreadPoolService { - private static final ILog LOGGER = LogFactory.getLog(CollectThreadPoolService.class); - - private final AtomicLong shardIdx = new AtomicLong(0L); - - @Value(value = "${thread-pool.collector.future-util.num:1}") - private Integer futureUtilNum; - - @Value(value = "${thread-pool.collector.future-util.thread-num:8}") - private Integer futureUtilThreadNum; - - @Value(value = "${thread-pool.collector.future-util.queue-size:10000}") - private Integer futureUtilQueueSize; - - @Value(value = "${thread-pool.collector.future-util.select-suitable-enable:true}") - private Boolean futureUtilSelectSuitableEnable; - - @Value(value = "${thread-pool.collector.future-util.suitable-queue-size:5000}") - private Integer futureUtilSuitableQueueSize; - - private static final Map> SHARD_ID_FUTURE_UTIL_MAP = new ConcurrentHashMap<>(); - - private static final Cache PHYSICAL_CLUSTER_ID_SHARD_ID_CACHE = Caffeine - .newBuilder() - .expireAfterWrite(16, TimeUnit.MINUTES) - .maximumSize(1000) - .build(); - - @PostConstruct - private void init() { - if (futureUtilNum <= 0) { - futureUtilNum = 1; - } - - // 初始化job线程池 - for (int idx = 0; idx < futureUtilNum; ++idx) { - closeOldAndCreateNew((long)idx); - } - } - - public FutureWaitUtil selectSuitableFutureUtil(Long clusterPhyId) { - // 获取集群对应的shardId - Long shardId = this.getShardId(clusterPhyId); - - return SHARD_ID_FUTURE_UTIL_MAP.get(shardId); - } - - /**************************************************** private method ****************************************************/ - - private Long getShardId(Long clusterPhyId) { - Long shardId = PHYSICAL_CLUSTER_ID_SHARD_ID_CACHE.getIfPresent(clusterPhyId); - if (shardId == null) { - shardId = shardIdx.incrementAndGet() % this.futureUtilNum; - } - - PHYSICAL_CLUSTER_ID_SHARD_ID_CACHE.put(clusterPhyId, shardId); - return shardId; - } - - /**************************************************** schedule flush method ****************************************************/ - - @Scheduled(cron="0 0/5 * * * ?") - public void flush() { - // 每个shard对应的集群ID,这里使用cache的原因是,需要将长期不使用的集群过滤掉 - Map> shardIdPhysicalClusterIdListMap = new HashMap<>(); - for (Map.Entry entry: PHYSICAL_CLUSTER_ID_SHARD_ID_CACHE.asMap().entrySet()) { - shardIdPhysicalClusterIdListMap.putIfAbsent(entry.getValue(), new ArrayList<>()); - shardIdPhysicalClusterIdListMap.get(entry.getValue()).add(entry.getKey()); - } - - // 集群在线程池的分布信息 - StringBuilder sb = new StringBuilder(); - for (Map.Entry> entry: SHARD_ID_FUTURE_UTIL_MAP.entrySet()) { - // 释放被canceled的任务 - entry.getValue().purgeExecutor(); - - sb.append("shardId:").append(entry.getKey()); - sb.append(" queueSize:").append(entry.getValue().getExecutorQueueSize()); - sb.append(" physicalClusterIdList:").append( - CommonUtils.longList2String(shardIdPhysicalClusterIdListMap.getOrDefault(entry.getKey(), new ArrayList<>())) - ); - sb.append("\t\t\t"); - if (entry.getValue().getExecutorQueueSize() >= this.futureUtilSuitableQueueSize) { - LOGGER.info("JobThreadPoolInfo\t\t\t shardId:{} queueSize:{} physicalClusterIdList:{}.", - entry.getKey(), - entry.getValue().getExecutorQueueSize(), - CommonUtils.longList2String(shardIdPhysicalClusterIdListMap.getOrDefault(entry.getKey(), new ArrayList<>())) - ); - } - } - LOGGER.info("JobThreadPoolInfo\t\t\t {}...", sb); - - try { - if (futureUtilSelectSuitableEnable != null && futureUtilSelectSuitableEnable) { - reBalancePhysicalClusterShard(shardIdPhysicalClusterIdListMap); - } - } catch (Exception e) { - LOGGER.error("rebalance job-thread-pool failed.", e); - } - } - - private void reBalancePhysicalClusterShard(Map> shardIdPhysicalClusterIdListMap) { - List withoutClusterShardIdList = new ArrayList<>(); // 无集群任务的线程池 - List idleShardIdList = new ArrayList<>(); // 空闲的线程池 - List notBusyShardIdList = new ArrayList<>(); // 不忙的线程池 - List busyShardIdList = new ArrayList<>(); // 忙的线程池 - List overflowShardIdList = new ArrayList<>(); // 已处理不过来的线程池 - - // 统计各类线程池信息 - for (Map.Entry> entry: shardIdPhysicalClusterIdListMap.entrySet()) { - Integer queueSize = SHARD_ID_FUTURE_UTIL_MAP.get(entry.getKey()).getExecutorQueueSize(); - if (entry.getValue().isEmpty()) { - withoutClusterShardIdList.add(entry.getKey()); - } - - if (queueSize == 0) { - // 队列为空 - idleShardIdList.add(entry.getKey()); - } else if (queueSize <= futureUtilSuitableQueueSize) { - // 队列较空闲 - notBusyShardIdList.add(entry.getKey()); - } else if (queueSize >= futureUtilSuitableQueueSize - 10) { - // 队列处理不过来 - overflowShardIdList.add(entry.getKey()); - } else { - // 队列忙 - busyShardIdList.add(entry.getKey()); - } - } - - // 将队列满的线程池的集群拆分到不同的线程池中 - this.moveShardClusterToSuitableThreadPool(overflowShardIdList, shardIdPhysicalClusterIdListMap, withoutClusterShardIdList, idleShardIdList, notBusyShardIdList, true); - - // 将busy队列的线程池的集群拆分到不同的线程池中 - this.moveShardClusterToSuitableThreadPool(busyShardIdList, shardIdPhysicalClusterIdListMap, withoutClusterShardIdList, idleShardIdList, notBusyShardIdList, false); - } - - private void moveShardClusterToSuitableThreadPool(List needMoveShardIdList, - Map> shardIdPhysicalClusterIdListMap, - List withoutClusterShardIdList, - List idleShardIdList, - List notBusyShardIdList, - boolean clearTaskIfFullAndOnlyOneCluster) { - for (Long needMoveShardId: needMoveShardIdList) { - List physicalClusterIdList = shardIdPhysicalClusterIdListMap.get(needMoveShardId); - if ((physicalClusterIdList == null || physicalClusterIdList.isEmpty() || physicalClusterIdList.size() == 1) && clearTaskIfFullAndOnlyOneCluster) { - // 仅一个集群,并且满了,则清空任务,重新跑任务 - closeOldAndCreateNew(needMoveShardId); - continue; - } - - if (physicalClusterIdList == null) { - // 无集群 - continue; - } - - for (int idx = 0; idx < physicalClusterIdList.size() - 1; ++idx) { - Long newSuitableShardId = this.selectAndEmptySuitableThreadPool(shardIdPhysicalClusterIdListMap, withoutClusterShardIdList, idleShardIdList, notBusyShardIdList); - if (newSuitableShardId == null) { - LOGGER.info("without suitable job-thread-pool and return."); - return; - } - - modifyPhysicalClusterIdAndShardIdCache(physicalClusterIdList.get(idx), newSuitableShardId); - } - } - } - - private Long selectAndEmptySuitableThreadPool(Map> shardIdPhysicalClusterIdListMap, - List withoutClusterShardIdList, - List idleShardIdList, - List notBusyShardIdList) { - if (!withoutClusterShardIdList.isEmpty()) { - // 先放入无集群任务的线程池 - return withoutClusterShardIdList.remove((int) 0); - } - - // 上一条件不满足时,优先放入比较空闲的池子 - Long newShardId = this.selectAndEmptySuitableThreadPool(shardIdPhysicalClusterIdListMap, idleShardIdList); - - // 上一条件不满足时,最后尝试放入不忙的池子 - return newShardId == null? this.selectAndEmptySuitableThreadPool(shardIdPhysicalClusterIdListMap, notBusyShardIdList): newShardId; - } - - private Long selectAndEmptySuitableThreadPool(Map> shardIdPhysicalClusterIdListMap, List taskThreadPoolList) { - if (taskThreadPoolList.size() < 2) { - // 没有空闲的线程池队列 - return null; - } - - // 将两个非忙的合并,空出一个新的交给需要的 - Long firstNotBusyShardId = taskThreadPoolList.remove((int) 0); - Long secondNotBusyShardId = taskThreadPoolList.remove((int) 0); - - List physicalClusterIdList = shardIdPhysicalClusterIdListMap.get(secondNotBusyShardId); - if (physicalClusterIdList == null || physicalClusterIdList.isEmpty()) { - return null; - } - - for (Long physicalClusterId: physicalClusterIdList) { - modifyPhysicalClusterIdAndShardIdCache(physicalClusterId, firstNotBusyShardId); - } - - return secondNotBusyShardId; - } - - private synchronized Long modifyPhysicalClusterIdAndShardIdCache(Long physicalClusterId, Long shardId) { - if (shardId == null) { - shardId = shardIdx.incrementAndGet() % futureUtilNum; - } - - PHYSICAL_CLUSTER_ID_SHARD_ID_CACHE.put(physicalClusterId, shardId); - return shardId; - } - - private synchronized FutureWaitUtil closeOldAndCreateNew(Long shardId) { - // 新的 - FutureWaitUtil newFutureUtil = FutureWaitUtil.init( - "MetricCollect-Shard-" + shardId, - this.futureUtilThreadNum, - this.futureUtilThreadNum, - this.futureUtilQueueSize - ); - - // 存储新的,返回旧的 - FutureWaitUtil oldFutureUtil = SHARD_ID_FUTURE_UTIL_MAP.put(shardId, newFutureUtil); - - // 为空,则直接返回 - if (oldFutureUtil == null) { - return newFutureUtil; - } - - LOGGER.error("close old ThreadPoolExecutor and create new, shardId:{}.", shardId); - try { - oldFutureUtil.shutdownNow(); - } catch (Exception e) { - LOGGER.error("close old ThreadPoolExecutor and create new, shutdownNow failed, shardId:{}.", shardId, e); - } - - return newFutureUtil; - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/AbstractMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/AbstractMetricESSender.java deleted file mode 100644 index c8756491..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/AbstractMetricESSender.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.po.BaseESPO; -import com.xiaojukeji.know.streaming.km.common.utils.FutureUtil; -import com.xiaojukeji.know.streaming.km.persistence.es.dao.BaseMetricESDAO; -import org.apache.commons.collections.CollectionUtils; - -import java.util.List; -import java.util.Objects; - -public abstract class AbstractMetricESSender { - private static final ILog LOGGER = LogFactory.getLog(AbstractMetricESSender.class); - - private static final int THRESHOLD = 100; - - private static final FutureUtil esExecutor = FutureUtil.init( - "MetricsESSender", - 10, - 20, - 10000 - ); - - /** - * 根据不同监控维度来发送 - */ - protected boolean send2es(String index, List statsList) { - LOGGER.info("method=send2es||indexName={}||metricsSize={}||msg=send metrics to es", index, statsList.size()); - - if (CollectionUtils.isEmpty(statsList)) { - return true; - } - - BaseMetricESDAO baseMetricESDao = BaseMetricESDAO.getByStatsType(index); - if (Objects.isNull(baseMetricESDao)) { - LOGGER.error("method=send2es||indexName={}||errMsg=find dao failed", index); - return false; - } - - for (int i = 0; i < statsList.size(); i += THRESHOLD) { - final int idxStart = i; - - // 异步发送 - esExecutor.submitTask( - () -> baseMetricESDao.batchInsertStats(statsList.subList(idxStart, Math.min(idxStart + THRESHOLD, statsList.size()))) - ); - } - - return true; - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectClusterMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectClusterMetricESSender.java deleted file mode 100644 index 25bd7a3a..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectClusterMetricESSender.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectClusterMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect.ConnectClusterMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CONNECT_CLUSTER_INDEX; - -/** - * @author wyb - * @date 2022/11/7 - */ -@Component -public class ConnectClusterMetricESSender extends AbstractMetricESSender implements ApplicationListener { - protected static final ILog LOGGER = LogFactory.getLog(ConnectClusterMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("class=ConnectClusterMetricESSender||method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(ConnectClusterMetricEvent event) { - send2es(CONNECT_CLUSTER_INDEX, ConvertUtil.list2List(event.getConnectClusterMetrics(), ConnectClusterMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectorMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectorMetricESSender.java deleted file mode 100644 index 4234c974..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/connect/ConnectorMetricESSender.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectorMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect.ConnectorMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CONNECT_CONNECTOR_INDEX; - -/** - * @author wyb - * @date 2022/11/7 - */ -@Component -public class ConnectorMetricESSender extends AbstractMetricESSender implements ApplicationListener { - protected static final ILog LOGGER = LogFactory.getLog(ConnectorMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("class=ConnectorMetricESSender||method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(ConnectorMetricEvent event) { - send2es(CONNECT_CONNECTOR_INDEX, ConvertUtil.list2List(event.getConnectorMetricsList(), ConnectorMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/BrokerMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/BrokerMetricESSender.java deleted file mode 100644 index 1c074df5..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/BrokerMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BrokerMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.BrokerMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.BROKER_INDEX; - -@Component -public class BrokerMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(BrokerMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(BrokerMetricEvent event) { - send2es(BROKER_INDEX, ConvertUtil.list2List(event.getBrokerMetrics(), BrokerMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ClusterMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ClusterMetricESSender.java deleted file mode 100644 index 70ee3d89..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ClusterMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.ClusterMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.ClusterMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CLUSTER_INDEX; - -@Component -public class ClusterMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(ClusterMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(ClusterMetricEvent event) { - send2es(CLUSTER_INDEX, ConvertUtil.list2List(event.getClusterMetrics(), ClusterMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/GroupMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/GroupMetricESSender.java deleted file mode 100644 index 2192ad90..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/GroupMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.GroupMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.GroupMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.GROUP_INDEX; - -@Component -public class GroupMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(GroupMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(GroupMetricEvent event) { - send2es(GROUP_INDEX, ConvertUtil.list2List(event.getGroupMetrics(), GroupMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/PartitionMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/PartitionMetricESSender.java deleted file mode 100644 index 40087e28..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/PartitionMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.PartitionMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.PartitionMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.PARTITION_INDEX; - -@Component -public class PartitionMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(PartitionMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(PartitionMetricEvent event) { - send2es(PARTITION_INDEX, ConvertUtil.list2List(event.getPartitionMetrics(), PartitionMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/TopicMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/TopicMetricESSender.java deleted file mode 100644 index fb3cff7d..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/TopicMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.*; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.*; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.TOPIC_INDEX; - -@Component -public class TopicMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(TopicMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(TopicMetricEvent event) { - send2es(TOPIC_INDEX, ConvertUtil.list2List(event.getTopicMetrics(), TopicMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ZookeeperMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ZookeeperMetricESSender.java deleted file mode 100644 index c93f4860..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/kafka/ZookeeperMetricESSender.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.ZookeeperMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.ZookeeperMetricPO; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.ZOOKEEPER_INDEX; - -@Component -public class ZookeeperMetricESSender extends AbstractMetricESSender implements ApplicationListener { - private static final ILog LOGGER = LogFactory.getLog(ZookeeperMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(ZookeeperMetricEvent event) { - send2es(ZOOKEEPER_INDEX, ConvertUtil.list2List(event.getZookeeperMetrics(), ZookeeperMetricPO.class)); - } -} diff --git a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/mm2/MirrorMakerMetricESSender.java b/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/mm2/MirrorMakerMetricESSender.java deleted file mode 100644 index 3089a995..00000000 --- a/km-collector/src/main/java/com/xiaojukeji/know/streaming/km/collector/sink/mm2/MirrorMakerMetricESSender.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.collector.sink.mm2; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.mm2.MirrorMakerMetricEvent; -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.mm2.MirrorMakerMetricPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CONNECT_MM2_INDEX; - -/** - * @author zengqiao - * @date 2022/12/20 - */ -@Component -public class MirrorMakerMetricESSender extends AbstractMetricESSender implements ApplicationListener { - protected static final ILog LOGGER = LogFactory.getLog(MirrorMakerMetricESSender.class); - - @PostConstruct - public void init(){ - LOGGER.info("method=init||msg=init finished"); - } - - @Override - public void onApplicationEvent(MirrorMakerMetricEvent event) { - send2es(CONNECT_MM2_INDEX, ConvertUtil.list2List(event.getMetricsList(), MirrorMakerMetricPO.class)); - } -} diff --git a/km-common/pom.xml b/km-common/pom.xml deleted file mode 100644 index 63c94a48..00000000 --- a/km-common/pom.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - 4.0.0 - com.xiaojukeji.kafka - km-common - ${km.revision} - jar - - - km - com.xiaojukeji.kafka - ${km.revision} - - - - true - true - UTF-8 - UTF-8 - - - - - org.springframework - spring-web - ${spring.version} - - - - - org.apache.zookeeper - zookeeper - - - - - io.springfox - springfox-swagger2 - - - io.springfox - springfox-swagger-ui - - - io.swagger - swagger-annotations - - - - - com.fasterxml.jackson.core - jackson-databind - - - com.alibaba - fastjson - - - - commons-beanutils - commons-beanutils - - - - commons-lang - commons-lang - - - org.apache.commons - commons-pool2 - - - javax.servlet - javax.servlet-api - - - com.google.code.findbugs - jsr305 - 3.0.2 - - - - org.projectlombok - lombok - compile - - - com.baomidou - mybatis-plus-boot-starter - - - org.hibernate.validator - hibernate-validator - - - - commons-io - commons-io - - - - net.sf.jopt-simple - jopt-simple - - - - io.github.zqrferrari - logi-log - - - - com.google.guava - guava - - - - org.apache.kafka - kafka-clients - - - org.apache.kafka - kafka_2.13 - - - org.apache.kafka - connect-runtime - - - \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/KafkaSource.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/KafkaSource.java deleted file mode 100644 index 2e7e54fa..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/KafkaSource.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.annotations; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * Kafka源码 - * @author zengqiao - * @date 2020-07-20 - */ -@Target({ElementType.TYPE, ElementType.LOCAL_VARIABLE}) -@Retention(RUNTIME) -@Documented -public @interface KafkaSource { - int modified() default 0; - - String modifyDesc() default ""; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLicense.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLicense.java deleted file mode 100644 index 7dcd3816..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLicense.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.annotations.enterprise; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * License - */ -@Target({ElementType.PACKAGE, ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) -@Retention(RUNTIME) -@Documented -public @interface EnterpriseLicense { - boolean all() default true; // 是否所有代码都是,默认是都是 -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLoadReBalance.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLoadReBalance.java deleted file mode 100644 index 58e6063f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseLoadReBalance.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.annotations.enterprise; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * Load-reBalance能力 - */ -@Target({ElementType.PACKAGE, ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) -@Retention(RUNTIME) -@Documented -public @interface EnterpriseLoadReBalance { - boolean all() default true; // 是否所有代码都是,默认是都是 -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseTesting.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseTesting.java deleted file mode 100644 index 0cf6dd60..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/annotations/enterprise/EnterpriseTesting.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.annotations.enterprise; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * Testing - */ -@Target({ElementType.PACKAGE, ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) -@Retention(RUNTIME) -@Documented -public @interface EnterpriseTesting { - boolean all() default true; // 是否所有代码都是,默认是都是 -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/BaseDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/BaseDTO.java deleted file mode 100644 index 2c36b83c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/BaseDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto; - -import java.io.Serializable; - -/** - * - * - * @author d06679 - * @date 2019/3/13 - */ -public class BaseDTO implements Serializable { - private static final long serialVersionUID = 7861489615519826338L; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/acl/AclAtomDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/acl/AclAtomDTO.java deleted file mode 100644 index 50d4b661..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/acl/AclAtomDTO.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.acl; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 22/03/01 - */ -@Data -@ApiModel(description="创建Acl") -public class AclAtomDTO extends BaseDTO { - @NotNull(message = "clusterId不允许为null") - @ApiModelProperty(value = "集群ID", example = "1") - private Long clusterId; - - @NotBlank(message = "kafkaUser不允许为空") - @ApiModelProperty(value = "kafkaUser名称", example = "know-streaming") - private String kafkaUser; - - /** - * 定义操作 —— 操作类型 - * @see org.apache.kafka.common.acl.AclOperation - */ - @ApiModelProperty(value = "操作类型,读/写/任意等", example = "2") - private Integer aclOperation; - - /** - * 定义操作 — 权限状态,允许或者拒绝 - * @see org.apache.kafka.common.acl.AclPermissionType - */ - @ApiModelProperty(value = "权限状态,允许/拒绝等", example = "3") - private Integer aclPermissionType; - - /** - * 定义操作 — 客户端主机 - */ - @ApiModelProperty(value = "客户端主机", example = "127.0.0.1") - private String aclClientHost; - - /** - * 定义资源 —— 资源类型 - * @see org.apache.kafka.common.resource.ResourceType - */ - @ApiModelProperty(value = "资源类型, Topic/Group等", example = "2") - private Integer resourceType; - - /** - * 定义资源 —— 资源名称 - */ - @ApiModelProperty(value = "资源名称") - private String resourceName; - - /** - * 定义资源 —— 资源匹配方式 - * @see org.apache.kafka.common.resource.PatternType - */ - @ApiModelProperty(value = "资源匹配方式", example = "3") - private Integer resourcePatternType; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterBrokersOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterBrokersOverviewDTO.java deleted file mode 100644 index 2af9704b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterBrokersOverviewDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -public class ClusterBrokersOverviewDTO extends PaginationSortDTO { - @NotNull(message = "latestMetricNames不允许为空") - @ApiModelProperty("需要指标点的信息") - private List latestMetricNames; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterConnectorsOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterConnectorsOverviewDTO.java deleted file mode 100644 index 75970724..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterConnectorsOverviewDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -public class ClusterConnectorsOverviewDTO extends PaginationSortDTO { - @NotNull(message = "latestMetricNames不允许为空") - @ApiModelProperty("需要指标点的信息") - private List latestMetricNames; - - @NotNull(message = "metricLines不允许为空") - @ApiModelProperty("需要指标曲线的信息") - private MetricDTO metricLines; - - @ApiModelProperty("需要排序的指标名称列表,比较第一个不为空的metric") - private List sortMetricNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterGroupSummaryDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterGroupSummaryDTO.java deleted file mode 100644 index d199e0d8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterGroupSummaryDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wyb - * @date 2022/10/17 - */ -@Data -public class ClusterGroupSummaryDTO extends PaginationBaseDTO { - @ApiModelProperty("查找该Topic") - private String searchTopicName; - - @ApiModelProperty("查找该Group") - private String searchGroupName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterMirrorMakersOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterMirrorMakersOverviewDTO.java deleted file mode 100644 index c109ebba..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterMirrorMakersOverviewDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/12/12 - */ -@Data -public class ClusterMirrorMakersOverviewDTO extends ClusterConnectorsOverviewDTO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyAddDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyAddDTO.java deleted file mode 100644 index 1a24161e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyAddDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description = "集群信息接入") -@JsonIgnoreProperties(ignoreUnknown = true) -public class ClusterPhyAddDTO extends ClusterPhyBaseDTO { - @NotBlank(message = "name不允许为空串") - @ApiModelProperty(value="集群名称", example = "KnowStreaming") - protected String name; - - @NotNull(message = "description不允许为空") - @ApiModelProperty(value="描述", example = "测试") - protected String description; - - @NotBlank(message = "kafkaVersion不允许为空") - @ApiModelProperty(value="集群的kafka版本", example = "2.5.1") - protected String kafkaVersion; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyBaseDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyBaseDTO.java deleted file mode 100644 index a9a3587f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyBaseDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.Properties; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description = "集群信息接入测试") -@JsonIgnoreProperties(ignoreUnknown = true) -public class ClusterPhyBaseDTO extends BaseDTO { - @NotNull(message = "zookeeper不允许为null") - @ApiModelProperty(value="ZK地址, 不允许修改", example = "127.0.0.1:2181") - protected String zookeeper; - - @NotBlank(message = "bootstrapServers不允许为空串") - @ApiModelProperty(value="bootstrap地址", example = "127.0.0.1:9093") - protected String bootstrapServers; - - @NotNull(message = "clientProperties不允许为空") - @ApiModelProperty(value="KM连接集群时使用的客户端配置") - protected Properties clientProperties; - - @NotNull(message = "jmxProperties不允许为空") - @ApiModelProperty(value="Jmx配置") - protected JmxConfig jmxProperties; - - // TODO 前端页面增加时,需要加一个不为空的限制 - @ApiModelProperty(value="ZK配置") - protected ZKConfig zkProperties; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyModifyDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyModifyDTO.java deleted file mode 100644 index eec0655f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterPhyModifyDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description = "集群信息修改") -@JsonIgnoreProperties(ignoreUnknown = true) -public class ClusterPhyModifyDTO extends ClusterPhyAddDTO { - @Min(value = 0, message = "id不允许小于0") - @ApiModelProperty(value="集群Id", example = "1") - private Long id; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterTopicsOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterTopicsOverviewDTO.java deleted file mode 100644 index 618ace9d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterTopicsOverviewDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -public class ClusterTopicsOverviewDTO extends PaginationSortDTO { - @NotNull(message = "latestMetricNames不允许为空") - @ApiModelProperty("需要指标点的信息") - private List latestMetricNames; - - @NotNull(message = "metricLines不允许为空") - @ApiModelProperty("需要指标曲线的信息") - private MetricDTO metricLines; - - @ApiModelProperty("显示内部Topic") - private Boolean showInternalTopics; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterZookeepersOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterZookeepersOverviewDTO.java deleted file mode 100644 index 2b3a6e9d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/ClusterZookeepersOverviewDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import lombok.Data; - -/** - * @author wyc - * @date 2022/9/23 - */ -@Data -public class ClusterZookeepersOverviewDTO extends PaginationBaseDTO { - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/MultiClusterDashboardDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/MultiClusterDashboardDTO.java deleted file mode 100644 index 75ea58b0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/cluster/MultiClusterDashboardDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationGeneralDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.util.List; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@NoArgsConstructor -public class MultiClusterDashboardDTO extends PaginationGeneralDTO { - @NotNull(message = "latestMetricNames不允许为空") - @ApiModelProperty("需要指标点的信息") - private List latestMetricNames; - - @NotNull(message = "metricLines不允许为空") - @ApiModelProperty("需要指标曲线的信息") - private MetricDTO metricLines; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigDTO.java deleted file mode 100644 index beec55c7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.config; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.util.Properties; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaConfigDTO extends BaseDTO { - @Min(value = 0, message = "clusterId不允许小于0") - @ApiModelProperty(value = "集群ID", example = "6") - private Long clusterId; - - @NotNull(message = "changedProps不允许为空") - @ApiModelProperty(value = "配置值", example = "{}") - private Properties changedProps; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyBrokerDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyBrokerDTO.java deleted file mode 100644 index 844012f7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyBrokerDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.config; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaConfigModifyBrokerDTO extends KafkaConfigDTO { - @Min(value = 0, message = "brokerId不允许小于0") - @ApiModelProperty(value = "BrokerId", example = "1") - private Integer brokerId; - - @ApiModelProperty(value = "应用到全部", example = "false") - private Boolean applyAll; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyTopicDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyTopicDTO.java deleted file mode 100644 index 8169381d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/KafkaConfigModifyTopicDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.config; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaConfigModifyTopicDTO extends KafkaConfigDTO { - @NotBlank(message = "topicName不允许为空") - @ApiModelProperty(value = "配置名称", example = "know-streaming") - private String topicName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/platform/PlatformClusterConfigDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/platform/PlatformClusterConfigDTO.java deleted file mode 100644 index 2aa4e1f5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/config/platform/PlatformClusterConfigDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.config.platform; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -@Data -@NoArgsConstructor -public class PlatformClusterConfigDTO extends BaseDTO { - @Min(value = 0, message = "clusterId不允许小于0") - @ApiModelProperty(value = "集群ID", example = "6") - private Long clusterId; - - @NotBlank(message = "valueGroup不允许空") - @ApiModelProperty(value = "配置组", example = "3423r43r") - private String valueGroup; - - @NotBlank(message = "valueName不允许空") - @ApiModelProperty(value = "配置项的名称", example = "3423r43r") - private String valueName; - - @NotNull(message = "value不允许为null") - @ApiModelProperty(value = "配置值", example = "3423r43r") - private String value; - - @NotNull(message = "description不允许为null") - @ApiModelProperty(value = "备注", example = "测试") - private String description; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/ClusterConnectorDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/ClusterConnectorDTO.java deleted file mode 100644 index bbc84ccf..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/ClusterConnectorDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@NoArgsConstructor -@ApiModel(description = "集群Connector") -public class ClusterConnectorDTO extends BaseDTO { - @NotNull(message = "connectClusterId不允许为空") - @ApiModelProperty(value = "Connector集群ID", example = "1") - protected Long connectClusterId; - - @NotBlank(message = "name不允许为空串") - @ApiModelProperty(value = "Connector名称", example = "know-streaming-connector") - protected String connectorName; - - public ClusterConnectorDTO(Long connectClusterId, String connectorName) { - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/cluster/ConnectClusterDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/cluster/ConnectClusterDTO.java deleted file mode 100644 index a8ca1ab2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/cluster/ConnectClusterDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@ApiModel(description = "集群Connector") -public class ConnectClusterDTO extends BaseDTO { - @ApiModelProperty(value = "Connect集群ID", example = "1") - private Long id; - - @ApiModelProperty(value = "Connect集群名称", example = "know-streaming") - private String name; - - @ApiModelProperty(value = "Connect集群URL", example = "http://127.0.0.1:8080") - private String clusterUrl; - - @ApiModelProperty(value = "Connect集群版本", example = "2.5.1") - private String version; - - @ApiModelProperty(value = "JMX配置", example = "") - private String jmxProperties; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorActionDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorActionDTO.java deleted file mode 100644 index f4294d68..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorActionDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@ApiModel(description = "操作Connector") -public class ConnectorActionDTO extends ClusterConnectorDTO { - @NotBlank(message = "action不允许为空串") - @ApiModelProperty(value = "Connector名称", example = "stop|restart|resume") - private String action; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorCreateDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorCreateDTO.java deleted file mode 100644 index 46639f0e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorCreateDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; -import java.util.Properties; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@NoArgsConstructor -@ApiModel(description = "创建Connector") -public class ConnectorCreateDTO extends ClusterConnectorDTO { - @NotNull(message = "configs不允许为空") - @ApiModelProperty(value = "配置", example = "") - protected Properties configs; - - public ConnectorCreateDTO(Long connectClusterId, String connectorName, Properties configs) { - super(connectClusterId, connectorName); - this.configs = configs; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorDeleteDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorDeleteDTO.java deleted file mode 100644 index 55dce017..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/connector/ConnectorDeleteDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import io.swagger.annotations.ApiModel; -import lombok.Data; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@ApiModel(description = "删除Connector") -public class ConnectorDeleteDTO extends ClusterConnectorDTO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2ActionDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2ActionDTO.java deleted file mode 100644 index 1d06c6af..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2ActionDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorActionDTO; -import io.swagger.annotations.ApiModel; -import lombok.Data; - - -/** - * @author zengqiao - * @date 2022-12-12 - */ -@Data -@ApiModel(description = "操作MM2") -public class MirrorMaker2ActionDTO extends ConnectorActionDTO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2DeleteDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2DeleteDTO.java deleted file mode 100644 index 9b219cfc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMaker2DeleteDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorDeleteDTO; -import io.swagger.annotations.ApiModel; -import lombok.Data; - -/** - * @author zengqiao - * @date 2022-12-12 - */ -@Data -@ApiModel(description = "删除MM2") -public class MirrorMaker2DeleteDTO extends ConnectorDeleteDTO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMakerCreateDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMakerCreateDTO.java deleted file mode 100644 index fa9867ec..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/mm2/MirrorMakerCreateDTO.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorCreateDTO; -import com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.kafka.clients.CommonClientConfigs; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.Properties; - -/** - * @author zengqiao - * @date 2022-12-12 - */ -@Data -@ApiModel(description = "创建MM2") -public class MirrorMakerCreateDTO extends ConnectorCreateDTO { - @NotNull(message = "sourceKafkaClusterId不允许为空") - @ApiModelProperty(value = "源Kafka集群ID", example = "") - private Long sourceKafkaClusterId; - - @Valid - @ApiModelProperty(value = "heartbeat-connector的信息", example = "") - private Properties heartbeatConnectorConfigs; - - @Valid - @ApiModelProperty(value = "checkpoint-connector的信息", example = "") - private Properties checkpointConnectorConfigs; - - public void unifyData(Long sourceKafkaClusterId, String sourceBootstrapServers, Properties sourceKafkaProps, - Long targetKafkaClusterId, String targetBootstrapServers, Properties targetKafkaProps) { - if (sourceKafkaProps == null) { - sourceKafkaProps = new Properties(); - } - - if (targetKafkaProps == null) { - targetKafkaProps = new Properties(); - } - - this.unifyData(this.configs, sourceKafkaClusterId, sourceBootstrapServers, sourceKafkaProps, targetKafkaClusterId, targetBootstrapServers, targetKafkaProps); - - if (heartbeatConnectorConfigs != null) { - this.unifyData(this.heartbeatConnectorConfigs, sourceKafkaClusterId, sourceBootstrapServers, sourceKafkaProps, targetKafkaClusterId, targetBootstrapServers, targetKafkaProps); - } - - if (checkpointConnectorConfigs != null) { - this.unifyData(this.checkpointConnectorConfigs, sourceKafkaClusterId, sourceBootstrapServers, sourceKafkaProps, targetKafkaClusterId, targetBootstrapServers, targetKafkaProps); - } - } - - private void unifyData(Properties dataConfig, - Long sourceKafkaClusterId, String sourceBootstrapServers, Properties sourceKafkaProps, - Long targetKafkaClusterId, String targetBootstrapServers, Properties targetKafkaProps) { - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_SOURCE_CLUSTER_ALIAS_FIELD_NAME, sourceKafkaClusterId); - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_SOURCE_CLUSTER_FIELD_NAME + "." + CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, sourceBootstrapServers); - for (Object configKey: sourceKafkaProps.keySet()) { - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_SOURCE_CLUSTER_FIELD_NAME + "." + configKey, sourceKafkaProps.getProperty((String) configKey)); - } - - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_TARGET_CLUSTER_ALIAS_FIELD_NAME, targetKafkaClusterId); - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_TARGET_CLUSTER_FIELD_NAME + "." + CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, targetBootstrapServers); - for (Object configKey: targetKafkaProps.keySet()) { - dataConfig.put(KafkaConnectConstant.MIRROR_MAKER_TARGET_CLUSTER_FIELD_NAME + "." + configKey, targetKafkaProps.getProperty((String) configKey)); - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/task/TaskActionDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/task/TaskActionDTO.java deleted file mode 100644 index a5d99188..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/connect/task/TaskActionDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.task; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorActionDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 2022-10-17 - */ -@Data -@ApiModel(description = "操作Task") -public class TaskActionDTO extends ConnectorActionDTO { - @NotNull(message = "taskId不允许为NULL") - @ApiModelProperty(value = "taskId", example = "123") - private Long taskId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupOffsetResetDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupOffsetResetDTO.java deleted file mode 100644 index 378709dd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupOffsetResetDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.group; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.partition.PartitionOffsetDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.ClusterTopicDTO; -import com.xiaojukeji.know.streaming.km.common.enums.OffsetTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * 重置offset - * @author zengqiao - * @date 19/4/8 - */ -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -public class GroupOffsetResetDTO extends ClusterTopicDTO { - @NotBlank(message = "groupName不允许为空") - @ApiModelProperty(value = "消费组名称", example = "g-know-streaming") - private String groupName; - - /** - * @see OffsetTypeEnum - */ - @NotNull(message = "resetType不允许为空") - @ApiModelProperty(value = "重置方式", example = "1") - private Integer resetType; - - @ApiModelProperty(value = "重置到指定offset") - private List offsetList; - - @ApiModelProperty(value = "重置到指定时间") - private Long timestamp; - - @ApiModelProperty(value = "如果不存在则创建") - private Boolean createIfNotExist; - - public boolean isCreateIfNotExist() { - return createIfNotExist != null && createIfNotExist; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupTopicConsumedDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupTopicConsumedDTO.java deleted file mode 100644 index 9fd075cc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/group/GroupTopicConsumedDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.group; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -public class GroupTopicConsumedDTO extends PaginationSortDTO { - @ApiModelProperty("需要指标点的信息") - private List latestMetricNames; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicCreateDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicCreateDTO.java deleted file mode 100644 index 58182670..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicCreateDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.ha.mirror; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Topic镜像信息") -public class MirrorTopicCreateDTO extends BaseDTO { - @Min(value = 0, message = "sourceClusterPhyId不允许为空,且最小值为0") - @ApiModelProperty(value = "源集群ID", example = "3") - private Long sourceClusterPhyId; - - @Min(value = 0, message = "destClusterPhyId不允许为空,且最小值为0") - @ApiModelProperty(value = "目标集群ID", example = "3") - private Long destClusterPhyId; - - @NotBlank(message = "topicName不允许为空串") - @ApiModelProperty(value = "Topic名称", example = "mirrorTopic") - private String topicName; - - @NotNull(message = "syncData不允许为空") - @ApiModelProperty(value = "同步数据", example = "true") - private Boolean syncData; - - @NotNull(message = "syncConfig不允许为空") - @ApiModelProperty(value = "同步配置", example = "false") - private Boolean syncConfig; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicDeleteDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicDeleteDTO.java deleted file mode 100644 index 8b7d0095..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/ha/mirror/MirrorTopicDeleteDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.ha.mirror; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Topic镜像信息") -public class MirrorTopicDeleteDTO extends BaseDTO { - @Min(value = 0, message = "sourceClusterPhyId不允许为空,且最小值为0") - @ApiModelProperty(value = "源集群ID", example = "3") - private Long sourceClusterPhyId; - - @Min(value = 0, message = "destClusterPhyId不允许为空,且最小值为0") - @ApiModelProperty(value = "目标集群ID", example = "3") - private Long destClusterPhyId; - - @NotBlank(message = "topicName不允许为空串") - @ApiModelProperty(value = "Topic名称", example = "mirrorTopic") - private String topicName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobDTO.java deleted file mode 100644 index bc6f5c3e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobDTO.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2015, WINIT and/or its affiliates. All rights reserved. Use, Copy is subject to authorized license. - */ -package com.xiaojukeji.know.streaming.km.common.bean.dto.job; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotBlank; -import java.util.Date; - -/** - * WorkTask Vo 对象 - * - * @author fengqiongfeng - * @date 2020-12-21 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class JobDTO extends BaseDTO { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("任务id, 创建时不需要") - private Long id; - - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.job.JobTypeEnum - */ - @ApiModelProperty("任务类型") - private Integer jobType; - - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.job.JobStatusEnum - */ - @ApiModelProperty("任务状态") - private Integer jobStatus; - - @ApiModelProperty("任务执行对象") - private String target; - - @ApiModelProperty(value = "任务描述") - private String jobDesc; - - @NotBlank(message = "creator不允许为空或空串") - @ApiModelProperty("创建人") - private String creator; - - @ApiModelProperty("计划执行时间") - private Date planTime; - - @NotBlank(message = "data不允许为空或空串") - @ApiModelProperty("data") - private String jobData; -} - diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobPaginationDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobPaginationDTO.java deleted file mode 100644 index 22f117eb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/job/JobPaginationDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.job; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - - -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "任务处理信息") -public class JobPaginationDTO extends PaginationBaseDTO { - - @ApiModelProperty("任务类型,-1:全部;0:Topic迁移;1:Topic扩缩副本;2:集群均衡") - private Integer type = -1; - - @ApiModelProperty("执行任务对象") - private String jobTarget; - - @ApiModelProperty("任务创建人") - private String creator; - - @ApiModelProperty("运行状态,为空则代表全部状态") - private List status; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserDTO.java deleted file mode 100644 index 1fa69557..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.kafkauser; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="kafkaUser信息") -public class ClusterKafkaUserDTO { - @Min(value = 1, message = "clusterId不允许为null或者小于0") - @ApiModelProperty(value = "集群ID, 默认为逻辑集群ID", example = "6") - protected Long clusterId; - - @NotBlank(message = "kafkaUser不允许为空串") - @ApiModelProperty(value = "kafkaUser名称", example = "know-streaming") - protected String kafkaUser; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserTokenDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserTokenDTO.java deleted file mode 100644 index 9f399893..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/kafkauser/ClusterKafkaUserTokenDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.kafkauser; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="kafkaUser密码信息") -public class ClusterKafkaUserTokenDTO extends ClusterKafkaUserDTO { - @NotBlank(message = "token不允许为空串") - @ApiModelProperty(value = "密码", example = "12313224cerce32r344rC") - private String token; - - @NotNull(message = "authType不允许为空") - @ApiModelProperty(value = "认证类型", example = "1300") - private Integer authType; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDTO.java deleted file mode 100644 index 9af1cbb0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "指标查询基础信息") -public class MetricDTO extends BaseDTO { - - @ApiModelProperty("开始时间") - private Long startTime; - - @ApiModelProperty("结束时间") - private Long endTime; - - @ApiModelProperty(value = "聚合类型:avg、max、min、sum,默认:avg", example = "avg") - private String aggType = "avg"; - - @ApiModelProperty(value = "指标类型/指标名称", example = "[\"topics\"]") - private List metricsNames; - - @ApiModelProperty("Top-Level:5,10,15,20") - private Integer topNu = 5; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDetailDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDetailDTO.java deleted file mode 100644 index 04f18a03..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricDetailDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotNull; - - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "指标详细属性信息") -public class MetricDetailDTO extends BaseDTO { - - @ApiModelProperty("指标名称") - private String metric; - - @ApiModelProperty("指标是否显示") - private Boolean set; - - @NotNull(message = "MetricDetailDTO的rank字段应不为空") - @ApiModelProperty("指标优先级") - private Integer rank; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupPartitionDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupPartitionDTO.java deleted file mode 100644 index 93d00098..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupPartitionDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.TopicPartitionKS; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "Group&Partition指标查询信息") -public class MetricGroupPartitionDTO extends MetricDTO { - @ApiModelProperty("Group 名称") - private String group; - - @ApiModelProperty("Group 的 topic & partition 信息") - private List groupTopics; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupTopicDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupTopicDTO.java deleted file mode 100644 index 6768d403..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricGroupTopicDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "Group&Topic指标查询信息") -public class MetricGroupTopicDTO extends MetricDTO { - @ApiModelProperty("Group名称") - private String group; - - @ApiModelProperty("Topic名称") - private String topic; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricRealTimeDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricRealTimeDTO.java deleted file mode 100644 index 05fbc142..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricRealTimeDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "指标查询基础信息") -public class MetricRealTimeDTO extends BaseDTO { - @ApiModelProperty("指标类型") - private Integer metricType; - - @ApiModelProperty("指标名称") - private String metricName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsBrokerDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsBrokerDTO.java deleted file mode 100644 index cb48fcd6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsBrokerDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "topic指标查询信息") -public class MetricsBrokerDTO extends MetricDTO { - - @ApiModelProperty("brokerId列表") - private List brokerIds; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsClusterPhyDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsClusterPhyDTO.java deleted file mode 100644 index 16cece7c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsClusterPhyDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "物理集群指标查询信息") -public class MetricsClusterPhyDTO extends MetricDTO { - - @ApiModelProperty("物理集群Id列表") - private List clusterPhyIds; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsTopicDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsTopicDTO.java deleted file mode 100644 index aac34eeb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/MetricsTopicDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "topic指标查询信息") -public class MetricsTopicDTO extends MetricDTO { - - @ApiModelProperty("topic名称") - private List topics; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/UserMetricConfigDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/UserMetricConfigDTO.java deleted file mode 100644 index b743ec73..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/UserMetricConfigDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.Valid; -import java.util.List; -import java.util.Map; - - -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "用户指标显示设置配置信息") -public class UserMetricConfigDTO extends BaseDTO { - @ApiModelProperty("指标展示设置项,key:指标名;value:是否展现(true展现/false不展现)") - private Map metricsSet; - - @Valid - @ApiModelProperty("指标自定义属性列表") - private List metricDetailDTOList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectClustersDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectClustersDTO.java deleted file mode 100644 index 7986553c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectClustersDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "Connect集群指标查询信息") -public class MetricsConnectClustersDTO extends MetricDTO { - @ApiModelProperty("Connect集群ID") - private List connectClusterIdList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectorsDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectorsDTO.java deleted file mode 100644 index a51700f1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/connect/MetricsConnectorsDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "Connector指标查询信息") -public class MetricsConnectorsDTO extends MetricDTO { - @ApiModelProperty("Connector列表") - private List connectorNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/mm2/MetricsMirrorMakersDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/mm2/MetricsMirrorMakersDTO.java deleted file mode 100644 index 512832f9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/metrices/mm2/MetricsMirrorMakersDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "MirrorMaker指标查询信息") -public class MetricsMirrorMakersDTO extends MetricDTO { - @ApiModelProperty("MirrorMaker的SourceConnect列表") - private List connectorNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/oprecord/OperateRecordDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/oprecord/OperateRecordDTO.java deleted file mode 100644 index 9166ad95..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/oprecord/OperateRecordDTO.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.oprecord; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -/** - * - * - * @author d06679 - * @date 2019/3/14 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "操作记录信息") -public class OperateRecordDTO extends BaseDTO { - - /** - * 主键 - */ - @ApiModelProperty("记录ID") - private Integer id; - - /** - * @see ModuleEnum - */ - @ApiModelProperty("模块ID") - private Integer moduleId; - - /** - * @see OperationEnum - */ - @ApiModelProperty("操作ID") - private Integer operateId; - - /** - * 操作业务id String类型 - */ - @ApiModelProperty("业务ID") - private String bizId; - - /** - * 操作描述 - */ - @ApiModelProperty("操作内容") - private String content; - - /** - * 操作人 邮箱前缀 - */ - @ApiModelProperty("操作人") - private String operator; - - /** - * 操作时间 - */ - @ApiModelProperty("操作时间") - private Date operateTime; - - /** - * 操作起始时间 查询使用 - */ - @ApiModelProperty("开始时间") - private Date beginTime; - - /** - * 操作截止时间 查询使用 - */ - @ApiModelProperty("结束时间") - private Date endTime; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationBaseDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationBaseDTO.java deleted file mode 100644 index 8163e807..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationBaseDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.constant.PaginationConstant; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -@Data -@ApiModel(description="列表分页查询的BaseDTO") -@JsonIgnoreProperties(ignoreUnknown = true) -public class PaginationBaseDTO { - @NotNull(message = "pageNo不允许为空") - @ApiModelProperty(value="页面位置,默认1", example = "1") - private Integer pageNo = PaginationConstant.DEFAULT_PAGE_NO; - - @NotNull(message = "pageSize不允许为空") - @ApiModelProperty(value="页面大小,默认10", example = "10") - private Integer pageSize = PaginationConstant.DEFAULT_PAGE_SIZE; - - @ApiModelProperty(value="模糊搜索", example = "") - private String searchKeywords; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationGeneralDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationGeneralDTO.java deleted file mode 100644 index 34aad1da..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationGeneralDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationPreciseFilterFieldDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationRangeFilterFieldDTO; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.Valid; -import java.util.List; - - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="通用分页信息") -public class PaginationGeneralDTO extends PaginationBaseDTO { - @ApiModelProperty(value="排序字段, 传入的字段名同返回的VO里面的字段名") - private String sortField; - - @ApiModelProperty(value="排序类型[asc|desc],默认desc", example = "desc") - private String sortType = SortTypeEnum.DESC.getSortType(); - - @Valid - @ApiModelProperty(value="多字段精确过滤") - private List preciseFilterDTOList; - - @Valid - @ApiModelProperty(value="多字段范围过滤") - private List rangeFilterDTOList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulFuzzySearchDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulFuzzySearchDTO.java deleted file mode 100644 index 900ce2ab..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulFuzzySearchDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationFuzzySearchFieldDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.Valid; -import java.util.List; - -/** - * 模糊搜索 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="多字段模糊搜索") -public class PaginationMulFuzzySearchDTO extends PaginationBaseDTO { - @Valid - @ApiModelProperty(value="模糊搜索字段") - private List fuzzySearchDTOList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulPreciseFilterDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulPreciseFilterDTO.java deleted file mode 100644 index 96a52360..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulPreciseFilterDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationPreciseFilterFieldDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="多字段精确过滤") -public class PaginationMulPreciseFilterDTO extends PaginationBaseDTO { - // GET请求格式: - // filterDTOList[0].fieldValueList=aaa,bbb,ccc&filterDTOList[0].fieldName=clusterName 还需要将这个请求转义才可以 - @ApiModelProperty(value="多字段精确过滤, 传入的字段名同返回的VO里面的字段名") - private List preciseFilterDTOList ; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulRangeFilterDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulRangeFilterDTO.java deleted file mode 100644 index 5722d55f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationMulRangeFilterDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationRangeFilterFieldDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="多字段范围过滤") -public class PaginationMulRangeFilterDTO extends PaginationBaseDTO { - @ApiModelProperty(value="多字段范围过滤") - private List rangeFilterDTOList ; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationPreciseAndFuzzySearchDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationPreciseAndFuzzySearchDTO.java deleted file mode 100644 index af8a4c3c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationPreciseAndFuzzySearchDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationFuzzySearchFieldDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationPreciseFilterFieldDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.Valid; -import java.util.List; - -/** - * 模糊搜索 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="多字段模糊搜索") -public class PaginationPreciseAndFuzzySearchDTO extends PaginationBaseDTO { - @Valid - @ApiModelProperty(value="模糊搜索字段, 传入的字段名同返回的VO里面的字段名") - private List fuzzySearchDTOList; - - @Valid - @ApiModelProperty(value="多字段精确过滤, 传入的字段名同返回的VO里面的字段名") - private List preciseFilterDTOList ; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationSortDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationSortDTO.java deleted file mode 100644 index f4cee85f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/PaginationSortDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description="列表分页查询-带过滤条件") -public class PaginationSortDTO extends PaginationBaseDTO { - @ApiModelProperty(value="排序字段, 传入的字段名同返回的VO里面的字段名", example = "topicName") - private String sortField; - - @ApiModelProperty(value="排序类型[asc|desc],默认desc", example = "desc") - private String sortType = SortTypeEnum.DESC.getSortType(); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationFuzzySearchFieldDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationFuzzySearchFieldDTO.java deleted file mode 100644 index e1f2b70b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationFuzzySearchFieldDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -@Data -@ApiModel(description="模糊搜索") -public class PaginationFuzzySearchFieldDTO { - @NotBlank(message = "fieldName不允许为空") - @ApiModelProperty(value="模糊搜索字段名", example = "kafkaUser") - private String fieldName; - - @NotBlank(message = "fieldValue不允许为空") - @ApiModelProperty(value="模糊搜索字段值", example = "know-streaming-kafka-user") - private String fieldValue; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationPreciseFilterFieldDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationPreciseFilterFieldDTO.java deleted file mode 100644 index 1540be92..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationPreciseFilterFieldDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@NoArgsConstructor -@ApiModel(description="列表分页查询-过滤字段信息") -public class PaginationPreciseFilterFieldDTO { - @NotBlank(message = "fieldName不允许为空") - @ApiModelProperty(value="过滤字段") - private String fieldName; - - @NotNull(message = "fieldValueList不允许为空") - @ApiModelProperty(value="过滤值") - private List fieldValueList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationRangeFilterFieldDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationRangeFilterFieldDTO.java deleted file mode 100644 index f11aabe9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/pagination/field/PaginationRangeFilterFieldDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -@Data -@ApiModel(description="列表分页查询-过滤字段信息") -public class PaginationRangeFilterFieldDTO { - @NotBlank(message = "fieldName不允许为空") - @ApiModelProperty(value="过滤字段", example = "healthScore") - private String fieldName; - - @NotBlank(message = "fieldMinValue不允许为空") - @ApiModelProperty(value="最小值", example = "2") - private String fieldMinValue; - - @NotBlank(message = "fieldMaxValue不允许为空") - @ApiModelProperty(value="最大值", example = "100") - private String fieldMaxValue; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/partition/PartitionOffsetDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/partition/PartitionOffsetDTO.java deleted file mode 100644 index 393370a6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/partition/PartitionOffsetDTO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.partition; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.validation.constraints.Min; - -/** - * Topic Offset - * @author zengqiao - * @date 19/6/2 - */ -@Data -@NoArgsConstructor -public class PartitionOffsetDTO extends BaseDTO { - @Min(value = 0, message = "partitionId不允许小于0") - @ApiModelProperty(value = "分区ID", example = "1") - private Integer partitionId; - - @Min(value = 0, message = "offset不允许小于0") - @ApiModelProperty(value = "分区offset", example = "123") - private Long offset; - - public PartitionOffsetDTO(Integer partitionId, Long offset) { - this.partitionId = partitionId; - this.offset = offset; - } -} - diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/ReassignTopicOverviewDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/ReassignTopicOverviewDTO.java deleted file mode 100644 index d81ffb0e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/ReassignTopicOverviewDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.reassign; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@ApiModel(description="迁移Topic概要信息") -public class ReassignTopicOverviewDTO extends BaseDTO { - @Min(value = 1, message = "clusterId不允许为null或者小于0") - @ApiModelProperty(value = "集群ID", example = "2") - private Long clusterId; - - @NotNull(message = "topicNameList不允许为空") - @ApiModelProperty(value = "Topic名称列表", example = "[ks-0, ks-1, ks-2]") - private List topicNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/change/CreateChangeReplicasPlanDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/change/CreateChangeReplicasPlanDTO.java deleted file mode 100644 index 12b6779e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/change/CreateChangeReplicasPlanDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.change; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.ClusterTopicDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@ApiModel(description="创建迁移Json") -public class CreateChangeReplicasPlanDTO extends ClusterTopicDTO { - @NotNull(message = "newReplicaNum必须大于等于1") - @Min(value = 1, message = "newReplicaNum必须大于等于1") - @ApiModelProperty(value = "副本数", example = "3") - private Integer newReplicaNum; - - @NotNull(message = "brokerIdList不允许为空") - @ApiModelProperty(value = "BrokerID列表", example = "3,4,5") - private List brokerIdList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/move/CreateMoveReplicaPlanDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/move/CreateMoveReplicaPlanDTO.java deleted file mode 100644 index ba8103d5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/move/CreateMoveReplicaPlanDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.move; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.topic.ClusterTopicDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@ApiModel(description="创建迁移Json") -public class CreateMoveReplicaPlanDTO extends ClusterTopicDTO { - @ApiModelProperty(value = "分区ID列表", example = "0,1,2") - private List partitionIdList; - - @NotNull(message = "brokerIdList不允许为空") - @ApiModelProperty(value = "BrokerID列表", example = "3,4,5") - private List brokerIdList; - - @NotNull(message = "enableRackAwareness不允许为空") - @ApiModelProperty(value = "是否机架感知", example = "false") - private Boolean enableRackAwareness; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignPartitionPlanDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignPartitionPlanDTO.java deleted file mode 100644 index fc261ac6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignPartitionPlanDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.plan; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@ApiModel(description = "迁移计划") -public class ReassignPartitionPlanDTO { - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="分区ID") - private Integer partitionId; - - @ApiModelProperty(value="当前BrokerId列表") - private List originalBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignTopicPlanDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignTopicPlanDTO.java deleted file mode 100644 index d2f2cf3b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/reassign/plan/ReassignTopicPlanDTO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.plan; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.point.MetricPointVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@ApiModel(description = "迁移计划") -public class ReassignTopicPlanDTO { - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="需要迁移Topic分区列表", example = "[1, 2, 3]") - private List partitionIdList; - - @ApiModelProperty(value="需要迁移Topic分区数", example = "10") - private Integer partitionNum; - - @ApiModelProperty(value="当前副本数", example = "2") - private Integer presentReplicaNum; - - @ApiModelProperty(value="新的副本数", example = "2") - private Integer newReplicaNum; - - @ApiModelProperty(value="当前BrokerId列表") - private List originalBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; - - @ApiModelProperty(value="迁移计划列表") - private List partitionPlanList; - - @ApiModelProperty(value="Topic当前数据保存时间", example = "10") - private Long originalRetentionTimeUnitMs; - - @ApiModelProperty(value="Topic迁移时数据保存时间", example = "10") - private Long reassignRetentionTimeUnitMs; - - @ApiModelProperty(value="近N天的avg的BytesIn") - private List latestDaysAvgBytesInList; - - @ApiModelProperty(value="近N天的max的BytesIn") - private List latestDaysMaxBytesInList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/ClusterTopicDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/ClusterTopicDTO.java deleted file mode 100644 index efdc9257..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/ClusterTopicDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Topic信息") -public class ClusterTopicDTO extends BaseDTO { - @Min(value = 1, message = "clusterId不允许为null或者小于0") - @ApiModelProperty(value = "集群ID, 默认为逻辑集群ID", example = "6") - protected Long clusterId; - - @NotBlank(message = "topicName不允许为空串") - @ApiModelProperty(value = "Topic名称", example = "know-streaming") - protected String topicName; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicCreateDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicCreateDTO.java deleted file mode 100644 index af711ad6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicCreateDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.topic; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.util.List; -import java.util.Properties; - -/** - * @author huangyiminghappy@163.com, zengqiao - * @date 2019-04-21 - */ -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description = "创建Topic") -public class TopicCreateDTO extends ClusterTopicDTO { - @Min(value = 1, message = "partitionNum不允许为空,且最小值为1") - @ApiModelProperty(value = "分区数", example = "3") - private Integer partitionNum; - - @Min(value = 1, message = "replicaNum不允许为空,且最小值为1") - @ApiModelProperty(value = "副本数", example = "2") - private Integer replicaNum; - - @ApiModelProperty(value = "brokerId列表,为空时则选择所有的Broker", example = "[1, 2, 3]") - private List brokerIdList; - - @NotNull(message = "properties不允许为null") - @ApiModelProperty(value = "Topic属性列表", example = "{ \"retention.ms\": \"9876543210\", \"retention.bytes\": \"1234567890\",}") - private Properties properties; - - @NotNull(message = "description不允许为null") - @ApiModelProperty(value = "备注", example = "测试Topic") - private String description; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicExpansionDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicExpansionDTO.java deleted file mode 100644 index f68ace50..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicExpansionDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.topic; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import java.util.List; - -/** - * @author zengqiao - * @date 20/1/2 - */ -@Data -@ApiModel(value = "Topic扩分区") -@JsonIgnoreProperties(ignoreUnknown = true) -public class TopicExpansionDTO extends ClusterTopicDTO { - @Min(value = 1, message = "incPartitionNum不允许为null或者小于0") - @ApiModelProperty(value = "新增分区数", example = "1") - private Integer incPartitionNum; - - @ApiModelProperty(value = "brokerId列表,为空时则选择所有的Broker", example = "[1, 2, 3]") - private List brokerIdList; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicRecordDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicRecordDTO.java deleted file mode 100644 index ca625f01..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/topic/TopicRecordDTO.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.topic; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO; -import com.xiaojukeji.know.streaming.km.common.enums.OffsetTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * @author zengqiao - * @date 2022-03-15 - */ -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -@ApiModel(description = "Topic记录") -public class TopicRecordDTO extends PaginationSortDTO { - @NotNull(message = "truncate不允许为空") - @ApiModelProperty(value = "是否截断", example = "true") - private Boolean truncate; - - @ApiModelProperty(value = "过滤的分区,为空时表示不过滤", example = "1") - private Integer filterPartitionId; - - @ApiModelProperty(value = "过滤的key", example = "") - private String filterKey; - - @ApiModelProperty(value = "过滤的value", example = "") - private String filterValue; - - @ApiModelProperty(value = "预览最大消息条数", example = "100") - private Integer maxRecords = 100; - - @ApiModelProperty(value = "预览超时时间", example = "10000") - private Long pullTimeoutUnitMs = 8000L; - - /** - * @see OffsetTypeEnum - */ - @ApiModelProperty(value = "offset", example = "") - private Integer filterOffsetReset = 0; - - @ApiModelProperty(value = "开始日期时间戳", example = "") - private Long startTimestampUnitMs; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaBSDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaBSDTO.java deleted file mode 100644 index c02aefa9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaBSDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.util; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.Properties; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Kafka-BootstrapServers信息") -public class ValidateKafkaBSDTO { - @NotBlank(message = "zookeeper不允许为空") - @ApiModelProperty(value = "bootstrapServers地址", example = "127.0.0.1:9093") - private String bootstrapServers; - - @NotNull(message = "clientProperties不允许为null") - @ApiModelProperty(value = "客户端配置") - private Properties clientProperties; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaDTO.java deleted file mode 100644 index 22e7d522..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.util; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Properties; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Kafka信息") -public class ValidateKafkaDTO { - @ApiModelProperty(value = "bootstrapServers地址", example = "127.0.0.1:9093") - private String bootstrapServers; - - @ApiModelProperty(value = "客户端配置") - private Properties clientProperties; - - @ApiModelProperty(value = "zk地址", example = "127.0.0.1:2181") - private String zookeeper; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaZKDTO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaZKDTO.java deleted file mode 100644 index 1ebebe25..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/dto/util/ValidateKafkaZKDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.dto.util; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * @author zengqiao - * @date 20/4/23 - */ -@Data -@ApiModel(description="Kafka-ZK信息") -public class ValidateKafkaZKDTO { - @NotBlank(message = "zookeeper不允许为空") - @ApiModelProperty(value = "zk地址", example = "127.0.0.1:2181") - private String zookeeper; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/BaseEntity.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/BaseEntity.java deleted file mode 100644 index 2920dc73..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/BaseEntity.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity; - -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author d06679 - * @date 2019/3/22 - */ -@Data -public class BaseEntity implements Serializable { - protected Date createTime; - - protected Date updateTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/EntityIdInterface.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/EntityIdInterface.java deleted file mode 100644 index 2f40f39c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/EntityIdInterface.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity; - -/** - * @author didi - */ -public interface EntityIdInterface { - /** - * 获取id - * @return - */ - Long getId(); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/assign/TopicAssignedCount.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/assign/TopicAssignedCount.java deleted file mode 100644 index 6f1cf978..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/assign/TopicAssignedCount.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.assign; - -import lombok.Data; - -import java.util.*; - -/** - * Topic在Broker上的分布统计 - */ -@Data -public class TopicAssignedCount implements Comparable { - private static Integer presentReplicaIdx = 0; - - private Integer brokerId; - - private String rack; - - /** - * 每个位置的副本,都分配了哪些分区到该Broker上 - */ - private List> idxReplicaPartitionList; - - /** - * 分配到该Broker上的分区 - */ - private Set assignedPartitionSet; - - /** - * 是否参与分区分配 - */ - private boolean includeAssign; - - public TopicAssignedCount(Integer brokerId, String rack, Integer replicaNum, boolean includeAssign) { - this.brokerId = brokerId; - this.rack = rack; - this.idxReplicaPartitionList = new ArrayList<>(); - for (int idx = 0; idx < replicaNum; ++idx) { - this.idxReplicaPartitionList.add(new ArrayList<>()); - } - this.assignedPartitionSet = new HashSet<>(); - this.includeAssign = includeAssign; - } - - @Override - public int compareTo(TopicAssignedCount o) { - // 先按照该Broker在某个位置的副本数量进行排序 - if (this.idxReplicaPartitionList.get(presentReplicaIdx).size() < o.idxReplicaPartitionList.get(o.presentReplicaIdx).size()) { - return -1; - } else if (this.idxReplicaPartitionList.get(presentReplicaIdx).size() > o.idxReplicaPartitionList.get(o.presentReplicaIdx).size()) { - return 1; - } - - // 再按照Broker上的副本总数进行排序 - if (this.assignedPartitionSet.size() < o.assignedPartitionSet.size()) { - return -1; - } else if (this.assignedPartitionSet.size() > o.assignedPartitionSet.size()) { - return 1; - } - - // 最后按照brokerId进行排序 - return this.brokerId.compareTo(o.brokerId); - } - - public static void setPresentReplicaIdx(Integer replicaIdx, Integer replicaNum) { - presentReplicaIdx = replicaIdx % replicaNum; - } - - public static Map> convert2PartitionMap(List assignedCountList, Integer replicaNum, List filterPartitionIdList) { - Map> partitionMap = new HashMap<>(); - - // 遍历每个位置的副本 - for (int idx = 0; idx < replicaNum; ++idx) { - // 遍历Broker - for (TopicAssignedCount assignedCount: assignedCountList) { - // 遍历Broker上指定位置的副本被分配到的分区 - for (Integer partitionId: assignedCount.getIdxReplicaPartitionList().get(idx)) { - if (filterPartitionIdList != null && filterPartitionIdList.contains(partitionId)) { - continue; - } - partitionMap.putIfAbsent(partitionId, new ArrayList<>()); - partitionMap.get(partitionId).add(assignedCount.getBrokerId()); - } - } - } - - return partitionMap; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/Broker.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/Broker.java deleted file mode 100644 index 752aade0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/Broker.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.broker; - - -import com.alibaba.fastjson.TypeReference; -import com.xiaojukeji.know.streaming.km.common.bean.entity.common.IpPortData; -import com.xiaojukeji.know.streaming.km.common.bean.po.broker.BrokerPO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.Node; - -import java.io.Serializable; -import java.util.Map; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Broker implements Serializable { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * BrokerID - */ - private Integer brokerId; - - /** - * 主机 - */ - private String host; - - /** - * 服务端口 - */ - private Integer port; - - /** - * JMX端口 - */ - private Integer jmxPort; - - /** - * 启动时间 - */ - private Long startTimestamp; - - /** - * rack信息 - */ - private String rack; - - /** - * 是否存活 - */ - private Integer status; - - /** - * 监听信息 - */ - private Map endpointMap; - - public static Broker buildFrom(Long clusterPhyId, Node node, Long startTimestamp) { - Broker metadata = new Broker(); - metadata.setClusterPhyId(clusterPhyId); - metadata.setBrokerId(node.id()); - metadata.setHost(node.host()); - metadata.setPort(node.port()); - metadata.setJmxPort(-1); - metadata.setStartTimestamp(startTimestamp); - metadata.setRack(node.rack()); - metadata.setStatus(1); - return metadata; - } - - public static Broker buildFrom(BrokerPO brokerPO) { - Broker broker = ConvertUtil.obj2Obj(brokerPO, Broker.class); - String endpointMapStr = brokerPO.getEndpointMap(); - if (broker == null || endpointMapStr == null || endpointMapStr.equals("")) { - return broker; - } - - // 填充endpoint信息 - Map endpointMap = ConvertUtil.str2ObjByJson(endpointMapStr, new TypeReference>(){}); - broker.setEndpointMap(endpointMap); - return broker; - } - - public String getJmxHost(String endPoint) { - if (endPoint == null || endpointMap == null) { - return host; - } - IpPortData ip = endpointMap.get(endPoint); - return ip != null ? ip.getIp() : host; - } - - public boolean alive() { - return status != null && status > 0; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/BrokerSpec.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/BrokerSpec.java deleted file mode 100644 index 481d922d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/broker/BrokerSpec.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.broker; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class BrokerSpec { - - private Integer brokerId; - - private Double cpu; - - private Double disk; - - private Double flow; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhy.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhy.java deleted file mode 100644 index a534a015..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhy.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.EntityIdInterface; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterPhy implements Comparable, EntityIdInterface { - /** - * 主键 - */ - private Long id; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 集群名字 - */ - private String name; - - /** - * 集群服务地址 - */ - private String bootstrapServers; - - /** - * 版本信息 - */ - private String kafkaVersion; - - /** - * ZK地址 - */ - private String zookeeper; - - /** - * 集群客户端配置 - */ - private String clientProperties; - - /** - * jmx配置 - * @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig - */ - private String jmxProperties; - - /** - * zk配置 - * @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig - */ - private String zkProperties; - - /** - * 开启ACL - * @see com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterAuthTypeEnum - */ - private Integer authType; - - /** - * 运行状态 - * @see com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterRunStateEnum - */ - private Integer runState; - - /** - * 备注 - */ - private String description; - - @Override - public int compareTo(ClusterPhy clusterPhy) { - return this.id.compareTo(clusterPhy.id); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysHealthState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysHealthState.java deleted file mode 100644 index fb1a1982..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysHealthState.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.cluster; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - - -/** - * 集群状态信息 - * @author zengqiao - * @date 22/02/24 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterPhysHealthState { - private Integer unknownCount; - - private Integer goodCount; - - private Integer mediumCount; - - private Integer poorCount; - - private Integer deadCount; - - private Integer total; - - public ClusterPhysHealthState(Integer total) { - this.unknownCount = 0; - this.goodCount = 0; - this.mediumCount = 0; - this.poorCount = 0; - this.deadCount = 0; - this.total = total; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysState.java deleted file mode 100644 index 2f1abc29..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/cluster/ClusterPhysState.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.cluster; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - - -/** - * 集群状态信息 - * @author zengqiao - * @date 22/02/24 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterPhysState { - private Integer liveCount; - - private Integer downCount; - - private Integer unknownCount; - - private Integer total; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/FutureTaskDelayQueueData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/FutureTaskDelayQueueData.java deleted file mode 100644 index 8cd6e7a3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/FutureTaskDelayQueueData.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.common; - -import lombok.Getter; - -import java.util.concurrent.Delayed; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -@Getter -public class FutureTaskDelayQueueData implements Delayed { - private final String taskName; - - private final Future futureTask; - - private final long timeoutTimeUnitMs; - - private final long createTimeUnitMs; - - public FutureTaskDelayQueueData(String taskName, Future futureTask, long timeoutTimeUnitMs) { - this.taskName = taskName; - this.futureTask = futureTask; - this.timeoutTimeUnitMs = timeoutTimeUnitMs; - this.createTimeUnitMs = System.currentTimeMillis(); - } - - @Override - public long getDelay(TimeUnit unit) { - return unit.convert(timeoutTimeUnitMs - System.currentTimeMillis(), TimeUnit.MILLISECONDS); - } - - @Override - public int compareTo(Delayed delayed) { - FutureTaskDelayQueueData other = (FutureTaskDelayQueueData) delayed; - if (this.timeoutTimeUnitMs == other.timeoutTimeUnitMs) { - return (this.timeoutTimeUnitMs + "_" + this.createTimeUnitMs).compareTo((other.timeoutTimeUnitMs + "_" + other.createTimeUnitMs)); - } - - return (this.timeoutTimeUnitMs - other.timeoutTimeUnitMs) <= 0 ? -1: 1; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/IpPortData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/IpPortData.java deleted file mode 100644 index bce708b9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/common/IpPortData.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.common; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class IpPortData implements Serializable { - private static final long serialVersionUID = -428897032994630685L; - - private String ip; - - private String port; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/BaseClusterConfigValue.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/BaseClusterConfigValue.java deleted file mode 100644 index de647a8a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/BaseClusterConfigValue.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config; - -import lombok.Data; - -import java.io.Serializable; - -@Data -public class BaseClusterConfigValue implements Serializable { - /** - * 物理集群ID - */ - protected Long clusterPhyId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/JmxConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/JmxConfig.java deleted file mode 100644 index 87607c1f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/JmxConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "Jmx配置") -public class JmxConfig implements Serializable { - @ApiModelProperty(value="jmx端口", example = "8099") - private Integer jmxPort; - - @ApiModelProperty(value="最大连接", example = "100") - private Integer maxConn; - - @ApiModelProperty(value="是否开启SSL,如果开始则username 与 token 必须非空", example = "false") - private Boolean openSSL; - - @ApiModelProperty(value="SSL情况下的username", example = "Ks-Km") - private String username; - - @ApiModelProperty(value="SSL情况下的token", example = "KsKmCCY19") - private String token; - - @ApiModelProperty(value="使用哪个endpoint网络", example = "EXTERNAL") - private String useWhichEndpoint; -} - - diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/ZKConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/ZKConfig.java deleted file mode 100644 index f0fe41d0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/ZKConfig.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import java.io.Serializable; -import java.util.Properties; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@ApiModel(description = "ZK配置") -public class ZKConfig implements Serializable { - @ApiModelProperty(value="ZK是否开启secure", example = "false") - private Boolean openSecure = false; - - @ApiModelProperty(value="ZK的Session超时时间", example = "15000") - private Integer sessionTimeoutUnitMs = 15000; - - @ApiModelProperty(value="ZK的Request超时时间", example = "5000") - private Integer requestTimeoutUnitMs = 5000; - - @ApiModelProperty(value="ZK的Request超时时间") - private Properties otherProps = new Properties(); - - public Boolean getOpenSecure() { - return openSecure != null && openSecure; - } - - public void setOpenSecure(Boolean openSecure) { - this.openSecure = openSecure; - } - - public Integer getSessionTimeoutUnitMs() { - return sessionTimeoutUnitMs == null? Constant.DEFAULT_SESSION_TIMEOUT_UNIT_MS: sessionTimeoutUnitMs; - } - - public void setSessionTimeoutUnitMs(Integer sessionTimeoutUnitMs) { - this.sessionTimeoutUnitMs = sessionTimeoutUnitMs; - } - - public Integer getRequestTimeoutUnitMs() { - return requestTimeoutUnitMs == null? Constant.DEFAULT_SESSION_TIMEOUT_UNIT_MS: requestTimeoutUnitMs; - } - - public void setRequestTimeoutUnitMs(Integer requestTimeoutUnitMs) { - this.requestTimeoutUnitMs = requestTimeoutUnitMs; - } - - public Properties getOtherProps() { - return otherProps == null? new Properties() : otherProps; - } - - public void setOtherProps(Properties otherProps) { - this.otherProps = otherProps; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/BaseClusterHealthConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/BaseClusterHealthConfig.java deleted file mode 100644 index a22c53fb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/BaseClusterHealthConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.BaseClusterConfigValue; -import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; -import lombok.Data; - -/** - * 单集群的配置 - */ -@Data -public class BaseClusterHealthConfig extends BaseClusterConfigValue { - /** - * 健康检查名称 - */ - protected HealthCheckNameEnum checkNameEnum; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthAmountRatioConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthAmountRatioConfig.java deleted file mode 100644 index 0c4fb60e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthAmountRatioConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck; - -import lombok.Data; - -/** - * @author wyb - * @date 2022/10/26 - */ -@Data -public class HealthAmountRatioConfig extends BaseClusterHealthConfig { - /** - * 总数 - */ - private Integer amount; - /** - * 比例 - */ - private Double ratio; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthCompareValueConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthCompareValueConfig.java deleted file mode 100644 index 273498ea..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthCompareValueConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck; - -import lombok.Data; - -/** - * 单集群配置,比较大小 - */ -@Data -public class HealthCompareValueConfig extends BaseClusterHealthConfig { - /** - * 比较值 - */ - private Double value = 10.0; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthDetectedInLatestMinutesConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthDetectedInLatestMinutesConfig.java deleted file mode 100644 index 5ecffa45..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/healthcheck/HealthDetectedInLatestMinutesConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck; - -import lombok.Data; - -/** - * 最近N分钟被检测到M次 - */ -@Data -public class HealthDetectedInLatestMinutesConfig extends BaseClusterHealthConfig { - /** - * 最近多少时间 - */ - private Integer latestMinutes = 10; - - /** - * 被检测到的次数 - */ - private Integer detectedTimes = 8; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaConfigDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaConfigDetail.java deleted file mode 100644 index 3e352123..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaConfigDetail.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaConfigDetail { - @ApiModelProperty(value = "配置名", example = "retention.ms") - private String name; - - @ApiModelProperty(value = "配置值", example = "1268888") - private String value; - - @ApiModelProperty(value = "默认配置值", example = "1268888") - private String defaultValue; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigSource - */ - @ApiModelProperty(value = "配置源", example = "1268888") - private Integer configSource; - - @ApiModelProperty(value = "敏感的配置", example = "false") - private Boolean sensitive; - - @ApiModelProperty(value = "只读的配置", example = "false") - private Boolean readOnly; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigType - */ - @ApiModelProperty(value = "配置value类型", example = "false") - private Integer configType; - - @ApiModelProperty(value = "配置说明", example = "保存时间") - private String documentation; - - @ApiModelProperty(value = "已覆写配置", example = "false") - private Boolean override; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaTopicDefaultConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaTopicDefaultConfig.java deleted file mode 100644 index 2fccab0f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/kafkaconfig/KafkaTopicDefaultConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaTopicDefaultConfig { - @ApiModelProperty(value = "配置名", example = "retention.ms") - private String name; - - @ApiModelProperty(value = "默认配置值", example = "1268888") - private String defaultValue; - - @ApiModelProperty(value = "只读的配置", example = "false") - private Boolean readOnly; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigType - */ - @ApiModelProperty(value = "配置value类型", example = "false") - private Integer configType; - - @ApiModelProperty(value = "配置说明", example = "保存时间") - private String documentation; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/metric/UserMetricConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/metric/UserMetricConfig.java deleted file mode 100644 index 171cd68f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/config/metric/UserMetricConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.config.metric; - -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class UserMetricConfig { - - private int type; - - private String metric; - - private boolean set; - - private Integer rank; - - public UserMetricConfig(int type, String metric, boolean set, Integer rank) { - this.type = type; - this.metric = metric; - this.set = set; - this.rank = rank; - } - - public UserMetricConfig(int type, String metric, boolean set) { - this.type = type; - this.metric = metric; - this.set = set; - this.rank = null; - } - - @Override - public int hashCode(){ - return metric.hashCode() << 1 + type; - } - - @Override - public boolean equals(Object o){ - if(!(o instanceof UserMetricConfig)) { - // 非 UserMetricConfig 类型,则返回false - return false; - } - - UserMetricConfig u = (UserMetricConfig) o; - return type == u.getType() && metric.equals(u.getMetric()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectCluster.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectCluster.java deleted file mode 100644 index a4c67bbc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectCluster.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.EntityIdInterface; -import lombok.Data; - -import java.io.Serializable; - -@Data -public class ConnectCluster implements Serializable, Comparable, EntityIdInterface { - /** - * 集群ID - */ - private Long id; - - /** - * 集群名字 - */ - private String name; - - /** - * 集群使用的消费组 - */ - private String groupName; - - /** - * 集群使用的消费组状态,也表示集群状态 - * @see com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum - */ - private Integer state; - - /** - * worker中显示的leader url信息 - */ - private String memberLeaderUrl; - - /** - * 版本信息 - */ - private String version; - - /** - * jmx配置 - * @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig - */ - private String jmxProperties; - - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * 集群地址 - */ - private String clusterUrl; - - @Override - public int compareTo(ConnectCluster connectCluster) { - return this.id.compareTo(connectCluster.getId()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectClusterMetadata.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectClusterMetadata.java deleted file mode 100644 index b3243756..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectClusterMetadata.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect; - -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -public class ConnectClusterMetadata implements Serializable { - /** - * Kafka集群名字 - */ - private Long kafkaClusterPhyId; - - /** - * 集群使用的消费组 - */ - private String groupName; - - /** - * 集群使用的消费组状态,也表示集群状态 - */ - private GroupStateEnum state; - - /** - * worker中显示的leader url信息 - */ - private String memberLeaderUrl; - - public ConnectClusterMetadata(Long kafkaClusterPhyId, String groupName, GroupStateEnum state, String memberLeaderUrl) { - this.kafkaClusterPhyId = kafkaClusterPhyId; - this.groupName = groupName; - this.state = state; - this.memberLeaderUrl = memberLeaderUrl; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectWorker.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectWorker.java deleted file mode 100644 index 703a7bc7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/ConnectWorker.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -public class ConnectWorker implements Serializable { - - protected static final ILog LOGGER = LogFactory.getLog(ConnectWorker.class); - - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * 集群ID - */ - private Long connectClusterId; - - /** - * 成员ID - */ - private String memberId; - - /** - * 主机 - */ - private String host; - - /** - * Jmx端口 - */ - private Integer jmxPort; - - /** - * URL - */ - private String url; - - /** - * leader的URL - */ - private String leaderUrl; - - /** - * 1:是leader,0:不是leader - */ - private Integer leader; - - /** - * worker地址 - */ - private String workerId; - - public ConnectWorker(Long kafkaClusterPhyId, - Long connectClusterId, - String memberId, - String host, - Integer jmxPort, - String url, - String leaderUrl, - Integer leader) { - this.kafkaClusterPhyId = kafkaClusterPhyId; - this.connectClusterId = connectClusterId; - this.memberId = memberId; - this.host = host; - this.jmxPort = jmxPort; - this.url = url; - this.leaderUrl = leaderUrl; - this.leader = leader; - String workerId = CommonUtils.getWorkerId(url); - if (workerId == null) { - workerId = memberId; - LOGGER.error("class=ConnectWorker||connectClusterId={}||memberId={}||url={}||msg=analysis url fail" - , connectClusterId, memberId, url); - } - this.workerId = workerId; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/WorkerConnector.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/WorkerConnector.java deleted file mode 100644 index 423e21ce..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/WorkerConnector.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect; - -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -public class WorkerConnector implements Serializable { - /** - * connect集群ID - */ - private Long connectClusterId; - - /** - * kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * connector名称 - */ - private String connectorName; - - private String workerMemberId; - - /** - * 任务状态 - */ - private String state; - - /** - * 任务ID - */ - private Integer taskId; - - /** - * worker信息 - */ - private String workerId; - - /** - * 错误原因 - */ - private String trace; - - public WorkerConnector(Long kafkaClusterPhyId, Long connectClusterId, String connectorName, String workerMemberId, Integer taskId, String state, String workerId, String trace) { - this.kafkaClusterPhyId = kafkaClusterPhyId; - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.workerMemberId = workerMemberId; - this.taskId = taskId; - this.state = state; - this.workerId = workerId; - this.trace = trace; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfo.java deleted file mode 100644 index ffe8c332..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfo.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo; - - -/** - * @see ConfigInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigInfo { - private ConnectConfigKeyInfo definition; - - private ConnectConfigValueInfo value; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfos.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfos.java deleted file mode 100644 index f58adbe0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigInfos.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo; -import org.apache.kafka.connect.runtime.rest.entities.ConfigInfos; - -import java.util.*; - -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.CONNECTOR_CONFIG_ACTION_RELOAD_NAME; -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.CONNECTOR_CONFIG_ERRORS_TOLERANCE_NAME; - -/** - * @see ConfigInfos - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigInfos { - - private static final Map> recommendValuesMap = new HashMap<>(); - - static { - recommendValuesMap.put(CONNECTOR_CONFIG_ACTION_RELOAD_NAME, Arrays.asList("none", "restart")); - recommendValuesMap.put(CONNECTOR_CONFIG_ERRORS_TOLERANCE_NAME, Arrays.asList("none", "all")); - } - private String name; - - private int errorCount; - - private List groups; - - private List configs; - - public ConnectConfigInfos(ConfigInfos configInfos) { - this.name = configInfos.name(); - this.errorCount = configInfos.errorCount(); - this.groups = configInfos.groups(); - - this.configs = new ArrayList<>(); - for (ConfigInfo configInfo: configInfos.values()) { - ConnectConfigKeyInfo definition = new ConnectConfigKeyInfo(); - definition.setName(configInfo.configKey().name()); - definition.setType(configInfo.configKey().type()); - definition.setRequired(configInfo.configKey().required()); - definition.setDefaultValue(configInfo.configKey().defaultValue()); - definition.setImportance(configInfo.configKey().importance()); - definition.setDocumentation(configInfo.configKey().documentation()); - definition.setGroup(configInfo.configKey().group()); - definition.setOrderInGroup(configInfo.configKey().orderInGroup()); - definition.setWidth(configInfo.configKey().width()); - definition.setDisplayName(configInfo.configKey().displayName()); - definition.setDependents(configInfo.configKey().dependents()); - - ConnectConfigValueInfo value = new ConnectConfigValueInfo(); - value.setName(configInfo.configValue().name()); - value.setValue(configInfo.configValue().value()); - value.setRecommendedValues(recommendValuesMap.getOrDefault(configInfo.configValue().name(), configInfo.configValue().recommendedValues())); - value.setErrors(configInfo.configValue().errors()); - value.setVisible(configInfo.configValue().visible()); - - ConnectConfigInfo connectConfigInfo = new ConnectConfigInfo(); - connectConfigInfo.setDefinition(definition); - connectConfigInfo.setValue(value); - - this.configs.add(connectConfigInfo); - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigKeyInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigKeyInfo.java deleted file mode 100644 index 13ada833..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigKeyInfo.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigKeyInfo; - -import java.util.List; - -/** - * @see ConfigKeyInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigKeyInfo { - private String name; - - private String type; - - private boolean required; - - private String defaultValue; - - private String importance; - - private String documentation; - - private String group; - - private int orderInGroup; - - private String width; - - private String displayName; - - private List dependents; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigValueInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigValueInfo.java deleted file mode 100644 index af2aecf5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/config/ConnectConfigValueInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigValueInfo; - -import java.util.List; - -/** - * @see ConfigValueInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigValueInfo { - private String name; - - private String value; - - private List recommendedValues; - - private List errors; - - private boolean visible; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSAbstractConnectState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSAbstractConnectState.java deleted file mode 100644 index a5525768..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSAbstractConnectState.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import com.alibaba.fastjson.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo; - -/** - * @see ConnectorStateInfo.AbstractState - */ -@Data -public abstract class KSAbstractConnectState { - private String state; - - private String trace; - - @JSONField(name="worker_id") - @JsonProperty("worker_id") - private String workerId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnector.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnector.java deleted file mode 100644 index 6b3f7b57..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnector.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import lombok.Data; - -import java.io.Serializable; - -@Data -public class KSConnector implements Serializable { - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * connect集群ID - */ - private Long connectClusterId; - - /** - * connector名称 - */ - private String connectorName; - - /** - * connector类名 - */ - private String connectorClassName; - - /** - * connector类型 - */ - private String connectorType; - - /** - * 访问过的Topic列表 - */ - private String topics; - - /** - * task数 - */ - private Integer taskCount; - - /** - * 状态 - */ - private String state; - - /** - * 心跳检测connector名称 - */ - private String heartbeatConnectorName; - - /** - * 进度确认connector名称 - */ - private String checkpointConnectorName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorInfo.java deleted file mode 100644 index f1c3ed31..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorInfo.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import lombok.Data; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorType; -import org.apache.kafka.connect.util.ConnectorTaskId; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -/** - * copy from: - * @see org.apache.kafka.connect.runtime.rest.entities.ConnectorInfo - */ -@Data -public class KSConnectorInfo implements Serializable { - private Long connectClusterId; - - private String name; - - private Map config; - - private List tasks; - - private ConnectorType type; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorState.java deleted file mode 100644 index 9cd9ea74..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorState.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import lombok.Data; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo; - -/** - * @see ConnectorStateInfo.ConnectorState - */ -@Data -public class KSConnectorState extends KSAbstractConnectState { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorStateInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorStateInfo.java deleted file mode 100644 index 31d6657b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSConnectorStateInfo.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import lombok.Data; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorType; - -import java.util.List; - -/** - * @see ConnectorStateInfo - */ -@Data -public class KSConnectorStateInfo { - private String name; - - private KSConnectorState connector; - - private List tasks; - - private ConnectorType type; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSTaskState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSTaskState.java deleted file mode 100644 index 323291b0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/connector/KSTaskState.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector; - -import lombok.Data; -import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo; - -/** - * @see ConnectorStateInfo.TaskState - */ -@Data -public class KSTaskState extends KSAbstractConnectState { - private int id; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/mm2/MirrorMakerTopic.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/mm2/MirrorMakerTopic.java deleted file mode 100644 index aea8a33c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/mm2/MirrorMakerTopic.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.mm2; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -/** - * @author wyb - * @date 2022/12/14 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class MirrorMakerTopic { - - /** - * mm2集群别名 - */ - private String clusterAlias; - - /** - * topic名称 - */ - private String topicName; - - /** - * partition在connect上的分布 Map - */ - private Map partitionMap; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/plugin/ConnectPluginBasic.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/plugin/ConnectPluginBasic.java deleted file mode 100644 index 82c2ad84..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/connect/plugin/ConnectPluginBasic.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.plugin; - -import com.alibaba.fastjson.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * @author zengqiao - * @date 22/10/17 - */ -@Data -@ApiModel(description = "Connect插件信息") -@NoArgsConstructor -public class ConnectPluginBasic implements Serializable { - /** - * Json序列化时对应的字段 - */ - @JSONField(name="class") - @JsonProperty("class") - private String className; - - private String type; - - private String version; - - private String helpDocLink; - - public ConnectPluginBasic(String className, String type, String version, String helpDocLink) { - this.className = className; - this.type = type; - this.version = version; - this.helpDocLink = helpDocLink; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/Group.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/Group.java deleted file mode 100644 index 656924b7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/Group.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.group; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSGroupDescription; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author wyb - * @date 2022/10/10 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Group { - /** - * 集群id - */ - private Long clusterPhyId; - - /** - * group类型 - * @see GroupTypeEnum - */ - private GroupTypeEnum type; - - /** - * group名称 - */ - private String name; - - /** - * group状态 - * @see GroupStateEnum - */ - private GroupStateEnum state; - - /** - * group成员数量 - */ - private Integer memberCount; - - /** - * group消费的topic列表 - */ - private List topicMembers; - - /** - * group分配策略 - */ - private String partitionAssignor; - - /** - * group协调器brokerId - */ - private int coordinatorId; - - public Group(Long clusterPhyId, String groupName, KSGroupDescription groupDescription) { - this.clusterPhyId = clusterPhyId; - this.type = GroupTypeEnum.getTypeByProtocolType(groupDescription.protocolType()); - this.name = groupName; - this.state = GroupStateEnum.getByRawState(groupDescription.state()); - this.memberCount = groupDescription.members() == null ? 0 : groupDescription.members().size(); - this.topicMembers = new ArrayList<>(); - this.partitionAssignor = groupDescription.partitionAssignor(); - this.coordinatorId = groupDescription.coordinator() == null ? Constant.INVALID_CODE : groupDescription.coordinator().id(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopic.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopic.java deleted file mode 100644 index f0b59cce..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopic.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.group; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * @author zengqiao - * @date 19/5/14 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupTopic implements Serializable { - private String groupName; - - private String topicName; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicMember.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicMember.java deleted file mode 100644 index 5fe960b1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicMember.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.group; - -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/10/10 - */ -@Data -@NoArgsConstructor -public class GroupTopicMember { - /** - * Topic名称 - */ - private String topicName; - - /** - * 消费此Topic的成员数量 - */ - private Integer memberCount; - - public GroupTopicMember(String topicName, Integer memberCount) { - this.topicName = topicName; - this.memberCount = memberCount; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicPartition.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicPartition.java deleted file mode 100644 index e1e946a1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/group/GroupTopicPartition.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.group; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.List; - -/** - * @author zengqiao - * @date 19/5/14 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupTopicPartition implements Serializable { - private String groupName; - - private String topicName; - - private List partitionIdList; - - public GroupTopicPartition(String groupName, String topicName) { - this.groupName = groupName; - this.topicName = topicName; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/ha/HaActiveStandbyRelation.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/ha/HaActiveStandbyRelation.java deleted file mode 100644 index db306641..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/ha/HaActiveStandbyRelation.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.ha; - -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.enums.ha.HaResTypeEnum; -import lombok.Data; - -@Data -public class HaActiveStandbyRelation extends BasePO { - private Long activeClusterPhyId; - - private Long standbyClusterPhyId; - - /** - * 资源名称 - */ - private String resName; - - /** - * 资源类型,0:集群,1:镜像Topic,2:主备Topic - * @see HaResTypeEnum - */ - private Integer resType; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckAggResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckAggResult.java deleted file mode 100644 index afd42120..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckAggResult.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.health; - -import com.xiaojukeji.know.streaming.km.common.bean.po.health.HealthCheckResultPO; -import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Data -@NoArgsConstructor -public class HealthCheckAggResult { - protected HealthCheckNameEnum checkNameEnum; - - protected List poList; - - protected Boolean passed; - - public HealthCheckAggResult(HealthCheckNameEnum checkNameEnum, List poList) { - this.checkNameEnum = checkNameEnum; - this.poList = poList; - if (ValidateUtils.isEmptyList(poList) || poList.stream().filter(elem -> elem.getPassed() <= 0).count() <= 0) { - passed = true; - } else { - passed = false; - } - } - - public Integer getTotalCount() { - if (poList == null) { - return 0; - } - - return poList.size(); - } - - public Integer getPassedCount() { - if (poList == null) { - return 0; - } - return (int) (poList.stream().filter(elem -> elem.getPassed() > 0).count()); - } - - public List getNotPassedResNameList() { - if (poList == null) { - return new ArrayList<>(); - } - - return poList.stream().filter(elem -> elem.getPassed() <= 0 && !ValidateUtils.isBlank(elem.getResName())).map(elem -> elem.getResName()).collect(Collectors.toList()); - } - - public Date getCreateTime() { - if (ValidateUtils.isEmptyList(poList)) { - return null; - } - - return poList.get(0).getCreateTime(); - } - - public Date getUpdateTime() { - if (ValidateUtils.isEmptyList(poList)) { - return null; - } - - return poList.get(0).getUpdateTime(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckResult.java deleted file mode 100644 index 5613a3a0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthCheckResult.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.health; - -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class HealthCheckResult { - /** - * 检查维度(0:未知,1:Cluster,2:Broker,3:Topic,4:Group) - */ - private Integer dimension; - - /** - * 配置ID - */ - private String configName; - - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * 资源名称 - */ - private String resName; - - /** - * 是否通过 - */ - private Integer passed; - - public HealthCheckResult(Integer dimension, String configName, Long clusterPhyId, String resName) { - this.dimension = dimension; - this.configName = configName; - this.clusterPhyId = clusterPhyId; - this.resName = resName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthScoreResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthScoreResult.java deleted file mode 100644 index 302feb5b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/health/HealthScoreResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.health; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig; -import com.xiaojukeji.know.streaming.km.common.bean.po.health.HealthCheckResultPO; -import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -public class HealthScoreResult extends HealthCheckAggResult { - private BaseClusterHealthConfig baseConfig; - - public HealthScoreResult(HealthCheckNameEnum checkNameEnum, - BaseClusterHealthConfig baseConfig, - List poList) { - super(checkNameEnum, poList); - this.baseConfig = baseConfig; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/Job.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/Job.java deleted file mode 100644 index 1f14726f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/Job.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.BaseEntity; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.content.BaseJobCreateContent; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Job extends BaseEntity { - /** - * 序列化版本号 - */ - private static final long serialVersionUID = 1L; - - /** - * id - */ - private Long id; - - /** - * 集群id - */ - private Long clusterId; - - /** - * 标题 - */ - private String jobName; - - /** - * 标题 - */ - private String jobDesc; - - /** - * 任务类型 - */ - private Integer jobType; - - /** - * 任务状态 - */ - private Integer jobStatus; - - /** - * 创建任务的详细数据 - * @see BaseJobCreateContent - */ - private String jobData; - - /** - * 任务执行对象 - */ - private String target; - - /** - * 任务运行详细状态(json), Success:7 Fail:1 Doing:2 - */ - private String runningStatus; - - /** - * 任务计划开始执行时间 - */ - private Date planTime; - - /** - * 任务实际开始执行时间 - */ - private Date startTime; - - /** - * 创建人 - */ - private String creator; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/JobStatus.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/JobStatus.java deleted file mode 100644 index 92623566..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/JobStatus.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job; - -import com.xiaojukeji.know.streaming.km.common.enums.job.JobStatusEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -public class JobStatus { - - /** - * @see JobStatusEnum - */ - private int status; - - private int total; - - private int success; - - private int failed; - - private int doing; - - private int waiting; - - private int unknown; - - /** - * 按照状态,直接进行聚合 - */ - public JobStatus(List jobStatusList) { - this.total = jobStatusList.size(); - this.success = 0; - this.failed = 0; - this.doing = 0; - this.waiting = 0; - this.unknown = 0; - for (Integer jobStatus: jobStatusList) { - if (JobStatusEnum.SUCCESS.getStatus() == jobStatus) { - success += 1; - } else if (JobStatusEnum.FAILED.getStatus() == jobStatus) { - failed += 1; - } else if (JobStatusEnum.RUNNING.getStatus() == jobStatus) { - doing += 1; - } else if (JobStatusEnum.WAITING.getStatus() == jobStatus) { - waiting += 1; - } else { - unknown += 1; - } - } - - this.status = JobStatusEnum.getStatusBySubStatus(this.total, this.success, this.failed, this.doing).getStatus(); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/BaseJobCreateContent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/BaseJobCreateContent.java deleted file mode 100644 index 0041328e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/BaseJobCreateContent.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.content; - -import lombok.Data; - -@Data -public class BaseJobCreateContent { - protected int type; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/JobCommunityReassignContent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/JobCommunityReassignContent.java deleted file mode 100644 index 5d549d3a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/content/JobCommunityReassignContent.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.content; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.plan.ReassignTopicPlanDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Data -@ApiModel(description="创建/修改迁移及扩缩副本任务") -public class JobCommunityReassignContent extends BaseJobCreateContent { - @Min(value = 1, message = "clusterId不允许为null或者小于0") - @ApiModelProperty(value = "集群ID, 默认为逻辑集群ID", example = "6") - private Long clusterId; - - @Min(value = 1, message = "throttle不允许为null或者小于0") - @ApiModelProperty(value = "限流值", example = "102400000") - private Long throttleUnitB; - - @NotNull(message = "description不允许为null") - @ApiModelProperty(value = "备注信息", example = "测试") - private String description; - - @NotNull(message = "topicPlanList不允许为空") - @ApiModelProperty("迁移计划") - private List topicPlanList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobDetail.java deleted file mode 100644 index 5f613b9d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobDetail.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobVO; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -@Data -public class JobDetail { - - /** - * 任务id - */ - private Long id; - - /** - * 任务类型 - */ - private Integer jobType; - - /** - * 任务名称 - */ - private String jobName; - - /** - * 任务状态 - */ - private Integer jobStatus; - - /** - * 任务描述 - */ - private String jobDesc; - - /** - * 任务计划执行时间 - */ - private Date planTime; - - /** - * 任务开始执行时间 - */ - private Date startTime; - - /** - * 任务完成执行时间 - */ - private Date endTime; - - /** - * 任务限流值 - */ - private Double flowLimit; - - /** - * 子任务成功数 - */ - private Integer total; - - /** - * 子任务成功数 - */ - private Integer success; - - /** - * 子任务失败数 - */ - private Integer fail; - - /** - * 子任务进行数 - */ - private Integer doing; - - /** - * 子任务列表,不同的子任务的实现不一样,需要具体场景具体处理 - */ - private List subJobs; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobModifyDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobModifyDetail.java deleted file mode 100644 index 57ebddfd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/JobModifyDetail.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.BaseEntity; -import lombok.Data; - -import java.util.Date; - -@Data -public class JobModifyDetail extends BaseEntity { - - /** - * 任务id - */ - private Long id; - - /** - * 任务类型 - */ - private Integer jobType; - - /** - * 任务名称 - */ - private String jobName; - - /** - * 任务描述 - */ - private String jobDesc; - - /** - * 任务状态 - */ - private Integer jobStatus; - - /** - * 任务扩展数据 - */ - private String jobData; - - /** - * 任务计划开始执行时间 - */ - private Date planTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubBrokerJobDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubBrokerJobDetail.java deleted file mode 100644 index 91011fc6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubBrokerJobDetail.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import lombok.Data; - -import java.util.List; - -@Data -public abstract class SubBrokerJobDetail extends SubJobDetail{ - /** - * 源brokerId列表 - */ - private List sourceBrokers; - - /** - * 目的brokerId列表 - */ - private List desBrokers; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobDetail.java deleted file mode 100644 index de9cd45b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobDetail.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -public abstract class SubJobDetail { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobPartitionDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobPartitionDetail.java deleted file mode 100644 index 5a912d07..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobPartitionDetail.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class SubJobPartitionDetail { - /** - * partitionId - */ - private Integer partitionId; - - /** - * 源BrokerID - */ - private Integer sourceBrokerId; - - /** - * 目标BrokerID - */ - private List desBrokerIds; - - /** - * 需迁移MessageSize - */ - private Double totalSize; - - /** - * 已完成MessageSize - */ - private Double movedSize; - - /** - * 任务状态 - */ - private String status; - - /** - * 预计剩余时长 - */ - private Long remainTime; - - /** - * BytesIn - */ - private Long byteIn; - - /** - * 同步速率 - */ - private Long byteMove; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaMoveDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaMoveDetail.java deleted file mode 100644 index 7a4d1ad5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaMoveDetail.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import lombok.Data; - -import java.util.List; - -@Data -public class SubJobReplicaMoveDetail extends SubBrokerJobDetail { - /** - * topic 名称 - */ - private String topicName; - - /** - * 分区列表 - */ - private List partitions; - - /** - * 当前数据保存时间 - */ - private Long currentTimeSpent; - - /** - * 迁移数据时间范围 - */ - private Long moveTimeSpent; - - /** - * 状态 - */ - private Integer status; - - /** - * 需迁移MessageSize - */ - private Double totalSize; - - /** - * 已完成MessageSize - */ - private Double movedSize; - - /** - * 预计剩余时长 - */ - private Long remainTime; - - /** - * 子任务成功数 - */ - private Integer total; - - /** - * 子任务成功数 - */ - private Integer success; - - /** - * 子任务失败数 - */ - private Integer fail; - - /** - * 子任务进行数 - */ - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaScalaDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaScalaDetail.java deleted file mode 100644 index 37cfaf52..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/job/detail/SubJobReplicaScalaDetail.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail; - -import lombok.Data; - -@Data -public class SubJobReplicaScalaDetail extends SubBrokerJobDetail { - /** - * topic 名称 - */ - private String topicName; - - /** - * 原副本数 - */ - private Integer oldReplicaNu; - - /** - * 新副本数 - */ - private Integer newReplicaNu; - - /** - * 状态 - */ - private Integer status; - - /** - * 需迁移MessageSize - */ - private Double totalSize; - - /** - * 已完成MessageSize - */ - private Double movedSize; - - /** - * 预计剩余时长 - */ - private Long remainTime; - - /** - * 子任务成功数 - */ - private Integer total; - - /** - * 子任务成功数 - */ - private Integer success; - - /** - * 子任务失败数 - */ - private Integer fail; - - /** - * 子任务进行数 - */ - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSDescribeGroupsResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSDescribeGroupsResult.java deleted file mode 100644 index 9630703c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSDescribeGroupsResult.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import org.apache.kafka.common.KafkaFuture; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -public class KSDescribeGroupsResult { - private final Map> futures; - - public KSDescribeGroupsResult(final Map> futures) { - this.futures = futures; - } - - /** - * Return a map from group id to futures which yield group descriptions. - */ - public Map> describedGroups() { - return futures; - } - - /** - * Return a future which yields all ConsumerGroupDescription objects, if all the describes succeed. - */ - public KafkaFuture> all() { - return KafkaFuture.allOf(futures.values().toArray(new KafkaFuture[0])).thenApply( - new KafkaFuture.BaseFunction>() { - @Override - public Map apply(Void v) { - try { - Map descriptions = new HashMap<>(futures.size()); - for (Map.Entry> entry : futures.entrySet()) { - descriptions.put(entry.getKey(), entry.getValue().get()); - } - return descriptions; - } catch (InterruptedException | ExecutionException e) { - // This should be unreachable, since the KafkaFuture#allOf already ensured - // that all of the futures completed successfully. - throw new RuntimeException(e); - } - } - }); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSGroupDescription.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSGroupDescription.java deleted file mode 100644 index c58f89d2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSGroupDescription.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import org.apache.kafka.common.ConsumerGroupState; -import org.apache.kafka.common.Node; -import org.apache.kafka.common.acl.AclOperation; -import org.apache.kafka.common.utils.Utils; - -import java.util.*; - -public class KSGroupDescription { - private final String groupId; - private final String protocolType; - private final Collection members; - private final String partitionAssignor; - private final ConsumerGroupState state; - private final Node coordinator; - private final Set authorizedOperations; - - public KSGroupDescription(String groupId, - String protocolType, - Collection members, - String partitionAssignor, - ConsumerGroupState state, - Node coordinator) { - this(groupId, protocolType, members, partitionAssignor, state, coordinator, Collections.emptySet()); - } - - public KSGroupDescription(String groupId, - String protocolType, - Collection members, - String partitionAssignor, - ConsumerGroupState state, - Node coordinator, - Set authorizedOperations) { - this.groupId = groupId == null ? "" : groupId; - this.protocolType = protocolType; - this.members = members == null ? Collections.emptyList() : - Collections.unmodifiableList(new ArrayList<>(members)); - this.partitionAssignor = partitionAssignor == null ? "" : partitionAssignor; - this.state = state; - this.coordinator = coordinator; - this.authorizedOperations = authorizedOperations; - } - - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - final KSGroupDescription that = (KSGroupDescription) o; - return protocolType == that.protocolType && - Objects.equals(groupId, that.groupId) && - Objects.equals(members, that.members) && - Objects.equals(partitionAssignor, that.partitionAssignor) && - state == that.state && - Objects.equals(coordinator, that.coordinator) && - Objects.equals(authorizedOperations, that.authorizedOperations); - } - - @Override - public int hashCode() { - return Objects.hash(groupId, protocolType, members, partitionAssignor, state, coordinator, authorizedOperations); - } - - /** - * The id of the consumer group. - */ - public String groupId() { - return groupId; - } - - /** - * If consumer group is simple or not. - */ - public String protocolType() { - return protocolType; - } - - /** - * A list of the members of the consumer group. - */ - public Collection members() { - return members; - } - - /** - * The consumer group partition assignor. - */ - public String partitionAssignor() { - return partitionAssignor; - } - - /** - * The consumer group state, or UNKNOWN if the state is too new for us to parse. - */ - public ConsumerGroupState state() { - return state; - } - - /** - * The consumer group coordinator, or null if the coordinator is not known. - */ - public Node coordinator() { - return coordinator; - } - - /** - * authorizedOperations for this group, or null if that information is not known. - */ - public Set authorizedOperations() { - return authorizedOperations; - } - - @Override - public String toString() { - return "(groupId=" + groupId + - ", protocolType=" + protocolType + - ", members=" + Utils.join(members, ",") + - ", partitionAssignor=" + partitionAssignor + - ", state=" + state + - ", coordinator=" + coordinator + - ", authorizedOperations=" + authorizedOperations + - ")"; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSListGroupsResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSListGroupsResult.java deleted file mode 100644 index 9f07138b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSListGroupsResult.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import org.apache.kafka.clients.admin.ConsumerGroupListing; -import org.apache.kafka.common.KafkaFuture; -import org.apache.kafka.common.internals.KafkaFutureImpl; - -import java.util.ArrayList; -import java.util.Collection; - -public class KSListGroupsResult { - private final KafkaFutureImpl> all; - private final KafkaFutureImpl> valid; - private final KafkaFutureImpl> errors; - - public KSListGroupsResult(KafkaFutureImpl> future) { - this.all = new KafkaFutureImpl<>(); - this.valid = new KafkaFutureImpl<>(); - this.errors = new KafkaFutureImpl<>(); - future.thenApply(new KafkaFuture.BaseFunction, Void>() { - @Override - public Void apply(Collection results) { - ArrayList curErrors = new ArrayList<>(); - ArrayList curValid = new ArrayList<>(); - for (Object resultObject : results) { - if (resultObject instanceof Throwable) { - curErrors.add((Throwable) resultObject); - } else { - curValid.add((ConsumerGroupListing) resultObject); - } - } - if (!curErrors.isEmpty()) { - all.completeExceptionally(curErrors.get(0)); - } else { - all.complete(curValid); - } - valid.complete(curValid); - errors.complete(curErrors); - return null; - } - }); - } - - /** - * Returns a future that yields either an exception, or the full set of consumer group - * listings. - * - * In the event of a failure, the future yields nothing but the first exception which - * occurred. - */ - public KafkaFuture> all() { - return all; - } - - /** - * Returns a future which yields just the valid listings. - * - * This future never fails with an error, no matter what happens. Errors are completely - * ignored. If nothing can be fetched, an empty collection is yielded. - * If there is an error, but some results can be returned, this future will yield - * those partial results. When using this future, it is a good idea to also check - * the errors future so that errors can be displayed and handled. - */ - public KafkaFuture> valid() { - return valid; - } - - /** - * Returns a future which yields just the errors which occurred. - * - * If this future yields a non-empty collection, it is very likely that elements are - * missing from the valid() set. - * - * This future itself never fails with an error. In the event of an error, this future - * will successfully yield a collection containing at least one exception. - */ - public KafkaFuture> errors() { - return errors; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberBaseAssignment.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberBaseAssignment.java deleted file mode 100644 index 3c38e4e5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberBaseAssignment.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -public class KSMemberBaseAssignment { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConnectAssignment.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConnectAssignment.java deleted file mode 100644 index ba6bf638..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConnectAssignment.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import lombok.Getter; -import org.apache.kafka.connect.runtime.distributed.ConnectProtocol; - - -@Getter -public class KSMemberConnectAssignment extends KSMemberBaseAssignment { - private final ConnectProtocol.Assignment assignment; - - private final ConnectProtocol.WorkerState workerState; - - public KSMemberConnectAssignment(ConnectProtocol.Assignment assignment, ConnectProtocol.WorkerState workerState) { - this.assignment = assignment; - this.workerState = workerState; - } - - @Override - public String toString() { - return "KSMemberConnectAssignment{" + - "assignment=" + assignment + - ", workerState=" + workerState + - '}'; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConsumerAssignment.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConsumerAssignment.java deleted file mode 100644 index 0a9950c3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberConsumerAssignment.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import org.apache.kafka.common.TopicPartition; -import org.apache.kafka.common.utils.Utils; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -public class KSMemberConsumerAssignment extends KSMemberBaseAssignment { - private final Set topicPartitions; - - /** - * Creates an instance with the specified parameters. - * - * @param topicPartitions List of topic partitions - */ - public KSMemberConsumerAssignment(Set topicPartitions) { - this.topicPartitions = topicPartitions == null ? Collections.emptySet() : - Collections.unmodifiableSet(new HashSet<>(topicPartitions)); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - KSMemberConsumerAssignment that = (KSMemberConsumerAssignment) o; - - return Objects.equals(topicPartitions, that.topicPartitions); - } - - @Override - public int hashCode() { - return topicPartitions != null ? topicPartitions.hashCode() : 0; - } - - /** - * The topic partitions assigned to a group member. - */ - public Set topicPartitions() { - return topicPartitions; - } - - @Override - public String toString() { - return "(topicPartitions=" + Utils.join(topicPartitions, ",") + ")"; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberDescription.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberDescription.java deleted file mode 100644 index 2690ba77..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafka/KSMemberDescription.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafka; - -import java.util.Objects; -import java.util.Optional; - -public class KSMemberDescription { - private final String memberId; - private final Optional groupInstanceId; - private final String clientId; - private final String host; - private final KSMemberBaseAssignment assignment; - - public KSMemberDescription(String memberId, - Optional groupInstanceId, - String clientId, - String host, - KSMemberBaseAssignment assignment) { - this.memberId = memberId == null ? "" : memberId; - this.groupInstanceId = groupInstanceId; - this.clientId = clientId == null ? "" : clientId; - this.host = host == null ? "" : host; - this.assignment = assignment == null ? - new KSMemberBaseAssignment() : assignment; - } - - public KSMemberDescription(String memberId, - String clientId, - String host, - KSMemberBaseAssignment assignment) { - this(memberId, Optional.empty(), clientId, host, assignment); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - KSMemberDescription that = (KSMemberDescription) o; - return memberId.equals(that.memberId) && - groupInstanceId.equals(that.groupInstanceId) && - clientId.equals(that.clientId) && - host.equals(that.host) && - assignment.equals(that.assignment); - } - - @Override - public int hashCode() { - return Objects.hash(memberId, groupInstanceId, clientId, host, assignment); - } - - /** - * The consumer id of the group member. - */ - public String consumerId() { - return memberId; - } - - /** - * The instance id of the group member. - */ - public Optional groupInstanceId() { - return groupInstanceId; - } - - /** - * The client id of the group member. - */ - public String clientId() { - return clientId; - } - - /** - * The host where the group member is running. - */ - public String host() { - return host; - } - - /** - * The assignment of the group member. - */ - public KSMemberBaseAssignment assignment() { - return assignment; - } - - @Override - public String toString() { - return "(memberId=" + memberId + - ", groupInstanceId=" + groupInstanceId.orElse("null") + - ", clientId=" + clientId + - ", host=" + host + - ", assignment=" + assignment + ")"; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkacontroller/KafkaController.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkacontroller/KafkaController.java deleted file mode 100644 index 8bbf04e5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkacontroller/KafkaController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafkacontroller; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -public class KafkaController implements Serializable { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * brokerId - */ - private Integer brokerId; - - /** - * 被选举时间 - */ - private Long timestamp; - - public KafkaController(Long clusterPhyId, Integer brokerId, Long timestamp) { - this.clusterPhyId = clusterPhyId; - this.brokerId = brokerId; - this.timestamp = timestamp; - } - - public boolean alive() { - return !brokerId.equals(Constant.INVALID_CODE); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkauser/KafkaUser.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkauser/KafkaUser.java deleted file mode 100644 index a8cbccf9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/kafkauser/KafkaUser.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.kafkauser; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.clients.admin.ScramMechanism; - -import java.util.*; - -@Data -@NoArgsConstructor -public class KafkaUser { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * KafkaUser - */ - private String name; - - /** - * 密钥 - */ - private String token; - - /** - * 原始数据 - */ - private Properties props; - - public KafkaUser(Long clusterPhyId, String name, String token, Properties props) { - this.clusterPhyId = clusterPhyId; - this.name = name; - this.token = token; - this.props = props; - } - - public String getCredentialString() { - List credentialList = new ArrayList<>(); - for (ScramMechanism scramMechanism: ScramMechanism.values()) { - if (!props.containsKey(scramMechanism.mechanismName())) { - continue; - } - credentialList.add(props.getProperty(scramMechanism.mechanismName())); - } - - return ConvertUtil.list2String(credentialList, Constant.COMMA); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BaseMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BaseMetrics.java deleted file mode 100644 index c6ce6351..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BaseMetrics.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -import java.io.Serializable; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author zengqiao - * @date 20/6/16 - */ -@Data -@ToString -@NoArgsConstructor -@AllArgsConstructor -public abstract class BaseMetrics implements Serializable { - protected Long clusterPhyId; - - protected Long timestamp = monitorTimestamp2min(System.currentTimeMillis()); - - protected Map metrics = new ConcurrentHashMap<>(); - - public void putMetric(String key, Float value){ - metrics.put(key, value); - } - - public void putMetric(Map metrics){ this.metrics.putAll(metrics);} - - public Float getMetric(String key) { - return metrics.get(key); - } - - protected BaseMetrics(Long clusterPhyId) { - this.clusterPhyId = clusterPhyId; - } - - public abstract String unique(); -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BrokerMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BrokerMetrics.java deleted file mode 100644 index 28fac3b9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/BrokerMetrics.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class BrokerMetrics extends BaseMetrics { - private Integer brokerId; - - private String host; - - private Integer port; - - public BrokerMetrics(Long clusterPhyId, Integer brokerId){ - super(clusterPhyId); - this.brokerId = brokerId; - } - - public BrokerMetrics(Long clusterPhyId, Integer brokerId, String host, Integer port){ - super(clusterPhyId); - this.brokerId = brokerId; - this.host = host; - this.port = port; - } - - public static BrokerMetrics initWithMetric(Long clusterPhyId, Integer brokerId, String metric, Float value){ - BrokerMetrics brokerMetrics = new BrokerMetrics(); - brokerMetrics.setClusterPhyId( clusterPhyId ); - brokerMetrics.setBrokerId( brokerId ); - brokerMetrics.putMetric(metric, value); - return brokerMetrics; - } - - @Override - public String unique() { - return "B@" + clusterPhyId + "@" + brokerId; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterMetrics.java deleted file mode 100644 index 0ed48c66..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterMetrics.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/18 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class ClusterMetrics extends BaseMetrics { - private String kafkaVersion; - - public ClusterMetrics(Long clusterPhyId){ - super(clusterPhyId); - } - - public ClusterMetrics(Long clusterPhyId, String kafkaVersion){ - super(clusterPhyId); - this.kafkaVersion = kafkaVersion; - } - - public static ClusterMetrics initWithMetrics(Long clusterId, String metric, Float value){ - ClusterMetrics clusterMetrics = new ClusterMetrics(); - clusterMetrics.setClusterPhyId(clusterId); - clusterMetrics.putMetric(metric, value); - - return clusterMetrics; - } - - public static ClusterMetrics initWithMetrics(Long clusterId, String metric, int value){ - ClusterMetrics clusterMetrics = new ClusterMetrics(); - clusterMetrics.setClusterPhyId(clusterId); - clusterMetrics.putMetric(metric, (float)value); - - return clusterMetrics; - } - - @Override - public String unique() { - return "C@" + clusterPhyId; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterPagingMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterPagingMetrics.java deleted file mode 100644 index 690cb0ba..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ClusterPagingMetrics.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterPagingMetrics { - private Long clusterId; - private Float sortValue; - private Map metricValues; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/GroupMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/GroupMetrics.java deleted file mode 100644 index 7d232da5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/GroupMetrics.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.ONE; -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.ZERO; - -/** - * Consumer实体类 - * @author tukun - * @date 2015/11/12 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class GroupMetrics extends BaseMetrics{ - private String group; - - private String topic; - - private Integer partitionId; - - /** - * true: group维度的指标, topicName & partitionId 为null; false: group & topicName & partitionId维度的指标 - */ - private boolean bGroupMetric; - - /** - * 1: group维度的指标, 0: group & topicName & partitionId维度的指标 - * 针对类似枚举和状态类属性,使用字符串来表示比使用数值或者bool类型,ES的查询效率更高 - */ - private String groupMetric; - - public GroupMetrics(Long clusterPhyId, String group, boolean bGroupMetric){ - this.clusterPhyId = clusterPhyId; - this.group = group; - this.bGroupMetric = bGroupMetric; - this.groupMetric = bGroupMetric ? ONE : ZERO; - } - - public GroupMetrics(Long clusterPhyId, String group, String topic, Integer partitionId) { - this.clusterPhyId = clusterPhyId; - this.group = group; - this.topic = topic; - this.partitionId = partitionId; - this.bGroupMetric = false; - this.groupMetric = ZERO; - } - - public GroupMetrics(Long clusterPhyId, Integer partitionId, String topic, String group, boolean bGroupMetric) { - super(clusterPhyId); - this.partitionId = partitionId; - this.topic = topic; - this.group = group; - this.bGroupMetric = bGroupMetric; - this.groupMetric = bGroupMetric ? ONE : ZERO; - } - - @Override - public String unique() { - return ONE.equals( bGroupMetric ) ? "G@" +clusterPhyId + "@" + group - : "G@" +clusterPhyId + "@" + group + "@" + partitionId + "@" + topic; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/PartitionMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/PartitionMetrics.java deleted file mode 100644 index 1725efdb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/PartitionMetrics.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class PartitionMetrics extends BaseMetrics { - private String topic; - - private Integer partitionId; - - private Integer brokerId; - - public PartitionMetrics(Long clusterId, String topicName, Integer brokerId, Integer partitionId) { - super(clusterId); - this.topic = topicName; - this.brokerId = brokerId; - this.partitionId = partitionId; - } - - @Override - public String unique() { - return "P@" + clusterPhyId + "@" + topic + "@" + brokerId + "@" +partitionId; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ReplicationMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ReplicationMetrics.java deleted file mode 100644 index 52a45048..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ReplicationMetrics.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ReplicationMetrics extends BaseMetrics{ - private String topic; - - private Integer partitionId; - - private Integer brokerId; - - public ReplicationMetrics(Long clusterId, String topicName, Integer brokerId, Integer partitionId){ - super(clusterId); - this.topic = topicName; - this.brokerId = brokerId; - this.partitionId = partitionId; - } - - @Override - public String unique() { - return "R@" + clusterPhyId + "@" + topic + "@" + brokerId + "@" +partitionId; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicMetrics.java deleted file mode 100644 index 60ea7797..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicMetrics.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.ONE; -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.ZERO; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class TopicMetrics extends BaseMetrics { - private String topic; - - private Integer brokerId; - - /** - * topic的指标是否是有broker上的指标聚合而来,true的时候brokerId为null - */ - private boolean bBrokerAgg = true; - - /** - * brokerAgg: 1:是由broker聚合而成的topic整体维度指标,0:是broker维度的指标 - * 针对类似枚举和状态类属性,使用字符串来表示,ES的查询效率更高 - */ - private String brokerAgg = ONE; - - public TopicMetrics(String topic, Long clusterPhyId){ - this.topic = topic; - this.clusterPhyId = clusterPhyId; - this.bBrokerAgg = true; - this.brokerAgg = bBrokerAgg ? ONE : ZERO; - } - - public TopicMetrics(String topic, Long clusterPhyId, boolean bBrokerAgg){ - this.topic = topic; - this.clusterPhyId = clusterPhyId; - this.bBrokerAgg = bBrokerAgg; - this.brokerAgg = bBrokerAgg ? ONE : ZERO; - } - - public TopicMetrics(String topic, Long clusterPhyId, Integer brokerId, boolean bBrokerAgg){ - this.topic = topic; - this.clusterPhyId = clusterPhyId; - this.brokerId = brokerId; - this.bBrokerAgg = bBrokerAgg; - this.brokerAgg = bBrokerAgg ? ONE : ZERO; - } - - @Override - public String unique() { - return ONE.equals( bBrokerAgg ) ? "T@" + clusterPhyId + "@" + topic - : "T@" + clusterPhyId + "@" + brokerId + "@" + topic; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicPagingMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicPagingMetrics.java deleted file mode 100644 index d38f9243..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/TopicPagingMetrics.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicPagingMetrics { - private String topic; - private Float sortValue; - private Map metricValues; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ZookeeperMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ZookeeperMetrics.java deleted file mode 100644 index 823125b5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/ZookeeperMetrics.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics; - -import lombok.Data; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@ToString -public class ZookeeperMetrics extends BaseMetrics { - public ZookeeperMetrics(Long clusterPhyId) { - super(clusterPhyId); - } - - public static ZookeeperMetrics initWithMetric(Long clusterPhyId, String metric, Float value) { - ZookeeperMetrics metrics = new ZookeeperMetrics(clusterPhyId); - metrics.setClusterPhyId( clusterPhyId ); - metrics.putMetric(metric, value); - return metrics; - } - - @Override - public String unique() { - return "ZK@" + clusterPhyId; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectClusterMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectClusterMetrics.java deleted file mode 100644 index fe710391..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectClusterMetrics.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class ConnectClusterMetrics extends BaseMetrics { - private Long connectClusterId; - - public ConnectClusterMetrics(Long clusterPhyId, Long connectClusterId){ - super(clusterPhyId); - this.connectClusterId = connectClusterId; - } - - public static ConnectClusterMetrics initWithMetric(Long connectClusterId, String metric, Float value) { - ConnectClusterMetrics brokerMetrics = new ConnectClusterMetrics(connectClusterId, connectClusterId); - brokerMetrics.putMetric(metric, value); - return brokerMetrics; - } - - @Override - public String unique() { - return "KCC@" + clusterPhyId + "@" + connectClusterId; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectWorkerMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectWorkerMetrics.java deleted file mode 100644 index 78d9fe06..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectWorkerMetrics.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author wyb - * @date 2022/11/2 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class ConnectWorkerMetrics extends BaseMetrics { - - private Long connectClusterId; - - private String workerId; - - public static ConnectWorkerMetrics initWithMetric(Long connectClusterId, String workerId, String metric, Float value) { - ConnectWorkerMetrics connectWorkerMetrics = new ConnectWorkerMetrics(); - connectWorkerMetrics.setConnectClusterId(connectClusterId); - connectWorkerMetrics.setWorkerId(workerId); - connectWorkerMetrics.putMetric(metric, value); - return connectWorkerMetrics; - } - - @Override - public String unique() { - return "KCC@" + clusterPhyId + "@" + connectClusterId + "@" + workerId; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorMetrics.java deleted file mode 100644 index 08540ed5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorMetrics.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@ToString -public class ConnectorMetrics extends BaseMetrics { - private Long connectClusterId; - - private String connectorName; - - private String connectorNameAndClusterId; - - public ConnectorMetrics(Long connectClusterId, String connectorName) { - super(null); - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.connectorNameAndClusterId = connectorName + "#" + connectClusterId; - } - - public static ConnectorMetrics initWithMetric(Long connectClusterId, String connectorName, String metricName, Float value) { - ConnectorMetrics metrics = new ConnectorMetrics(connectClusterId, connectorName); - metrics.putMetric(metricName, value); - return metrics; - } - - @Override - public String unique() { - return "KCOR@" + connectClusterId + "@" + connectorName; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorTaskMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorTaskMetrics.java deleted file mode 100644 index eb0dc42d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/connect/ConnectorTaskMetrics.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author wyb - * @date 2022/11/4 - */ -@Data -@NoArgsConstructor -@ToString -public class ConnectorTaskMetrics extends BaseMetrics { - private Long connectClusterId; - - private String connectorName; - - private Integer taskId; - - public ConnectorTaskMetrics(Long connectClusterId, String connectorName, Integer taskId) { - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.taskId = taskId; - } - - public static ConnectorTaskMetrics initWithMetric(Long connectClusterId, String connectorName, Integer taskId, String metricName, Float value) { - ConnectorTaskMetrics metrics = new ConnectorTaskMetrics(connectClusterId, connectorName, taskId); - metrics.putMetric(metricName,value); - return metrics; - } - - @Override - public String unique() { - return "KCOR@" + connectClusterId + "@" + connectorName + "@" + taskId; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerMetrics.java deleted file mode 100644 index b44324ea..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerMetrics.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -/** - * @author zengqiao - * @date 20/6/17 - */ -@Data -@NoArgsConstructor -@ToString -public class MirrorMakerMetrics extends BaseMetrics { - private Long connectClusterId; - - private String connectorName; - - private String connectorNameAndClusterId; - - public MirrorMakerMetrics(Long connectClusterId, String connectorName) { - super(null); - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.connectorNameAndClusterId = connectorName + "#" + connectClusterId; - } - - public MirrorMakerMetrics(Long clusterPhyId, Long connectClusterId, String connectorName) { - super(clusterPhyId); - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.connectorNameAndClusterId = connectorName + "#" + connectClusterId; - } - - public static MirrorMakerMetrics initWithMetric(Long connectClusterId, String connectorName, String metricName, Float value) { - MirrorMakerMetrics metrics = new MirrorMakerMetrics(connectClusterId, connectorName); - metrics.putMetric(metricName, value); - return metrics; - } - - @Override - public String unique() { - return "KCOR@" + connectClusterId + "@" + connectorName; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerTopicPartitionMetrics.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerTopicPartitionMetrics.java deleted file mode 100644 index ef17adc9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/metrics/mm2/MirrorMakerTopicPartitionMetrics.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/12/16 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class MirrorMakerTopicPartitionMetrics extends BaseMetrics { - private Long connectClusterId; - - private String mirrorMakerName; - - private String clusterAlias; - - private String topicName; - - private Integer partitionId; - - private String workerId; - - @Override - public String unique() { - return "KCOR@" + connectClusterId + "@" + mirrorMakerName + "@" + clusterAlias + "@" + workerId + "@" + topicName + "@" + partitionId; - } - - public static MirrorMakerTopicPartitionMetrics initWithMetric(Long connectClusterId, String mirrorMakerName, String clusterAlias, String topicName, Integer partitionId, String workerId, String metricName, Float value) { - MirrorMakerTopicPartitionMetrics metrics = new MirrorMakerTopicPartitionMetrics(connectClusterId, mirrorMakerName, clusterAlias, topicName, partitionId, workerId); - metrics.putMetric(metricName, value); - return metrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/offset/KSOffsetSpec.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/offset/KSOffsetSpec.java deleted file mode 100644 index 580e2f6f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/offset/KSOffsetSpec.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.offset; - -import org.apache.kafka.clients.admin.OffsetSpec; - -/** - * @see OffsetSpec - */ -public class KSOffsetSpec { - public static class KSEarliestSpec extends KSOffsetSpec { } - - public static class KSLatestSpec extends KSOffsetSpec { } - - public static class KSTimestampSpec extends KSOffsetSpec { - private final long timestamp; - - public KSTimestampSpec(long timestamp) { - this.timestamp = timestamp; - } - - public long timestamp() { - return timestamp; - } - } - - /** - * Used to retrieve the latest offset of a partition - */ - public static KSOffsetSpec latest() { - return new KSOffsetSpec.KSLatestSpec(); - } - - /** - * Used to retrieve the earliest offset of a partition - */ - public static KSOffsetSpec earliest() { - return new KSOffsetSpec.KSEarliestSpec(); - } - - /** - * Used to retrieve the earliest offset whose timestamp is greater than - * or equal to the given timestamp in the corresponding partition - * @param timestamp in milliseconds - */ - public static KSOffsetSpec forTimestamp(long timestamp) { - return new KSOffsetSpec.KSTimestampSpec(timestamp); - } - - private KSOffsetSpec() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/Pagination.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/Pagination.java deleted file mode 100644 index 4ffaf47a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/Pagination.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.pagination; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "分页信息") -public class Pagination { - @ApiModelProperty(value = "总记录数", example = "100") - private long total; - - @ApiModelProperty(value = "当前页码", example = "0") - private long pageNo; - - @ApiModelProperty(value = "单页大小", example = "10") - private long pageSize; - - public Pagination(long total, long pageNo, long pageSize) { - this.total = total; - this.pageNo = pageNo; - this.pageSize = pageSize; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/PaginationData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/PaginationData.java deleted file mode 100644 index 8b2332e6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/pagination/PaginationData.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.pagination; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "分页数据") -public class PaginationData { - @ApiModelProperty(value = "业务数据") - private List bizData; - - @ApiModelProperty(value = "分页信息") - private Pagination pagination; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/VersionItemParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/VersionItemParam.java deleted file mode 100644 index b7ac11d1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/VersionItemParam.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param; - -public class VersionItemParam { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLAtomParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLAtomParam.java deleted file mode 100644 index 966efdf5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLAtomParam.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.acl; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.kafkauser.KafkaUserParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.acl.AclOperation; -import org.apache.kafka.common.acl.AclPermissionType; -import org.apache.kafka.common.resource.PatternType; -import org.apache.kafka.common.resource.ResourceType; - - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ACLAtomParam extends KafkaUserParam { - private AclOperation aclOperation; - - private AclPermissionType aclPermissionType; - - private String aclClientHost; - - private ResourceType resourceType; - - private String resourceName; - - private PatternType resourcePatternType; - - public Result checkFieldLegal() { - StringBuilder sb = new StringBuilder(); - if (ValidateUtils.isNullOrLessThanZero(clusterPhyId)) { - sb.append("clusterPhyId不允许为空或小于0;").append("\t"); - } - if (ValidateUtils.isBlank(kafkaUserName)) { - sb.append("kafkaUserName不允许为空;").append("\t"); - } - if (ValidateUtils.isNull(aclOperation)) { - sb.append("aclOperation不允许为null;").append("\t"); - } - if (ValidateUtils.isNull(aclPermissionType)) { - sb.append("aclPermissionType不允许为null;").append("\t"); - } - if (ValidateUtils.isBlank(aclClientHost)) { - sb.append("aclClientHost不允许为空;").append("\t"); - } - if (ValidateUtils.isNull(resourceType)) { - sb.append("resourceType不允许为null;").append("\t"); - } - if (ValidateUtils.isBlank(resourceName)) { - sb.append("resourceName不允许为空;").append("\t"); - } - if (ValidateUtils.isNull(resourcePatternType)) { - sb.append("resourcePatternType不允许为null;").append("\t"); - } - - if (sb.length() == 0) { - return Result.buildSuc(); - } - - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, sb.toString()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLDelByResParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLDelByResParam.java deleted file mode 100644 index d48b904c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/acl/ACLDelByResParam.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.acl; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.resource.PatternType; -import org.apache.kafka.common.resource.ResourceType; - - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ACLDelByResParam extends ClusterPhyParam { - private ResourceType resourceType; - - private String resourceName; - - private PatternType resourcePatternType; - - public Result checkFieldLegal() { - StringBuilder sb = new StringBuilder(); - if (ValidateUtils.isNullOrLessThanZero(clusterPhyId)) { - sb.append("clusterPhyId不允许为空或小于0;").append("\t"); - } - if (ValidateUtils.isNull(resourceType)) { - sb.append("resourceType不允许为null;").append("\t"); - } - if (ValidateUtils.isBlank(resourceName)) { - sb.append("resourceName不允许为空;").append("\t"); - } - if (ValidateUtils.isNull(resourcePatternType)) { - sb.append("resourcePatternType不允许为null;").append("\t"); - } - - if (sb.length() == 0) { - return Result.buildSuc(); - } - - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, sb.toString()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/broker/BrokerParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/broker/BrokerParam.java deleted file mode 100644 index 3153b4c2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/broker/BrokerParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.broker; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class BrokerParam extends ClusterPhyParam { - protected Integer brokerId; - - public BrokerParam(Long clusterPhyId, Integer brokerId) { - super(clusterPhyId); - this.brokerId = brokerId; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterParam.java deleted file mode 100644 index 95269065..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterParam.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.VersionItemParam; - -/** - * @author wyc - * @date 2022/11/9 - */ -public class ClusterParam extends VersionItemParam { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterPhyParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterPhyParam.java deleted file mode 100644 index 203efcdb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ClusterPhyParam.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterPhyParam extends ClusterParam { - protected Long clusterPhyId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ConnectClusterParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ConnectClusterParam.java deleted file mode 100644 index 2f830c55..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/cluster/ConnectClusterParam.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/11/9 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectClusterParam extends ClusterParam{ - protected Long connectClusterId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaBrokerConfigModifyParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaBrokerConfigModifyParam.java deleted file mode 100644 index fa47f2c4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaBrokerConfigModifyParam.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.config; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class KafkaBrokerConfigModifyParam extends ClusterPhyParam { - private Integer brokerId; - - private Map changedProps; - - private Boolean applyAll; - - public KafkaBrokerConfigModifyParam(Long clusterPhyId, Integer brokerId, Map changedProps, Boolean applyAll) { - super(clusterPhyId); - this.brokerId = brokerId; - this.changedProps = changedProps; - this.applyAll = applyAll; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaTopicConfigParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaTopicConfigParam.java deleted file mode 100644 index 8a52373a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/config/KafkaTopicConfigParam.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.config; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic.TopicParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class KafkaTopicConfigParam extends TopicParam { - private Map changedProps; - - public KafkaTopicConfigParam(Long clusterPhyId, String topicName, Map changedProps) { - super(clusterPhyId, topicName); - this.changedProps = changedProps; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/ConnectorParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/ConnectorParam.java deleted file mode 100644 index fb923a0c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/ConnectorParam.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ConnectClusterParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/11/8 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectorParam extends ConnectClusterParam { - - private String connectorName; - - private String connectorType; - - public ConnectorParam(Long connectClusterId, String connectorName, String connectorType) { - super(connectClusterId); - this.connectorName = connectorName; - this.connectorType = connectorType; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/mm2/MirrorMakerParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/mm2/MirrorMakerParam.java deleted file mode 100644 index 357559c6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/connect/mm2/MirrorMakerParam.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.mm2.MirrorMakerTopic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ConnectClusterParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author wyb - * @date 2022/12/21 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class MirrorMakerParam extends ConnectClusterParam { - - private String mirrorMakerName; - - private String connectorType; - - List mirrorMakerTopicList; - - public MirrorMakerParam(Long connectClusterId, String connectorType, String mirrorMakerName, List mirrorMakerTopicList) { - super(connectClusterId); - this.mirrorMakerName = mirrorMakerName; - this.connectorType = connectorType; - this.mirrorMakerTopicList = mirrorMakerTopicList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/group/GroupParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/group/GroupParam.java deleted file mode 100644 index d7bf15f8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/group/GroupParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.group; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupParam extends ClusterPhyParam { - protected String groupName; - - public GroupParam(Long clusterPhyId, String groupName) { - super(clusterPhyId); - this.groupName = groupName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserParam.java deleted file mode 100644 index 39c594c4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.kafkauser; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class KafkaUserParam extends ClusterPhyParam { - protected String kafkaUserName; - - public KafkaUserParam(Long clusterPhyId, String kafkaUserName) { - super(clusterPhyId); - this.kafkaUserName = kafkaUserName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserReplaceParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserReplaceParam.java deleted file mode 100644 index 39b87a44..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/kafkauser/KafkaUserReplaceParam.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.kafkauser; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class KafkaUserReplaceParam extends KafkaUserParam { - private String kafkaUserToken; - - public KafkaUserReplaceParam(Long clusterPhyId, String kafkaUserName, String kafkaUserToken) { - super(clusterPhyId, kafkaUserName); - this.kafkaUserToken = kafkaUserToken; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/BrokerMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/BrokerMetricParam.java deleted file mode 100644 index 04f4486e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/BrokerMetricParam.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class BrokerMetricParam extends MetricParam { - - private Long clusterId; - - private Integer brokerId; - - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ClusterMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ClusterMetricParam.java deleted file mode 100644 index 726290dc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ClusterMetricParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterMetricParam extends MetricParam { - - private Long clusterId; - - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupMetricParam.java deleted file mode 100644 index f1546539..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupMetricParam.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupMetricParam extends MetricParam { - - private Long clusterPhyId; - - private String groupName; - - private String topicName; - - private Long partitionId; - - private String metric; - - public GroupMetricParam(Long clusterPhyId, String groupName, String metric){ - this.clusterPhyId = clusterPhyId; - this.groupName = groupName; - this.metric = metric; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupTopicMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupTopicMetricParam.java deleted file mode 100644 index b8d384c5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/GroupTopicMetricParam.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupTopicMetricParam extends GroupMetricParam { - - private String topicName; - - private Long partitionId; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/MetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/MetricParam.java deleted file mode 100644 index 3c84bc51..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/MetricParam.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.VersionItemParam; - -public class MetricParam extends VersionItemParam { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/PartitionMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/PartitionMetricParam.java deleted file mode 100644 index 92d1fbb4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/PartitionMetricParam.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PartitionMetricParam extends MetricParam { - - private Long clusterPhyId; - private String topic; - private Integer brokerId; - private Integer partitionId; - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ReplicationMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ReplicationMetricParam.java deleted file mode 100644 index 676f996a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ReplicationMetricParam.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ReplicationMetricParam extends MetricParam { - - private Long clusterPhyId; - private String topic; - private Integer brokerId; - private Integer partitionId; - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/TopicMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/TopicMetricParam.java deleted file mode 100644 index 8a7aaf4a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/TopicMetricParam.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicMetricParam extends MetricParam { - - private Long clusterId; - private String topic; - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ZookeeperMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ZookeeperMetricParam.java deleted file mode 100644 index ef2b09c8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/ZookeeperMetricParam.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig; -import com.xiaojukeji.know.streaming.km.common.utils.Tuple; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -public class ZookeeperMetricParam extends MetricParam { - private Long clusterPhyId; - - private List> zkAddressList; - - private ZKConfig zkConfig; - - private String metricName; - - private Integer kafkaControllerId; - - public ZookeeperMetricParam(Long clusterPhyId, - List> zkAddressList, - ZKConfig zkConfig, - String metricName) { - this.clusterPhyId = clusterPhyId; - this.zkAddressList = zkAddressList; - this.zkConfig = zkConfig; - this.metricName = metricName; - } - - public ZookeeperMetricParam(Long clusterPhyId, - List> zkAddressList, - ZKConfig zkConfig, - Integer kafkaControllerId, - String metricName) { - this.clusterPhyId = clusterPhyId; - this.zkAddressList = zkAddressList; - this.zkConfig = zkConfig; - this.kafkaControllerId = kafkaControllerId; - this.metricName = metricName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectClusterMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectClusterMetricParam.java deleted file mode 100644 index 92946c5c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectClusterMetricParam.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.MetricParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/11/1 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectClusterMetricParam extends MetricParam { - - private Long connectClusterId; - - private String metric; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectorMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectorMetricParam.java deleted file mode 100644 index 6cad85eb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/ConnectorMetricParam.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.MetricParam; -import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author wyb - * @date 2022/11/2 - */ -@Data -@NoArgsConstructor -public class ConnectorMetricParam extends MetricParam { - private Long connectClusterId; - - private String connectorName; - - private String metricName; - - private ConnectorTypeEnum connectorType; - - public ConnectorMetricParam(Long connectClusterId, String connectorName, String metricName, ConnectorTypeEnum connectorType) { - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.metricName = metricName; - this.connectorType = connectorType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/mm2/MirrorMakerMetricParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/mm2/MirrorMakerMetricParam.java deleted file mode 100644 index c67f3128..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/metric/connect/mm2/MirrorMakerMetricParam.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.connect.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.mm2.MirrorMakerTopic; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.MetricParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author wyb - * @date 2022/12/15 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class MirrorMakerMetricParam extends MetricParam { - private Long connectClusterId; - - private String mirrorMakerName; - - private List mirrorMakerTopicList; - - private String metric; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/BatchPartitionParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/BatchPartitionParam.java deleted file mode 100644 index d316112f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/BatchPartitionParam.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.partition; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.TopicPartition; - -import java.util.List; - -@Data -@NoArgsConstructor -public class BatchPartitionParam extends ClusterPhyParam { - private List tpList; - - public BatchPartitionParam(Long clusterPhyId, List tpList) { - super(clusterPhyId); - this.tpList = tpList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/PartitionOffsetParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/PartitionOffsetParam.java deleted file mode 100644 index 09f81812..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/partition/PartitionOffsetParam.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.partition; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.offset.KSOffsetSpec; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import com.xiaojukeji.know.streaming.km.common.utils.Triple; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.TopicPartition; - -import java.util.*; -import java.util.stream.Collectors; - -@Getter -@NoArgsConstructor -public class PartitionOffsetParam extends ClusterPhyParam { - private List>> offsetSpecList; - - public PartitionOffsetParam(Long clusterPhyId, String topicName, KSOffsetSpec ksOffsetSpec, List partitionList) { - super(clusterPhyId); - this.offsetSpecList = Collections.singletonList(new Triple<>(topicName, ksOffsetSpec, partitionList)); - } - - public PartitionOffsetParam(Long clusterPhyId, String topicName, List specList, List partitionList) { - super(clusterPhyId); - this.offsetSpecList = new ArrayList<>(); - specList.forEach(elem -> offsetSpecList.add(new Triple<>(topicName, elem, partitionList))); - } - - public PartitionOffsetParam(Long clusterPhyId, KSOffsetSpec offsetSpec, List partitionList) { - super(clusterPhyId); - Map> tpMap = new HashMap<>(); - partitionList.forEach(elem -> { - tpMap.putIfAbsent(elem.topic(), new ArrayList<>()); - tpMap.get(elem.topic()).add(elem); - }); - - this.offsetSpecList = tpMap.entrySet().stream().map(elem -> new Triple<>(elem.getKey(), offsetSpec, elem.getValue())).collect(Collectors.toList()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/reassign/ExecuteReassignParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/reassign/ExecuteReassignParam.java deleted file mode 100644 index 660ca573..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/reassign/ExecuteReassignParam.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.reassign; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class ExecuteReassignParam extends ClusterPhyParam { - private String reassignmentJson; - - private Long throttleUnitB; - - public ExecuteReassignParam(Long clusterPhyId, String reassignmentJson, Long throttleUnitB) { - super(clusterPhyId); - this.reassignmentJson = reassignmentJson; - this.throttleUnitB = throttleUnitB; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicCreateParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicCreateParam.java deleted file mode 100644 index 24ef4b31..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicCreateParam.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.*; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicCreateParam extends TopicParam { - private Map config; - - private Map> assignmentMap; - - private String description; - - public TopicCreateParam(Long clusterPhyId, String topicName, Map config, Map> assignmentMap, String description) { - super(clusterPhyId, topicName); - this.config = config; - this.assignmentMap = assignmentMap; - this.description = description; - } - - public Integer getReplicaNum() { - if (assignmentMap == null || assignmentMap.isEmpty()) { - return 0; - } - - return new ArrayList<>(assignmentMap.values()).get(0).size(); - } - - public Set getBrokerIdSet() { - Set brokerIdSet = new HashSet<>(); - if (assignmentMap == null || assignmentMap.isEmpty()) { - return brokerIdSet; - } - - assignmentMap.values().forEach(elem -> brokerIdSet.addAll(elem)); - - return brokerIdSet; - } - - public Result simpleCheckFieldIsNull() { - if (ValidateUtils.isNullOrLessThanZero(clusterPhyId)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "clusterPhyId不允许为null或者小于0"); - } - - if (ValidateUtils.isBlank(topicName)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "topicName不允许为空"); - } - - if (ValidateUtils.isNull(config)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "config不允许为null"); - } - - if (ValidateUtils.isEmptyMap(assignmentMap)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "assignmentMap不允许为空"); - } - - if (ValidateUtils.isNull(description)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "description不允许为null"); - } - - return Result.buildSuc(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicParam.java deleted file mode 100644 index 5c66a521..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicParam.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicParam extends ClusterPhyParam { - protected String topicName; - - public TopicParam(Long clusterPhyId, String topicName) { - super(clusterPhyId); - this.topicName = topicName; - } - - @Override - public String toString() { - return "TopicParam{" + - "clusterPhyId=" + clusterPhyId + - ", topicName='" + topicName + '\'' + - '}'; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicPartitionExpandParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicPartitionExpandParam.java deleted file mode 100644 index 4a119679..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/topic/TopicPartitionExpandParam.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; -import java.util.Map; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicPartitionExpandParam extends TopicParam { - private Map> existingAssignment; - - private Map> newPartitionAssignment; - - public TopicPartitionExpandParam(Long clusterPhyId, - String topicName, - Map> existingAssignment, - Map> newPartitionAssignment) { - super(clusterPhyId, topicName); - this.existingAssignment = existingAssignment; - this.newPartitionAssignment = newPartitionAssignment; - } - - public Result simpleCheckFieldIsNull() { - if (ValidateUtils.isNullOrLessThanZero(clusterPhyId)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "clusterPhyId不允许为null或者小于0"); - } - - if (ValidateUtils.isBlank(topicName)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "topicName不允许为空"); - } - - if (ValidateUtils.isEmptyMap(existingAssignment)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "existingAssignment不允许为空"); - } - - if (ValidateUtils.isEmptyMap(newPartitionAssignment)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "newPartitionAssignment不允许为空"); - } - - return Result.buildSuc(); - } - - public Integer getExistPartitionNum() { - return existingAssignment.size(); - } - - public Integer getTotalPartitionNum() { - return existingAssignment.size() + newPartitionAssignment.size(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/zookeeper/ZookeeperParam.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/zookeeper/ZookeeperParam.java deleted file mode 100644 index fc111356..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/param/zookeeper/ZookeeperParam.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.param.zookeeper; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam; -import com.xiaojukeji.know.streaming.km.common.utils.Tuple; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -public class ZookeeperParam extends ClusterPhyParam { - private List> zkAddressList; - - private ZKConfig zkConfig; - - public ZookeeperParam(Long clusterPhyId, List> zkAddressList, ZKConfig zkConfig) { - super(clusterPhyId); - this.zkAddressList = zkAddressList; - this.zkConfig = zkConfig; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/partition/Partition.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/partition/Partition.java deleted file mode 100644 index 76848bf7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/partition/Partition.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.partition; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.TopicPartitionInfo; - -import java.io.Serializable; -import java.util.List; -import java.util.stream.Collectors; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Partition implements Serializable { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 分区ID - */ - private Integer partitionId; - - /** - * leaderBrokerId - */ - private Integer leaderBrokerId; - - /** - * isr - */ - private List inSyncReplicaList; - - /** - * ar - */ - private List assignReplicaList; - - public static Partition buildFrom(Long clusterPhyId, String topicName, TopicPartitionInfo topicPartitionInfo) { - Partition partition = new Partition(); - partition.setClusterPhyId(clusterPhyId); - partition.setTopicName(topicName); - partition.setPartitionId(topicPartitionInfo.partition()); - partition.setLeaderBrokerId(topicPartitionInfo.leader().id()); - partition.setInSyncReplicaList(topicPartitionInfo.isr().stream().map(elem -> elem.id()).collect(Collectors.toList())); - partition.setAssignReplicaList(topicPartitionInfo.replicas().stream().map(elem -> elem.id()).collect(Collectors.toList())); - return partition; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignPlan.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignPlan.java deleted file mode 100644 index 1bfb4c47..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignPlan.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.common.TopicPartition; - -import java.util.List; -import java.util.Map; - -/** - * 迁移计划 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ReassignPlan { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 迁移计划 - */ - private Map> reAssignPlanMap; - - /** - * 当前已有分配情况 - */ - private Map> currentAssignMap; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignResult.java deleted file mode 100644 index 8a734b1e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign; - -import lombok.Data; -import org.apache.kafka.common.TopicPartition; - -import java.util.Map; - -@Data -public class ReassignResult { - private Map reassignStateMap; - - private boolean partsOngoing; - - public boolean checkPartitionFinished(String topicName, Integer partitionId) { - ReassignState state = reassignStateMap.get(new TopicPartition(topicName, partitionId)); - if (state == null) { - return true; - } - - return state.isDone(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignState.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignState.java deleted file mode 100644 index cc314527..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/ReassignState.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign; - -import lombok.Data; - -import java.util.List; - -@Data -public class ReassignState { - private List currentReplicas; - - private List targetReplicas; - - private boolean done; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignJobDetail.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignJobDetail.java deleted file mode 100644 index 18441701..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignJobDetail.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail.ReassignJobDetailDataGroupByTopic; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReassignJobDetail { - /** - * 限流值 - */ - private Long throttleUnitB; - - /** - * 完成时间 - */ - private Date finishedTime; - - /** - * 备注 - */ - private String description; - - /** - * 详细信息 - */ - private List reassignTopicDetailsList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignSubJobExtendData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignSubJobExtendData.java deleted file mode 100644 index 9225c3ff..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReassignSubJobExtendData.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job; - -import lombok.Data; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReassignSubJobExtendData { - /** - * 原本保存时间 - */ - private Long originalRetentionTimeUnitMs; - - /** - * 迁移时保存时间 - */ - private Long reassignRetentionTimeUnitMs; - - /** - * 需迁移LogSize - */ - private Long needReassignLogSizeUnitB; - - /** - * 已完成迁移LogSize - */ - private Long finishedReassignLogSizeUnitB; - - /** - * 预计剩余时长 - */ - private Long remainTimeUnitMs; - - /** - * 当前副本数 - */ - private Integer originReplicaNum; - - /** - * 新的副本数 - */ - private Integer reassignReplicaNum; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignJob.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignJob.java deleted file mode 100644 index 7932e0cc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignJob.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO; -import lombok.Data; - -import java.util.List; - -@Data -public class ReplaceReassignJob extends BaseDTO { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * 限流值 - */ - private Long throttleUnitB; - - /** - * 备注 - */ - private String description; - - /** - * 子任务列表 - */ - private List subJobList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignSubJob.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignSubJob.java deleted file mode 100644 index c73e320c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/ReplaceReassignSubJob.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job; - -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReplaceReassignSubJob { - /** - * 物流集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 分区ID - */ - private Integer partitionId; - - /** - * 源Broker列表 - */ - private List originalBrokerIdList; - - /** - * 目标Broker列表 - */ - private List reassignBrokerIdList; - - /** - * 原本保存时间 - */ - private Long originalRetentionTimeUnitMs; - - /** - * 迁移时保存时间 - */ - private Long reassignRetentionTimeUnitMs; - - /** - * 当前副本数 - */ - private Integer originReplicaNum; - - /** - * 新的副本数 - */ - private Integer reassignReplicaNum; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/AbstractReassignJobDetailData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/AbstractReassignJobDetailData.java deleted file mode 100644 index 2881eb3d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/AbstractReassignJobDetailData.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail; - -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public abstract class AbstractReassignJobDetailData { - /** - * 物流集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 源Broker列表 - */ - private List originalBrokerIdList; - - /** - * 目标Broker列表 - */ - private List reassignBrokerIdList; - - /** - * 需迁移LogSize - */ - private Long needReassignLogSizeUnitB; - - /** - * 已完成迁移LogSize - */ - private Long finishedReassignLogSizeUnitB; - - /** - * 预计剩余时长 - */ - private Long remainTimeUnitMs; - - /** - * 当前副本数 - */ - private Integer presentReplicaNum; - - /** - * 新的副本数 - */ - private Integer oldReplicaNum; - - /** - * 新的副本数 - */ - private Integer newReplicaNum; - - /** - * 原本保存时间 - */ - private Long originalRetentionTimeUnitMs; - - /** - * 迁移时保存时间 - */ - private Long reassignRetentionTimeUnitMs; - - /** - * 状态 - */ - private Integer status; - - /** - * 子任务成功数 - */ - private Integer total; - - /** - * 子任务成功数 - */ - private Integer success; - - /** - * 子任务失败数 - */ - private Integer fail; - - /** - * 子任务进行数 - */ - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByPartition.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByPartition.java deleted file mode 100644 index 824c6b8f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByPartition.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail; - -import lombok.Data; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReassignJobDetailDataGroupByPartition extends AbstractReassignJobDetailData { - /** - * 分区ID - */ - private Integer partitionId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByTopic.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByTopic.java deleted file mode 100644 index b645f254..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/job/detail/ReassignJobDetailDataGroupByTopic.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail; - -import lombok.Data; - -import java.util.List; - - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReassignJobDetailDataGroupByTopic extends AbstractReassignJobDetailData { - /** - * 分区ID列表 - */ - private List partitionIdList; - - private List reassignPartitionDetailsList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignExecutionStrategy.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignExecutionStrategy.java deleted file mode 100644 index 5d8b2569..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignExecutionStrategy.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.strategy; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * 迁移计划 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ReassignExecutionStrategy { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * 任务并行数 0代表不限 - */ - private Integer parallelNum; - - /** - * 执行策略, 1:优先最大副本,2:优先最小副本 - */ - private Integer executionStrategy; - - /** - * 迁移执行副本信息 - */ - private List replaceReassignSubs; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignTask.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignTask.java deleted file mode 100644 index afd63756..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReassignTask.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.strategy; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class ReassignTask { - /** - * topic名称 - */ - private String topic; - - /** - * 分区id - */ - private int partition; - - /** - * 目标副本 - */ - private List replicas; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReplaceReassignSub.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReplaceReassignSub.java deleted file mode 100644 index d9e66cc6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/reassign/strategy/ReplaceReassignSub.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.strategy; - -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -public class ReplaceReassignSub { - /** - * 物流集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 分区ID - */ - private Integer partitionId; - - /** - * 源Broker列表 - */ - private List originalBrokerIdList; - - /** - * 目标Broker列表 - */ - private List reassignBrokerIdList; - - /** - * 副本logSize - */ - private Float replaceLogSize; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/record/RecordHeaderKS.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/record/RecordHeaderKS.java deleted file mode 100644 index a15385f6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/record/RecordHeaderKS.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.record; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class RecordHeaderKS { - private String key; - - private String value; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/BaseResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/BaseResult.java deleted file mode 100644 index 459e7eb5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/BaseResult.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.result; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.ToString; - -import java.io.Serializable; - -@Data -@ToString -public class BaseResult implements Serializable { - private static final long serialVersionUID = -5771016784021901099L; - - @ApiModelProperty(value = "信息", example = "成功") - protected String message; - - @ApiModelProperty(value = "状态", example = "0") - protected Integer code; - - public boolean successful() { - return !this.failed(); - } - - public boolean failed() { - return !Constant.SUCCESS.equals(code); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/PaginationResult.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/PaginationResult.java deleted file mode 100644 index 50411642..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/PaginationResult.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.result; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.pagination.Pagination; -import com.xiaojukeji.know.streaming.km.common.bean.entity.pagination.PaginationData; -import com.xiaojukeji.know.streaming.km.common.constant.PaginationConstant; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.ToString; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * 分页结果 - * @author zengqiao - * @date 21/07/13 - */ -@Data -@ToString -@ApiModel(description = "分页结果") -public class PaginationResult extends BaseResult { - private static final long serialVersionUID = -7850208355453831640L; - - @ApiModelProperty(value = "数据") - private PaginationData data; - - // 不要修改为public,否则外部方法直接调用的时候,可能丢失页面信息 - private PaginationResult(PaginationBaseDTO dto) { - this.data = new PaginationData<>(); - - if (dto != null) { - this.data.setPagination(new Pagination(0, dto.getPageNo(), dto.getPageSize())); - } else { - this.data.setPagination(new Pagination(0, PaginationConstant.DEFAULT_PAGE_NO, PaginationConstant.DEFAULT_PAGE_SIZE)); - } - - this.data.setBizData(Collections.emptyList()); - this.setCode(ResultStatus.SUCCESS.getCode()); - this.setMessage(ResultStatus.SUCCESS.getMessage()); - } - - public static PaginationResult buildSuc(PaginationBaseDTO dto) { - return new PaginationResult<>(dto); - } - - public static PaginationResult buildSuc(List dataList, PaginationResult anotherPaginationResult) { - PaginationResult paginationResult = new PaginationResult<>(null); - paginationResult.data = new PaginationData<>(); - paginationResult.data.setPagination(anotherPaginationResult.getData().getPagination()); - paginationResult.data.setBizData(dataList); - return paginationResult; - } - - public static PaginationResult buildSuc(List bizDataList, IPage iPage) { - return PaginationResult.buildSuc(bizDataList, iPage.getTotal(), iPage.getCurrent(), iPage.getSize()); - } - - public static PaginationResult buildSuc(List bizDataList, long total, long pageNo, long pageSize) { - PaginationResult paginationResult = PaginationResult.buildSuc(null); - - PaginationData paginationData = new PaginationData<>(); - paginationData.setBizData(bizDataList == null? new ArrayList<>(): bizDataList); - paginationData.setPagination(new Pagination(total, pageNo, pageSize)); - - paginationResult.setData(paginationData); - return paginationResult; - } - - public static PaginationResult buildFailure(ResultStatus rs, PaginationBaseDTO dto) { - PaginationResult paginationResult = new PaginationResult<>(dto); - paginationResult.setCode(rs.getCode()); - paginationResult.setMessage(rs.getMessage()); - return paginationResult; - } - - public static PaginationResult buildFailure(Result anotherResult, PaginationBaseDTO dto) { - PaginationResult paginationResult = new PaginationResult<>(dto); - - paginationResult.setCode(anotherResult.getCode()); - paginationResult.setMessage(anotherResult.getMessage()); - return paginationResult; - } - - public static PaginationResult buildFailure(String message, PaginationBaseDTO dto) { - PaginationResult paginationResult = new PaginationResult<>(dto); - - paginationResult.setCode(ResultStatus.FAIL.getCode()); - paginationResult.setMessage(message); - return paginationResult; - } - - public static PaginationResult buildFailure(PaginationResult anotherPaginationResult, PaginationBaseDTO dto) { - PaginationResult paginationResult = new PaginationResult<>(dto); - - paginationResult.setCode(anotherPaginationResult.getCode()); - paginationResult.setMessage(anotherPaginationResult.getMessage()); - return paginationResult; - } - - public boolean hasData() { - return data != null && !ValidateUtils.isEmptyList(data.getBizData()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/Result.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/Result.java deleted file mode 100644 index 54281b40..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/Result.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.result; - -import com.xiaojukeji.know.streaming.km.common.enums.valid.ValidateKafkaAddressErrorEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author huangyiminghappy@163.com - * @date 2019-07-08 - */ -@Data -@ApiModel(description = "调用结果") -public class Result extends BaseResult { - @ApiModelProperty(value = "数据") - protected T data; - - private Result() { - this.code = ResultStatus.SUCCESS.getCode(); - this.message = ResultStatus.SUCCESS.getMessage(); - } - - public static Result build(boolean succ) { - if (succ) { - return buildSuc(); - } - return buildFail(); - } - - public static Result buildFail() { - Result result = new Result<>(); - result.setCode(ResultStatus.FAIL.getCode()); - result.setMessage(ResultStatus.FAIL.getMessage()); - return result; - } - - public static Result build(boolean succ, T data) { - Result result = new Result<>(); - if (succ) { - result.setCode(ResultStatus.SUCCESS.getCode()); - result.setMessage(ResultStatus.SUCCESS.getMessage()); - result.setData(data); - } else { - result.setCode(ResultStatus.FAIL.getCode()); - result.setMessage(ResultStatus.FAIL.getMessage()); - } - return result; - } - - public static Result buildSuc() { - Result result = new Result<>(); - result.setCode(ResultStatus.SUCCESS.getCode()); - result.setMessage(ResultStatus.SUCCESS.getMessage()); - return result; - } - - public static Result buildSuc(T data) { - Result result = new Result<>(); - result.setCode(ResultStatus.SUCCESS.getCode()); - result.setMessage(ResultStatus.SUCCESS.getMessage()); - result.setData(data); - return result; - } - - public static Result buildFailure(String message) { - Result result = new Result<>(); - result.setCode(ResultStatus.FAIL.getCode()); - result.setMessage(message); - result.setData(null); - return result; - } - - public static Result buildFailure(int code, String msg) { - Result result = new Result<>(); - result.setCode(code); - result.setMessage(msg); - return result; - } - - public static Result buildFailure(String message, T data) { - Result result = new Result<>(); - result.setCode(ResultStatus.FAIL.getCode()); - result.setMessage(message); - result.setData(data); - return result; - } - - public static Result buildFailure(ResultStatus rs) { - Result result = new Result<>(); - result.setCode(rs.getCode()); - result.setMessage(rs.getMessage()); - result.setData(null); - return result; - } - - public static Result buildFrom(ResultStatus rs) { - Result result = new Result<>(); - result.setCode(rs.getCode()); - result.setMessage(rs.getMessage()); - return result; - } - - public static Result buildFrom(Result ret) { - Result result = new Result<>(); - result.setCode(ret.getCode()); - result.setMessage(ret.getMessage()); - return result; - } - - public static Result buildFrom(ValidateKafkaAddressErrorEnum errorEnum, String msg) { - Result result = new Result<>(); - result.setCode(errorEnum.getCode()); - result.setMessage(msg); - return result; - } - - public static Result buildFromRSAndMsg(ResultStatus resultStatus, String message) { - Result result = new Result<>(); - result.setCode(resultStatus.getCode()); - result.setMessage(message); - result.setData(null); - return result; - } - - public static Result buildFromRSAndData(ResultStatus rs, T data) { - Result result = new Result<>(); - result.setCode(rs.getCode()); - result.setMessage(rs.getMessage()); - result.setData(data); - return result; - } - - public static Result buildFromIgnoreData(Result anotherResult) { - Result result = new Result<>(); - result.setCode(anotherResult.getCode()); - result.setMessage(anotherResult.getMessage()); - return result; - } - - public static Result buildFromIgnoreData(PaginationResult anotherResult) { - Result result = new Result<>(); - result.setCode(anotherResult.getCode()); - result.setMessage(anotherResult.getMessage()); - return result; - } - - public static Result buildDuplicate(String msg) { - Result result = new Result<>(); - result.setCode(ResultStatus.DUPLICATION.getCode()); - result.setMessage(msg); - return result; - } - - public static Result buildNotExist(String msg) { - Result result = new Result<>(); - result.setCode(ResultStatus.NOT_EXIST.getCode()); - result.setMessage(msg); - return result; - } - - public static Result buildParamIllegal(String msg) { - Result result = new Result<>(); - result.setCode(ResultStatus.PARAM_ILLEGAL.getCode()); - result.setMessage(ResultStatus.PARAM_ILLEGAL.getMessage() + ":" + msg + ",请检查后再提交!"); - return result; - } - - public boolean hasData(){ - return !failed() && this.data != null; - } - - @Override - public String toString() { - return "Result{" + - "message='" + message + '\'' + - ", code=" + code + - ", data=" + data + - '}'; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/ResultStatus.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/ResultStatus.java deleted file mode 100644 index 444a7940..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/result/ResultStatus.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.result; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Getter; - -/** - * 返回状态 - * @author zengqiao - * @date 20/4/16 - */ -@Getter -public enum ResultStatus { - GATEWAY_INVALID_REQUEST(-1, "invalid request"), - - SUCCESS(Constant.SUCCESS, "成功"), - FAIL(1, "失败"), - - /** - * 操作错误,[1000, 2000) - * ------------------------------------------------------------------------------------------ - */ - OPERATION_FAILED(1001, "操作失败"), - OPERATION_FORBIDDEN(1002, "操作禁止"), - - /** - * 参数错误,[2000, 3000) - */ - PARAM_ILLEGAL(2000, "参数错误"), - NO_FIND_SUB_CLASS(2055, "找不到实现类"), - ADMIN_TASK_ERROR(2056, "admin任务异常"), - NO_FIND_METHOD(2057, "找不到实现方法"), - - /** - * 资源不存在,[3000, 4000) - */ - BROKER_NOT_EXIST(3010, "Broker 不存在"), - CONTROLLER_NOT_EXIST(3011, "Controller 不存在"), - TOPIC_NOT_EXIST(3012, "Topic 不存在"), - CLUSTER_NOT_EXIST(3013, "cluster 不存在"), - BROKER_SPEC_NOT_EXIST(3014, "Broker 规格信息不存在"), - CLUSTER_SPEC_INCOMPLETE(3015, "cluster 规格信息不完整,请维护好集群规格信息。"), - - - - /** - * 检查错误,[7000, 8000) - */ - NOT_EXIST(7100, "不存在"), - DUPLICATION(7200, "已存在"), - IN_USE(7400, "已被使用"), - - - /** - * 调用错误, [8000, 9000) - */ - KAFKA_OPERATE_FAILED(8010, "Kafka操作失败"), - KAFKA_CONNECTOR_OPERATE_FAILED(8011, "KafkaConnect操作失败"), - KAFKA_CONNECTOR_READ_FAILED(8012, "KafkaConnect读失败"), - MYSQL_OPERATE_FAILED(8020, "MySQL操作失败"), - ZK_OPERATE_FAILED(8030, "ZK操作失败"), - ZK_FOUR_LETTER_CMD_FORBIDDEN(8031, "ZK四字命令被禁止"), - ES_OPERATE_ERROR(8040, "ES操作失败"), - HTTP_REQ_ERROR(8050, "第三方http请求异常"), - - /** - * 版本兼容相关错误,【9000,10000) - */ - VC_ITEM_NOT_EXIST(9010, "版本兼容控制项不存在"), - VC_HANDLE_NOT_EXIST(9011, "版本兼容控制项对应的处理方法不存在"), - VC_HANDLE_NOT_MATCH(9012, "版本兼容控制项对应的处理方法适配"), - VC_ITEM_JMX_NOT_EXIST(9013, "版本兼容控制项中jmx信息不存在"), - VC_JMX_CONNECT_ERROR(9014, "版本兼容控制所需要的jmx链接查询失败"), - VC_JMX_INIT_ERROR(9015, "版本兼容控制所需要的jmx链接初始化失败"), - VC_KAFKA_CLIENT_ERROR(9016, "版本兼容控制所需要的kafkaClient查询失败"), - VC_JMX_INSTANCE_NOT_FOUND(9017, "版本兼容控制所需要的jmx指标不存在"), - - ; - - private final int code; - - private final String message; - - ResultStatus(int code, String message) { - this.code = code; - this.message = message; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchFuzzy.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchFuzzy.java deleted file mode 100644 index 30620edb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchFuzzy.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.util.StringUtils; - -/** - * @author didi - * 模糊搜索 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SearchFuzzy extends SearchQuery{ - private String queryValue; - - public SearchFuzzy(String queryName, String queryValue){ - super(queryName); - this.queryValue = queryValue; - } - - @Override - public boolean valid(){ - return validSuper() && !StringUtils.isEmpty( queryValue ); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchPage.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchPage.java deleted file mode 100644 index 935d19a7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchPage.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SearchPage { - private int pageNo = 1; - private int pageSize = 10; - - public int from(){ - return pageNo * pageSize; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchQuery.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchQuery.java deleted file mode 100644 index 999c4888..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchQuery.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.util.StringUtils; - -import static com.xiaojukeji.know.streaming.km.common.constant.ESConstant.METRICS_DOT; - -/** - * @author didi - * 模糊搜索 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public abstract class SearchQuery { - protected String queryName; - protected boolean metric = false; - protected boolean field = false; - - public SearchQuery(String queryName){ - this.queryName = queryName; - } - - public SearchQuery(String queryName, boolean field){ - this.queryName = queryName; - this.field = field; - } - - /** - * 如果 fieldName 是一个指标,那么在es中存储的时候, - * 是存储在 "metrics" 属性节点下,因此查询es时需要在前面加上 "metrics." - * @return - */ - public String getRealMetricName(){ - return metric ? METRICS_DOT + queryName : queryName; - } - - protected boolean validSuper(){ - return !StringUtils.isEmpty( queryName ) && (field || metric); - } - - abstract protected boolean valid(); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchRange.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchRange.java deleted file mode 100644 index 152bddab..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchRange.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class SearchRange extends SearchQuery{ - private float min; - private float max; - - public SearchRange(String fieldName, float min, float max){ - super(fieldName); - this.min = min; - this.max = max; - } - - @Override - public boolean valid(){ - return validSuper() && (max > min); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchShould.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchShould.java deleted file mode 100644 index 3e27dd22..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchShould.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.util.CollectionUtils; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author didi - * 精确搜索 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SearchShould extends SearchQuery{ - private List queryValues; - - public List getQueryValues(){ - return isMetric() ? queryValues.stream().map( f -> Double.valueOf(f)).collect(Collectors.toList()) - : queryValues; - } - - public SearchShould(String queryName){ - super(queryName); - } - - public SearchShould(String queryName, List queryValues){ - super(queryName); - this.queryValues = queryValues; - } - - public SearchShould(String queryName, List queryValues, boolean field){ - super(queryName, field); - this.queryValues = queryValues; - } - - @Override - public boolean valid(){ - return validSuper() && !CollectionUtils.isEmpty( queryValues ); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchSort.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchSort.java deleted file mode 100644 index 7707a728..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchSort.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.constant.ESConstant.TIME_STAMP; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class SearchSort extends SearchQuery{ - - public static final SearchSort DEFAULT = new SearchSort(TIME_STAMP, true); - - private boolean desc; - - public SearchSort(String fieldName, boolean desc){ - super(fieldName); - this.desc = desc; - } - - public SearchSort(String fieldName, boolean desc, boolean metric){ - super(fieldName); - this.desc = desc; - this.metric = metric; - } - - @Override - public boolean valid(){ - return validSuper(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchTerm.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchTerm.java deleted file mode 100644 index 8c48d30f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/search/SearchTerm.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.search; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - * 精确搜索 - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SearchTerm extends SearchQuery{ - private String queryValue; - - private boolean equal = true; - - public Object getQueryValue(){ - //指标都是 double 类型 - return isMetric() ? Double.valueOf( queryValue ) : queryValue; - } - - public SearchTerm(String queryName, String queryValue){ - super(queryName); - this.queryValue = queryValue; - } - - public SearchTerm(String queryName, String queryValue, boolean equal){ - super(queryName); - this.queryValue = queryValue; - this.equal = equal; - } - - @Override - public boolean valid(){ - return validSuper() && null != queryValue; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/Topic.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/Topic.java deleted file mode 100644 index 06791ba3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/Topic.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.topic; - - -import com.xiaojukeji.know.streaming.km.common.enums.topic.TopicTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Topic implements Serializable { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 副本数 - */ - private Integer replicaNum; - - /** - * 分区数 - */ - private Integer partitionNum; - - /** - * 修改节点的时间 - */ - private Long updateTime; - - /** - * 创建节点的时间 - */ - private Long createTime; - - /** - * 分区AR信息 - */ - private Map> partitionMap; - - /** - * 保存时间 - */ - private Long retentionMs; - - /** - * Topic所在的broker, 由partitionMap获取得到 - */ - private Set brokerIdSet; - - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.topic.TopicTypeEnum - */ - private Integer type; - - /** - * 描述 - */ - private String description; - - public boolean isKafkaInternalTopic(){ - return TopicTypeEnum.KAFKA_INTERNAL.getCode().equals(type); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicConfig.java deleted file mode 100644 index 5fde198a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.topic; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicConfig implements Serializable { - /** - * 表主键ID - */ - private Long id; - - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 保存时间 - */ - private Long retentionMs; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicPartitionKS.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicPartitionKS.java deleted file mode 100644 index 8f278dbb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/topic/TopicPartitionKS.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.topic; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicPartitionKS implements Serializable { - private static final long serialVersionUID = 19459887202113667L; - private String topic; - - private Integer partition; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/util/KafkaValidate.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/util/KafkaValidate.java deleted file mode 100644 index 24f99d45..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/util/KafkaValidate.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.util; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "Kafka-地址检查结果") -public class KafkaValidate { - @ApiModelProperty(value = "ZK地址", example = "127.0.0.1:2181") - private String zookeeper; - - @ApiModelProperty(value = "jmx端口", example = "8099") - private Integer jmxPort; - - @ApiModelProperty(value = "集群版本", example = "2.5.1") - private String kafkaVersion; - - @ApiModelProperty(value = "错误信息") - private List> errList = new ArrayList<>(); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionConnectJmxInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionConnectJmxInfo.java deleted file mode 100644 index 7c4e257a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionConnectJmxInfo.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.version; - -import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum; -import lombok.Data; - -/** - * @author wyb - * @date 2022/11/24 - */ -@Data -public class VersionConnectJmxInfo extends VersionJmxInfo{ - private ConnectorTypeEnum type; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionControlItem.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionControlItem.java deleted file mode 100644 index 56b9169c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionControlItem.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.version; - -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class VersionControlItem { - - /** - * VersionItemTypeEnum - */ - private int type; - - /** - * name - */ - private String name; - - /** - * 描述 - */ - private String desc; - - /** - * 归一化之后的版本号,包含 - */ - private long minVersion; - - /** - * 归一化之后的版本号,不包含,是一个左闭右开的空间 - */ - private long maxVersion; - - /** - * 扩展信息: - * 由用户自定义需要放的类型数据,获取时,自行转换 - */ - private Object extend; - - public static VersionControlItem build(){ - return new VersionControlItem(); - } - - public VersionControlItem type(int type){ - this.type = type; - return this; - } - - public VersionControlItem name(String name){ - this.name = name; - return this; - } - - public VersionControlItem minVersion(long minVersion){ - this.minVersion = minVersion; - return this; - } - - public VersionControlItem minVersion(VersionEnum versionEnum){ - this.minVersion = versionEnum.getVersionL(); - return this; - } - - public VersionControlItem maxVersion(long maxVersion){ - this.maxVersion = maxVersion; - return this; - } - - public VersionControlItem maxVersion(VersionEnum versionEnum){ - this.maxVersion = versionEnum.getVersionL(); - return this; - } - - public VersionControlItem extend(VersionJmxInfo jmxInfo){ - this.extend = jmxInfo; - return this; - } - - public VersionControlItem extend(VersionMethodInfo extendInfo){ - this.extend = extendInfo; - return this; - } - - public VersionControlItem extendMethod(String methodName){ - VersionMethodInfo versionMethodInfo = new VersionMethodInfo(); - versionMethodInfo.setMethodName(methodName); - this.extend = versionMethodInfo; - return this; - } - - public VersionControlItem desc(String desc){ - this.desc = desc; - return this; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionJmxInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionJmxInfo.java deleted file mode 100644 index 4a9e413b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionJmxInfo.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.version; - -import com.alibaba.fastjson.JSON; -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class VersionJmxInfo extends VersionMethodInfo { - private String jmxObjectName; - private String jmxAttribute; - - public VersionJmxInfo(){ - super(); - this.setJmx(true); - } - - @Override - public VersionJmxInfo methodName(String methodName){ - this.setMethodName(methodName); - return this; - } - - public VersionJmxInfo jmxObjectName(String jmxObjectName){ - this.jmxObjectName = jmxObjectName; - return this; - } - - public VersionJmxInfo jmxAttribute(String jmxAttribute){ - this.jmxAttribute = jmxAttribute; - return this; - } - - @Override - public String toString(){ - return JSON.toJSONString(this); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMethodInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMethodInfo.java deleted file mode 100644 index 8fd35a0e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMethodInfo.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.version; - -import com.alibaba.fastjson.JSON; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class VersionMethodInfo { - - private String methodName; - - private boolean jmx = false; - - public VersionMethodInfo methodName(String methodName){ - this.methodName = methodName; - return this; - } - - @Override - public String toString(){ - return JSON.toJSONString(this); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMetricControlItem.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMetricControlItem.java deleted file mode 100644 index 5c3f6506..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/version/VersionMetricControlItem.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.version; - -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class VersionMetricControlItem extends VersionControlItem{ - - public static final String CATEGORY_CLUSTER = "Cluster"; - public static final String CATEGORY_HEALTH = "Health"; - public static final String CATEGORY_BROKER = "Broker"; - public static final String CATEGORY_CONSUMER = "Consumer"; - public static final String CATEGORY_SECURITY = "Security"; - public static final String CATEGORY_JOB = "Job"; - public static final String CATEGORY_PARTITION = "Partition"; - public static final String CATEGORY_PERFORMANCE = "Performance"; - public static final String CATEGORY_FLOW = "Flow"; - - public static final String CATEGORY_CLIENT = "Client"; - - /** - * 指标单位名称,非指标的没有 - */ - private String unit; - - /** - * 指标的类别 - */ - private String category; - - @Override - public VersionMetricControlItem type(int type){ - this.setType(type); - return this; - } - - @Override - public VersionMetricControlItem name(String name){ - setName(name); - return this; - } - - @Override - public VersionMetricControlItem minVersion(long minVersion){ - setMinVersion(minVersion); - return this; - } - - @Override - public VersionMetricControlItem minVersion(VersionEnum versionEnum){ - setMinVersion(versionEnum.getVersionL()); - return this; - } - - @Override - public VersionMetricControlItem maxVersion(long maxVersion){ - setMaxVersion(maxVersion); - return this; - } - - @Override - public VersionMetricControlItem maxVersion(VersionEnum versionEnum){ - setMaxVersion(versionEnum.getVersionL()); - return this; - } - - @Override - public VersionMetricControlItem extend(VersionJmxInfo jmxInfo){ - setExtend(jmxInfo); - return this; - } - - @Override - public VersionMetricControlItem extend(VersionMethodInfo extendInfo){ - setExtend(extendInfo); - return this; - } - - @Override - public VersionMetricControlItem extendMethod(String methodName){ - VersionMethodInfo versionMethodInfo = new VersionMethodInfo(); - versionMethodInfo.setMethodName(methodName); - setExtend(versionMethodInfo); - return this; - } - - @Override - public VersionMetricControlItem desc(String desc){ - setDesc(desc); - return this; - } - - public VersionMetricControlItem unit(String unit){ - this.unit = unit; - return this; - } - - public VersionMetricControlItem category(String category){ - this.category = category; - return this; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/Znode.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/Znode.java deleted file mode 100644 index 24868a93..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/Znode.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.zookeeper.data.Stat; - -@Data -public class Znode { - @ApiModelProperty(value = "节点名称", example = "broker") - private String name; - - @ApiModelProperty(value = "节点数据", example = "saassad") - private String data; - - @ApiModelProperty(value = "节点属性", example = "") - private Stat stat; - - @ApiModelProperty(value = "节点路径", example = "") - private String namespace; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/ZookeeperInfo.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/ZookeeperInfo.java deleted file mode 100644 index e943952e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/ZookeeperInfo.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.BaseEntity; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -public class ZookeeperInfo extends BaseEntity { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * 主机 - */ - private String host; - - /** - * 端口 - */ - private Integer port; - - /** - * 角色 - */ - private String role; - - /** - * 版本 - */ - private String version; - - /** - * ZK状态 - */ - private Integer status; - - public boolean alive() { - return !(Constant.DOWN.equals(status)); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/BaseFourLetterWordCmdData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/BaseFourLetterWordCmdData.java deleted file mode 100644 index 3e5713a8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/BaseFourLetterWordCmdData.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword; - -import java.io.Serializable; - -/** - * 四字命令结果数据的基础类 - */ -public class BaseFourLetterWordCmdData implements Serializable { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ConfigCmdData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ConfigCmdData.java deleted file mode 100644 index d0982f47..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ConfigCmdData.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword; - -import lombok.Data; - - -/** - * clientPort=2183 - * dataDir=/data1/data/zkData2/version-2 - * dataLogDir=/data1/data/zkLog2/version-2 - * tickTime=2000 - * maxClientCnxns=60 - * minSessionTimeout=4000 - * maxSessionTimeout=40000 - * serverId=2 - * initLimit=15 - * syncLimit=10 - * electionAlg=3 - * electionPort=4445 - * quorumPort=4444 - * peerType=0 - */ -@Data -public class ConfigCmdData extends BaseFourLetterWordCmdData { - private Long clientPort; - private String dataDir; - private String dataLogDir; - private Long tickTime; - private Long maxClientCnxns; - private Long minSessionTimeout; - private Long maxSessionTimeout; - private Integer serverId; - private String initLimit; - private Long syncLimit; - private Long electionAlg; - private Long electionPort; - private Long quorumPort; - private Long peerType; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/MonitorCmdData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/MonitorCmdData.java deleted file mode 100644 index 7e2a10f4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/MonitorCmdData.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword; - -import lombok.Data; - -/** - * zk_version 3.4.6-1569965, built on 02/20/2014 09:09 GMT - * zk_avg_latency 0 - * zk_max_latency 399 - * zk_min_latency 0 - * zk_packets_received 234857 - * zk_packets_sent 234860 - * zk_num_alive_connections 4 - * zk_outstanding_requests 0 - * zk_server_state follower - * zk_znode_count 35566 - * zk_watch_count 39 - * zk_ephemerals_count 10 - * zk_approximate_data_size 3356708 - * zk_open_file_descriptor_count 35 - * zk_max_file_descriptor_count 819200 - */ -@Data -public class MonitorCmdData extends BaseFourLetterWordCmdData { - private String zkVersion; - private Float zkAvgLatency; - private Float zkMaxLatency; - private Float zkMinLatency; - private Long zkPacketsReceived; - private Long zkPacketsSent; - private Long zkNumAliveConnections; - private Long zkOutstandingRequests; - private String zkServerState; - private Long zkZnodeCount; - private Long zkWatchCount; - private Long zkEphemeralsCount; - private Long zkApproximateDataSize; - private Long zkOpenFileDescriptorCount; - private Long zkMaxFileDescriptorCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ServerCmdData.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ServerCmdData.java deleted file mode 100644 index 0bd9e0a4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/ServerCmdData.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword; - -import lombok.Data; - -/** - * Zookeeper version: 3.5.9-83df9301aa5c2a5d284a9940177808c01bc35cef, built on 01/06/2021 19:49 GMT - * Latency min/avg/max: 0/0/2209 - * Received: 278202469 - * Sent: 279449055 - * Connections: 31 - * Outstanding: 0 - * Zxid: 0x20033fc12 - * Mode: leader - * Node count: 10084 - * Proposal sizes last/min/max: 36/32/31260 leader特有 - */ -@Data -public class ServerCmdData extends BaseFourLetterWordCmdData { - private String zkVersion; - private Float zkAvgLatency; - private Float zkMaxLatency; - private Float zkMinLatency; - private Long zkPacketsReceived; - private Long zkPacketsSent; - private Long zkNumAliveConnections; - private Long zkOutstandingRequests; - private String zkServerState; - private Long zkZnodeCount; - private Long zkZxid; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ConfigCmdDataParser.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ConfigCmdDataParser.java deleted file mode 100644 index 7f27073c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ConfigCmdDataParser.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.parser; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.ConfigCmdData; -import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.FourLetterWordUtil; -import lombok.Data; - -import java.util.HashMap; -import java.util.Map; - -/** - * clientPort=2183 - * dataDir=/data1/data/zkData2/version-2 - * dataLogDir=/data1/data/zkLog2/version-2 - * tickTime=2000 - * maxClientCnxns=60 - * minSessionTimeout=4000 - * maxSessionTimeout=40000 - * serverId=2 - * initLimit=15 - * syncLimit=10 - * electionAlg=3 - * electionPort=4445 - * quorumPort=4444 - * peerType=0 - */ -@Data -public class ConfigCmdDataParser implements FourLetterWordDataParser { - private static final ILog LOGGER = LogFactory.getLog(ConfigCmdDataParser.class); - - private Result dataResult = null; - - @Override - public String getCmd() { - return FourLetterWordUtil.ConfigCmd; - } - - @Override - public ConfigCmdData parseAndInitData(Long clusterPhyId, String host, int port, String cmdData) { - Map dataMap = new HashMap<>(); - for (String elem : cmdData.split("\n")) { - if (elem.isEmpty()) { - continue; - } - - int idx = elem.indexOf('='); - if (idx >= 0) { - dataMap.put(elem.substring(0, idx), elem.substring(idx + 1).trim()); - } - } - - ConfigCmdData configCmdData = new ConfigCmdData(); - dataMap.entrySet().stream().forEach(elem -> { - try { - switch (elem.getKey()) { - case "clientPort": - configCmdData.setClientPort(Long.valueOf(elem.getValue())); - break; - case "dataDir": - configCmdData.setDataDir(elem.getValue()); - break; - case "dataLogDir": - configCmdData.setDataLogDir(elem.getValue()); - break; - case "tickTime": - configCmdData.setTickTime(Long.valueOf(elem.getValue())); - break; - case "maxClientCnxns": - configCmdData.setMaxClientCnxns(Long.valueOf(elem.getValue())); - break; - case "minSessionTimeout": - configCmdData.setMinSessionTimeout(Long.valueOf(elem.getValue())); - break; - case "maxSessionTimeout": - configCmdData.setMaxSessionTimeout(Long.valueOf(elem.getValue())); - break; - case "serverId": - configCmdData.setServerId(Integer.valueOf(elem.getValue())); - break; - case "initLimit": - configCmdData.setInitLimit(elem.getValue()); - break; - case "syncLimit": - configCmdData.setSyncLimit(Long.valueOf(elem.getValue())); - break; - case "electionAlg": - configCmdData.setElectionAlg(Long.valueOf(elem.getValue())); - break; - case "electionPort": - configCmdData.setElectionPort(Long.valueOf(elem.getValue())); - break; - case "quorumPort": - configCmdData.setQuorumPort(Long.valueOf(elem.getValue())); - break; - case "peerType": - configCmdData.setPeerType(Long.valueOf(elem.getValue())); - break; - default: - LOGGER.warn( - "method=parseAndInitData||name={}||value={}||msg=data not parsed!", - elem.getKey(), elem.getValue() - ); - } - } catch (Exception e) { - LOGGER.error( - "method=parseAndInitData||clusterPhyId={}||host={}||port={}||name={}||value={}||errMsg=exception!", - clusterPhyId, host, port, elem.getKey(), elem.getValue(), e - ); - } - }); - - return configCmdData; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/FourLetterWordDataParser.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/FourLetterWordDataParser.java deleted file mode 100644 index 58bb2368..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/FourLetterWordDataParser.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.parser; - -/** - * 四字命令结果解析类 - */ -public interface FourLetterWordDataParser { - String getCmd(); - - T parseAndInitData(Long clusterPhyId, String host, int port, String cmdData); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/MonitorCmdDataParser.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/MonitorCmdDataParser.java deleted file mode 100644 index 8c3e6958..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/MonitorCmdDataParser.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.parser; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.MonitorCmdData; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.FourLetterWordUtil; -import lombok.Data; - -import java.util.HashMap; -import java.util.Map; - -/** - * zk_version 3.4.6-1569965, built on 02/20/2014 09:09 GMT - * zk_avg_latency 0 - * zk_max_latency 399 - * zk_min_latency 0 - * zk_packets_received 234857 - * zk_packets_sent 234860 - * zk_num_alive_connections 4 - * zk_outstanding_requests 0 - * zk_server_state follower - * zk_znode_count 35566 - * zk_watch_count 39 - * zk_ephemerals_count 10 - * zk_approximate_data_size 3356708 - * zk_open_file_descriptor_count 35 - * zk_max_file_descriptor_count 819200 - */ -@Data -public class MonitorCmdDataParser implements FourLetterWordDataParser { - private static final ILog LOGGER = LogFactory.getLog(MonitorCmdDataParser.class); - - @Override - public String getCmd() { - return FourLetterWordUtil.MonitorCmd; - } - - @Override - public MonitorCmdData parseAndInitData(Long clusterPhyId, String host, int port, String cmdData) { - Map dataMap = new HashMap<>(); - for (String elem : cmdData.split("\n")) { - if (elem.isEmpty()) { - continue; - } - - int idx = elem.indexOf('\t'); - if (idx >= 0) { - dataMap.put(elem.substring(0, idx), elem.substring(idx + 1).trim()); - } - } - - MonitorCmdData monitorCmdData = new MonitorCmdData(); - dataMap.entrySet().stream().forEach(elem -> { - try { - switch (elem.getKey()) { - case "zk_version": - monitorCmdData.setZkVersion(elem.getValue().split("-")[0]); - break; - case "zk_avg_latency": - monitorCmdData.setZkAvgLatency(ConvertUtil.string2Float(elem.getValue())); - break; - case "zk_max_latency": - monitorCmdData.setZkMaxLatency(ConvertUtil.string2Float(elem.getValue())); - break; - case "zk_min_latency": - monitorCmdData.setZkMinLatency(ConvertUtil.string2Float(elem.getValue())); - break; - case "zk_packets_received": - monitorCmdData.setZkPacketsReceived(Long.valueOf(elem.getValue())); - break; - case "zk_packets_sent": - monitorCmdData.setZkPacketsSent(Long.valueOf(elem.getValue())); - break; - case "zk_num_alive_connections": - monitorCmdData.setZkNumAliveConnections(Long.valueOf(elem.getValue())); - break; - case "zk_outstanding_requests": - monitorCmdData.setZkOutstandingRequests(Long.valueOf(elem.getValue())); - break; - case "zk_server_state": - monitorCmdData.setZkServerState(elem.getValue()); - break; - case "zk_znode_count": - monitorCmdData.setZkZnodeCount(Long.valueOf(elem.getValue())); - break; - case "zk_watch_count": - monitorCmdData.setZkWatchCount(Long.valueOf(elem.getValue())); - break; - case "zk_ephemerals_count": - monitorCmdData.setZkEphemeralsCount(Long.valueOf(elem.getValue())); - break; - case "zk_approximate_data_size": - monitorCmdData.setZkApproximateDataSize(Long.valueOf(elem.getValue())); - break; - case "zk_open_file_descriptor_count": - monitorCmdData.setZkOpenFileDescriptorCount(Long.valueOf(elem.getValue())); - break; - case "zk_max_file_descriptor_count": - monitorCmdData.setZkMaxFileDescriptorCount(Long.valueOf(elem.getValue())); - break; - case "Proposal sizes last/min/max": - case "zk_fsync_threshold_exceed_count": - // 忽略该指标的解析 - break; - default: - LOGGER.warn( - "method=parseAndInitData||name={}||value={}||msg=data not parsed!", - elem.getKey(), elem.getValue() - ); - } - } catch (Exception e) { - LOGGER.error( - "method=parseAndInitData||clusterPhyId={}||host={}||port={}||name={}||value={}||errMsg=exception!", - clusterPhyId, host, port, elem.getKey(), elem.getValue(), e - ); - } - }); - - return monitorCmdData; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ServerCmdDataParser.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ServerCmdDataParser.java deleted file mode 100644 index e16fbdb0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/entity/zookeeper/fourletterword/parser/ServerCmdDataParser.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.parser; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.ServerCmdData; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.FourLetterWordUtil; -import lombok.Data; - -import java.util.HashMap; -import java.util.Map; - -/** - * Zookeeper version: 3.5.9-83df9301aa5c2a5d284a9940177808c01bc35cef, built on 01/06/2021 19:49 GMT - * Latency min/avg/max: 0/0/2209 - * Received: 278202469 - * Sent: 279449055 - * Connections: 31 - * Outstanding: 0 - * Zxid: 0x20033fc12 - * Mode: leader - * Node count: 10084 - * Proposal sizes last/min/max: 36/32/31260 leader特有 - */ -@Data -public class ServerCmdDataParser implements FourLetterWordDataParser { - private static final ILog LOGGER = LogFactory.getLog(ServerCmdDataParser.class); - - @Override - public String getCmd() { - return FourLetterWordUtil.ServerCmd; - } - - @Override - public ServerCmdData parseAndInitData(Long clusterPhyId, String host, int port, String cmdData) { - Map dataMap = new HashMap<>(); - for (String elem : cmdData.split("\n")) { - if (elem.isEmpty()) { - continue; - } - - int idx = elem.indexOf(':'); - if (idx >= 0) { - dataMap.put(elem.substring(0, idx), elem.substring(idx + 1).trim()); - } - } - - ServerCmdData serverCmdData = new ServerCmdData(); - dataMap.entrySet().stream().forEach(elem -> { - try { - switch (elem.getKey()) { - case "Zookeeper version": - serverCmdData.setZkVersion(elem.getValue().split("-")[0]); - break; - case "Latency min/avg/max": - String[] data = elem.getValue().split("/"); - serverCmdData.setZkMinLatency(ConvertUtil.string2Float(data[0])); - serverCmdData.setZkAvgLatency(ConvertUtil.string2Float(data[1])); - serverCmdData.setZkMaxLatency(ConvertUtil.string2Float(data[2])); - break; - case "Received": - serverCmdData.setZkPacketsReceived(Long.valueOf(elem.getValue())); - break; - case "Sent": - serverCmdData.setZkPacketsSent(Long.valueOf(elem.getValue())); - break; - case "Connections": - serverCmdData.setZkNumAliveConnections(Long.valueOf(elem.getValue())); - break; - case "Outstanding": - serverCmdData.setZkOutstandingRequests(Long.valueOf(elem.getValue())); - break; - case "Mode": - serverCmdData.setZkServerState(elem.getValue()); - break; - case "Node count": - serverCmdData.setZkZnodeCount(Long.valueOf(elem.getValue())); - break; - case "Zxid": - serverCmdData.setZkZxid(Long.parseUnsignedLong(elem.getValue().trim().substring(2), 16)); - break; - case "Proposal sizes last/min/max": - // zk的leader特有的数据,数据例子:Proposal sizes last/min/max||value=32/32/976165 - break; - default: - LOGGER.warn( - "method=parseAndInitData||name={}||value={}||msg=data not parsed!", - elem.getKey(), elem.getValue() - ); - } - } catch (Exception e) { - LOGGER.error( - "method=parseAndInitData||clusterPhyId={}||host={}||port={}||name={}||value={}||errMsg=exception!", - clusterPhyId, host, port, elem.getKey(), elem.getValue(), e - ); - } - }); - - return serverCmdData; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyAddedEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyAddedEvent.java deleted file mode 100644 index 67aa707e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyAddedEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.cluster; - -import lombok.Getter; - -/** - * 集群新增事件 - * @author zengqiao - * @date 22/02/25 - */ -@Getter -public class ClusterPhyAddedEvent extends ClusterPhyBaseEvent { - public ClusterPhyAddedEvent(Object source, Long clusterPhyId) { - super(source, clusterPhyId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyBaseEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyBaseEvent.java deleted file mode 100644 index 7defb6a9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyBaseEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.cluster; - -import lombok.Getter; -import org.springframework.context.ApplicationEvent; - -/** - * 集群事件基础类 - * @author zengqiao - * @date 21/9/11 - */ -@Getter -public class ClusterPhyBaseEvent extends ApplicationEvent { - protected final Long clusterPhyId; - - public ClusterPhyBaseEvent(Object source, Long clusterPhyId) { - super(source); - this.clusterPhyId = clusterPhyId; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyLoadChangedEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyLoadChangedEvent.java deleted file mode 100644 index 63b042e7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/ClusterPhyLoadChangedEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum; -import lombok.Getter; - -/** - * 被加载集群已变化事件 - * @author zengqiao - * @date 22/02/25 - */ -@Getter -public class ClusterPhyLoadChangedEvent extends ClusterPhyBaseEvent { - private final ClusterPhy inDBClusterPhy; - - private final ClusterPhy inCacheClusterPhy; - - private final OperationEnum operationEnum; - - public ClusterPhyLoadChangedEvent(Object source, ClusterPhy inDBClusterPhy, ClusterPhy inCacheClusterPhy, OperationEnum operationEnum) { - super(source, inDBClusterPhy != null? inDBClusterPhy.getId(): (inCacheClusterPhy != null? inCacheClusterPhy.getId(): null)); - this.inDBClusterPhy = inDBClusterPhy; - this.inCacheClusterPhy = inCacheClusterPhy; - this.operationEnum = operationEnum; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/connect/ConnectClusterLoadChangedEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/connect/ConnectClusterLoadChangedEvent.java deleted file mode 100644 index 659218c6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/cluster/connect/ConnectClusterLoadChangedEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.cluster.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum; -import lombok.Getter; -import org.springframework.context.ApplicationEvent; - -/** - * @author wyb - * @date 2022/11/7 - */ -@Getter -public class ConnectClusterLoadChangedEvent extends ApplicationEvent { - - private ConnectCluster inDBConnectCluster; - - private ConnectCluster inCacheConnectCluster; - - private final OperationEnum operationEnum; - - public ConnectClusterLoadChangedEvent(Object source, ConnectCluster inDBConnectCluster, ConnectCluster inCacheConnectCluster, OperationEnum operationEnum) { - super(source); - this.inDBConnectCluster = inDBConnectCluster; - this.inCacheConnectCluster = inCacheConnectCluster; - this.operationEnum = operationEnum; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BaseMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BaseMetricEvent.java deleted file mode 100644 index cfe5995a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BaseMetricEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import lombok.Getter; -import org.springframework.context.ApplicationEvent; - -/** - * @author didi - */ -@Getter -public class BaseMetricEvent extends ApplicationEvent { - public BaseMetricEvent(Object source) { - super( source ); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BrokerMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BrokerMetricEvent.java deleted file mode 100644 index afba5938..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/BrokerMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BrokerMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class BrokerMetricEvent extends BaseMetricEvent{ - - private final List brokerMetrics; - - public BrokerMetricEvent(Object source, List brokerMetrics) { - super( source ); - this.brokerMetrics = brokerMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ClusterMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ClusterMetricEvent.java deleted file mode 100644 index aaf38896..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ClusterMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class ClusterMetricEvent extends BaseMetricEvent{ - - private final List clusterMetrics; - - public ClusterMetricEvent(Object source, List clusterMetrics) { - super( source ); - this.clusterMetrics = clusterMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/GroupMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/GroupMetricEvent.java deleted file mode 100644 index 24ce93ca..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/GroupMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class GroupMetricEvent extends BaseMetricEvent{ - - private final List groupMetrics; - - public GroupMetricEvent(Object source, List groupMetrics) { - super( source ); - this.groupMetrics = groupMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/PartitionMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/PartitionMetricEvent.java deleted file mode 100644 index 0bc09b38..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/PartitionMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class PartitionMetricEvent extends BaseMetricEvent{ - - private final List partitionMetrics; - - public PartitionMetricEvent(Object source, List partitionMetrics) { - super( source ); - this.partitionMetrics = partitionMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/TopicMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/TopicMetricEvent.java deleted file mode 100644 index 359ef2a0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/TopicMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class TopicMetricEvent extends BaseMetricEvent{ - - private final List topicMetrics; - - public TopicMetricEvent(Object source, List topicMetrics) { - super( source ); - this.topicMetrics = topicMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ZookeeperMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ZookeeperMetricEvent.java deleted file mode 100644 index 261440d6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/ZookeeperMetricEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ZookeeperMetrics; -import lombok.Getter; - -import java.util.List; - -/** - * @author didi - */ -@Getter -public class ZookeeperMetricEvent extends BaseMetricEvent { - - private final List zookeeperMetrics; - - public ZookeeperMetricEvent(Object source, List zookeeperMetrics) { - super( source ); - this.zookeeperMetrics = zookeeperMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectClusterMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectClusterMetricEvent.java deleted file mode 100644 index 2e6101d1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectClusterMetricEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectClusterMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent; -import lombok.Getter; - -import java.util.List; - -/** - * @author wyb - * @date 2022/11/7 - */ -@Getter -public class ConnectClusterMetricEvent extends BaseMetricEvent { - private List connectClusterMetrics; - - public ConnectClusterMetricEvent(Object source, List connectClusterMetrics) { - super(source); - this.connectClusterMetrics = connectClusterMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectorMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectorMetricEvent.java deleted file mode 100644 index 23de77c0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/connect/ConnectorMetricEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent; -import lombok.Getter; - -import java.util.List; - -/** - * @author wyb - * @date 2022/11/7 - */ -@Getter -public class ConnectorMetricEvent extends BaseMetricEvent { - private List connectorMetricsList; - - public ConnectorMetricEvent(Object source, List connectorMetricsList) { - super(source); - this.connectorMetricsList = connectorMetricsList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/mm2/MirrorMakerMetricEvent.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/mm2/MirrorMakerMetricEvent.java deleted file mode 100644 index 42e98ce7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/event/metric/mm2/MirrorMakerMetricEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.event.metric.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.mm2.MirrorMakerMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent; -import lombok.Getter; - -import java.util.List; - -/** - * @author zengqiao - * @date 2022/12/20 - */ -@Getter -public class MirrorMakerMetricEvent extends BaseMetricEvent { - private final List metricsList; - - public MirrorMakerMetricEvent(Object source, List metricsList) { - super(source); - this.metricsList = metricsList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BaseESPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BaseESPO.java deleted file mode 100644 index 3d2d9ed2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BaseESPO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -public abstract class BaseESPO { - /** - * 获取ES文档的主键key - * - * @return - */ - public abstract String getKey(); - - /** - * 获取routing值 - * @return - */ - public abstract String getRoutingValue(); -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BasePO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BasePO.java deleted file mode 100644 index 203d20f2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/BasePO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -@Data -public class BasePO implements Serializable { - /** - * 主键 - */ - @TableId(type = IdType.AUTO) - protected Long id; - - /** - * 创建时间 - */ - protected Date createTime; - - /** - * 更新时间 - */ - protected Date updateTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ControllerChangeLogPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ControllerChangeLogPO.java deleted file mode 100644 index 3a969642..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ControllerChangeLogPO.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "controller_change_log") -public class ControllerChangeLogPO extends BasePO { - - /** - * 改变时间 - */ - private Long changeTime; - - /** - * BrokerId - */ - private Integer brokerId; - - /** - * rack - */ - private String rack; - - /** - * 主机 - */ - private String host; - - /** - * kafka 集群 id - */ - private Long clusterPhyId; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaAclPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaAclPO.java deleted file mode 100644 index a7db5e11..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaAclPO.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "kafka_acl") -public class KafkaAclPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * KafkaUser - */ - private String principal; - - /** - * '操作' - */ - private Integer operation; - - /** - * 权限类型(0:未知,1:任意,2:拒绝,3:允许) - */ - private Integer permissionType; - - /** - * 机器 - */ - private String host; - - /** - * 资源类型(0:未知,1:任意,2:Topic,3:Group,4:Cluster,5:事务,6:Token) - */ - private Integer resourceType; - - /** - * 资源名称 - */ - private String resourceName; - - /** - * 匹配类型(0:未知,1:任意,2:Match,3:Literal,4:prefixed) - */ - private Integer patternType; - - /** - * 唯一字段,由cluster_phy_id等字段组成 - */ - private String uniqueField; - - public void initUniqueField() { - this.uniqueField = String.format( - "%d_%s_%d_%d_%s_%d_%s_%d", - clusterPhyId, principal, operation, permissionType, host, resourceType, resourceName, permissionType - ); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaUserPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaUserPO.java deleted file mode 100644 index 0a10c6bd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/KafkaUserPO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "kafka_user") -public class KafkaUserPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * KafkaUser - */ - private String name; - - /** - * 密钥 - */ - private String token; - - public KafkaUserPO() { - } - - public KafkaUserPO(Long clusterPhyId, String name, String token) { - this.clusterPhyId = clusterPhyId; - this.name = name; - this.token = token; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/VersionControlItemPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/VersionControlItemPO.java deleted file mode 100644 index ff7d532e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/VersionControlItemPO.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class VersionControlItemPO extends BasePO{ - - /** - * VersionItemTypeEnum - */ - private int type; - - /** - * name - */ - private String name; - - /** - * 归一化之后的版本号 - */ - private long minVersion; - - /** - * 归一化之后的版本号 - */ - private long maxVersion; - - /** - * 扩展 - */ - private String extend; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerConfigPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerConfigPO.java deleted file mode 100644 index 8595c477..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerConfigPO.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.broker; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "broker_config") -public class BrokerConfigPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * BrokerId - */ - private Integer brokerId; - - /** - * 配置名称 - */ - private String configName; - - /** - * 配置值 - */ - private String configValue; - - /** - * 差异类型 - */ - private Integer diffType; - - public BrokerConfigPO(Long clusterPhyId, Integer brokerId, String configName, String configValue, Integer diffType, Date updateTime) { - this.clusterPhyId = clusterPhyId; - this.brokerId = brokerId; - this.configName = configName; - this.configValue = configValue; - this.diffType = diffType; - this.updateTime = updateTime; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerPO.java deleted file mode 100644 index 16f98d88..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/broker/BrokerPO.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.broker; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "broker") -public class BrokerPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * BrokerId - */ - private Integer brokerId; - - /** - * 主机 - */ - private String host; - - /** - * 端口 - */ - private Integer port; - - /** - * Jmx端口 - */ - private Integer jmxPort; - - /** - * 启动时间 - */ - private Long startTimestamp; - - /** - * Broker状态 - */ - private Integer status; - - /** - * 监听信息 - */ - private String endpointMap; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/changerecord/KafkaChangeRecordPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/changerecord/KafkaChangeRecordPO.java deleted file mode 100644 index 337db31e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/changerecord/KafkaChangeRecordPO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.changerecord; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "kafka_change_record") -public class KafkaChangeRecordPO extends BasePO { - private Long clusterPhyId; - - private Integer resType; - - private String resName; - - private Integer operateType; - - private Date operateTime; - - /** - * 唯一字段 - */ - private String uniqueField; - - public KafkaChangeRecordPO(Long clusterPhyId, - ModuleEnum moduleEnum, - String resName, - OperationEnum operationEnum, - Date operateTime) { - this.clusterPhyId = clusterPhyId; - this.resType = moduleEnum.getCode(); - this.resName = resName; - this.operateType = operationEnum.getCode(); - this.operateTime = operateTime; - this.createTime = operateTime; - this.updateTime = operateTime; - - this.uniqueField = String.format("%d-%d-%s-%d-%d", clusterPhyId, moduleEnum.getCode(), resName, operationEnum.getCode(), operateTime.getTime()); - } - - public KafkaChangeRecordPO(Long clusterPhyId, - ModuleEnum moduleEnum, - String resName, - OperationEnum operationEnum, - Date operateTime, - Date uniqueFieldOperateTime) { - this.clusterPhyId = clusterPhyId; - this.resType = moduleEnum.getCode(); - this.resName = resName; - this.operateType = operationEnum.getCode(); - this.operateTime = operateTime; - this.createTime = operateTime; - this.updateTime = operateTime; - - this.uniqueField = String.format("%d-%d-%s-%d-%d", clusterPhyId, moduleEnum.getCode(), resName, operationEnum.getCode(), uniqueFieldOperateTime.getTime()); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/cluster/ClusterPhyPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/cluster/ClusterPhyPO.java deleted file mode 100644 index 0a9bba41..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/cluster/ClusterPhyPO.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.cluster; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "physical_cluster") -public class ClusterPhyPO extends BasePO { - /** - * 集群名字 - */ - private String name; - - /** - * 集群服务地址 - */ - private String bootstrapServers; - - /** - * 版本信息 - */ - private String kafkaVersion; - - /** - * ZK地址 - */ - private String zookeeper; - - /** - * 集群客户端配置 - */ - private String clientProperties; - - /** - * jmx配置 - */ - private String jmxProperties; - - /** - * zk配置 - */ - private String zkProperties; - - /** - * 认证类型 - * @see com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterAuthTypeEnum - */ - private Integer authType; - - /** - * 运行状态 - * @see com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterRunStateEnum - */ - private Integer runState; - - /** - * 备注 - */ - private String description; - - public static Result checkFieldAddToDBLegal(ClusterPhyPO clusterPhyPO, String operator) { - if (clusterPhyPO == null) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "clusterPhyPO不允许为空"); - } - if (ValidateUtils.isBlank(operator)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "operator不允许为空"); - } - if (ValidateUtils.isBlank(clusterPhyPO.name)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "name不允许为空"); - } - if (ValidateUtils.isBlank(clusterPhyPO.bootstrapServers)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "bootstrapServers不允许为空"); - } - if (ValidateUtils.isBlank(clusterPhyPO.kafkaVersion)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "kafkaVersion不允许为空"); - } - if (ValidateUtils.isNull(clusterPhyPO.zookeeper)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "zookeeper不允许为null"); - } - if (ValidateUtils.isBlank(clusterPhyPO.clientProperties)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "clientProperties不允许为空"); - } - if (ValidateUtils.isBlank(clusterPhyPO.jmxProperties)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "jmxProperties不允许为空"); - } - if (ValidateUtils.isNull(clusterPhyPO.authType)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "authType不允许为空"); - } - if (ValidateUtils.isNull(clusterPhyPO.runState)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "runState不允许为空"); - } - if (ValidateUtils.isNull(clusterPhyPO.description)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "description不允许为null"); - } - return Result.buildSuc(); - } - - public static Result checkFieldModifyToDBLegal(ClusterPhyPO clusterPhyPO, String operator) { - Result rv = ClusterPhyPO.checkFieldAddToDBLegal(clusterPhyPO, operator); - if (rv.failed()) { - return rv; - } - - if (ValidateUtils.isNullOrLessThanZero(clusterPhyPO.id)) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, "id不允许为空或小于0"); - } - - return Result.buildSuc(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/config/PlatformClusterConfigPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/config/PlatformClusterConfigPO.java deleted file mode 100644 index 788c4d88..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/config/PlatformClusterConfigPO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.config; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "platform_cluster_config") -public class PlatformClusterConfigPO extends BasePO { - /** - * 配置组 - */ - private Long clusterId; - - /** - * 配置组 - */ - private String valueGroup; - - /** - * 配置项的名称 - */ - private String valueName; - - /** - * 配置项的值 - */ - private String value; - - /** - * 备注 - */ - private String description; - - /** - * 操作人 - */ - private String operator; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectClusterPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectClusterPO.java deleted file mode 100644 index f0a364e6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectClusterPO.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.connect; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "connect_cluster") -public class ConnectClusterPO extends BasePO { - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * 集群名字 - */ - private String name; - - /** - * 集群使用的消费组 - */ - private String groupName; - - /** - * 集群使用的消费组状态,也表示集群状态 - */ - private Integer state; - - /** - * 集群地址 - */ - private String clusterUrl; - - /** - * worker中显示的leader url信息 - */ - private String memberLeaderUrl; - - /** - * 版本信息 - */ - private String version; - - /** - * jmx配置 - * @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig - */ - private String jmxProperties; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectWorkerPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectWorkerPO.java deleted file mode 100644 index 5eb9a9ef..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectWorkerPO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.connect; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "worker") -public class ConnectWorkerPO extends BasePO { - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * 集群ID - */ - private Long connectClusterId; - - /** - * 成员ID - */ - private String memberId; - - /** - * 主机 - */ - private String host; - - /** - * Jmx端口 - */ - private Integer jmxPort; - - /** - * URL - */ - private String url; - - /** - * leader的URL - */ - private String leaderUrl; - - /** - * 1:是leader,0:不是leader - */ - private Integer leader; - - /** - * worker地址 - */ - private String workerId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectorPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectorPO.java deleted file mode 100644 index 1d82a9e1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/ConnectorPO.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.connect; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "connector") -public class ConnectorPO extends BasePO { - /** - * Kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * connect集群ID - */ - private Long connectClusterId; - - /** - * connector名称 - */ - private String connectorName; - - /** - * connector类名 - */ - private String connectorClassName; - - /** - * connector类型 - */ - private String connectorType; - - /** - * 访问过的Topic列表 - */ - private String topics; - - /** - * task数 - */ - private Integer taskCount; - - /** - * 状态 - */ - private String state; - - /** - * 心跳检测connector - */ - private String heartbeatConnectorName; - - /** - * 进度确认connector - */ - private String checkpointConnectorName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/WorkerConnectorPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/WorkerConnectorPO.java deleted file mode 100644 index f30d0ab6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/connect/WorkerConnectorPO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.connect; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "worker_connector") -public class WorkerConnectorPO extends BasePO { - /** - * connect集群ID - */ - private Long connectClusterId; - - /** - * kafka集群ID - */ - private Long kafkaClusterPhyId; - - /** - * connector名称 - */ - private String connectorName; - - /** - * worker成员ID - */ - private String workerMemberId; - - /** - * 任务ID - */ - private Integer taskId; - - /** - * task状态 - */ - private String state; - - /** - * worker信息 - */ - private String workerId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupMemberPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupMemberPO.java deleted file mode 100644 index 7992ac17..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupMemberPO.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.group; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "group_member") -public class GroupMemberPO extends BasePO { - private Long clusterPhyId; - - private String topicName; - - private String groupName; - - private String state; - - private Integer memberCount; - - public GroupMemberPO(Long clusterPhyId, String topicName, String groupName, String state, Integer memberCount) { - this.clusterPhyId = clusterPhyId; - this.topicName = topicName; - this.groupName = groupName; - this.state = state; - this.memberCount = memberCount; - } - public GroupMemberPO(Long clusterPhyId, String topicName, String groupName, String state, Integer memberCount, Date updateTime) { - this.clusterPhyId = clusterPhyId; - this.topicName = topicName; - this.groupName = groupName; - this.state = state; - this.memberCount = memberCount; - this.updateTime = updateTime; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupPO.java deleted file mode 100644 index 49ac5bf3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/group/GroupPO.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.group; - - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum; -import lombok.Data; -import lombok.NoArgsConstructor; - - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "group") -public class GroupPO extends BasePO { - /** - * 集群id - */ - private Long clusterPhyId; - - /** - * group类型 - * - * @see GroupTypeEnum - */ - private Integer type; - - /** - * group名称 - */ - private String name; - - /** - * group状态 - * - * @see GroupStateEnum - */ - private String state; - - /** - * group成员数量 - */ - private Integer memberCount; - - /** - * group消费的topic列表 - */ - private String topicMembers; - - /** - * group分配策略 - */ - private String partitionAssignor; - - /** - * group协调器brokerId - */ - private int coordinatorId; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ha/HaActiveStandbyRelationPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ha/HaActiveStandbyRelationPO.java deleted file mode 100644 index e019a4f0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/ha/HaActiveStandbyRelationPO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.ha; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@TableName(Constant.MYSQL_HA_TABLE_NAME_PREFIX + "active_standby_relation") -public class HaActiveStandbyRelationPO extends BasePO { - private Long activeClusterPhyId; - - private Long standbyClusterPhyId; - - /** - * 资源名称 - */ - private String resName; - - /** - * 资源类型,0:集群,1:镜像Topic,2:主备Topic - */ - private Integer resType; - - public HaActiveStandbyRelationPO(Long activeClusterPhyId, Long standbyClusterPhyId, String resName, Integer resType) { - this.activeClusterPhyId = activeClusterPhyId; - this.standbyClusterPhyId = standbyClusterPhyId; - this.resName = resName; - this.resType = resType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/health/HealthCheckResultPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/health/HealthCheckResultPO.java deleted file mode 100644 index 1488c8de..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/health/HealthCheckResultPO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.health; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "health_check_result") -public class HealthCheckResultPO extends BasePO { - /** - * 检查维度(0:未知,1:Cluster,2:Broker,3:Topic,4:Group) - */ - private Integer dimension; - - /** - * 配置ID - */ - private String configName; - - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * 资源名称 - */ - private String resName; - - /** - * 是否通过 - */ - private Integer passed; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/job/JobPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/job/JobPO.java deleted file mode 100644 index 8cc09aa2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/job/JobPO.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.job; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.content.BaseJobCreateContent; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.enums.job.JobStatusEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - -import java.util.Date; - -/** - * WorkTask PO 对象 - * - * @author fengqiongfeng - * @date 2020-12-21 - */ - -@Data -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true) -@TableName(value = "ks_km_job") -public class JobPO extends BasePO { - - /** - * 集群id - */ - private Long clusterId; - - /** - * 标题 - */ - private String jobName; - - /** - * 标题 - */ - private String jobDesc; - - /** - * 任务类型 - */ - private Integer jobType; - - /** - * 创建任务的详细数据 - * @see BaseJobCreateContent - */ - private String jobData; - - /** - * 任务状态: - * @see JobStatusEnum - */ - private Integer jobStatus; - - /** - * 任务运行详细状态(json), Success:7 Fail:1 Doing:2 - */ - private String runningStatus; - - /** - * 任务执行对象 - */ - private String target; - - /** - * 创建人 - */ - private String creator; - - /** - * 任务计划开始执行时间 - */ - private Date planTime; - - /** - * 任务实际开始执行时间 - */ - private Date startTime; - -} - diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/kafkacontrollr/KafkaControllerPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/kafkacontrollr/KafkaControllerPO.java deleted file mode 100644 index d484b6d5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/kafkacontrollr/KafkaControllerPO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.kafkacontrollr; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "kafka_controller") -public class KafkaControllerPO extends BasePO { - private Long clusterPhyId; - - private Integer brokerId; - - private String brokerHost; - - private String brokerRack; - - private Long timestamp; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/km/KmNodePO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/km/KmNodePO.java deleted file mode 100644 index 71282225..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/km/KmNodePO.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.km; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -import java.util.Date; - -/** - * @author didi - */ - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "app_node") -public class KmNodePO extends BasePO { - - /** - * hostName - */ - private String hostName; - - /** - * ip - */ - private String ip; - - /** - * 心跳时间 - */ - private Date beatTime; - - /** - * 应用名称 - */ - private String appName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BaseMetricESPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BaseMetricESPO.java deleted file mode 100644 index e558468b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BaseMetricESPO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import com.xiaojukeji.know.streaming.km.common.bean.po.BaseESPO; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.util.CollectionUtils; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public abstract class BaseMetricESPO extends BaseESPO { - - protected Long clusterPhyId; - - protected long timestamp = monitorTimestamp2min(System.currentTimeMillis()); - - protected Map metrics = new ConcurrentHashMap<>(); - - protected BaseMetricESPO(Long clusterPhyId){ - this.clusterPhyId = clusterPhyId; - } - - public void putMetric(String key, Float value) { - metrics.put(key, value); - } - - public void putMetrics(Map metrics){ - this.metrics.putAll(metrics); - } - - public Map getMetrics(List metricNames){ - if(CollectionUtils.isEmpty(metricNames)){return metrics;} - - Map retMetrics = new HashMap<>(); - for(String metric : metricNames){ - Float value = metrics.get(metric); - if(null != value){ - retMetrics.put(metric, value); - } - } - - return retMetrics; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BrokerMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BrokerMetricPO.java deleted file mode 100644 index 9d025701..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/BrokerMetricPO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class BrokerMetricPO extends BaseMetricESPO { - - private Integer brokerId; - - private String host; - - private Integer port; - - public BrokerMetricPO(Long clusterId, Integer brokerId){ - super(clusterId); - this.brokerId = brokerId; - } - - @Override - public String getKey() { - return "B@" + clusterPhyId + "@" + brokerId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(brokerId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ClusterMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ClusterMetricPO.java deleted file mode 100644 index 239ad580..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ClusterMetricPO.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ClusterMetricPO extends BaseMetricESPO { - - private String kafkaVersion; - - public ClusterMetricPO(Long clusterPhyId){ - super(clusterPhyId); - } - - public ClusterMetricPO(Long clusterPhyId, String kafkaVersion){ - super(clusterPhyId); - this.kafkaVersion = kafkaVersion; - } - - @Override - public String getKey() { - return "C@" + clusterPhyId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf( clusterPhyId ); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/GroupMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/GroupMetricPO.java deleted file mode 100644 index 645f80dd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/GroupMetricPO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.ONE; -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GroupMetricPO extends BaseMetricESPO { - private Integer partitionId; - - private String topic; - - private String group; - - /** - * 1: group维度的指标, 0: group & topicName & partitionId维度的指标 - * 针对类似枚举和状态类属性,使用字符串来表示比使用数值或者bool类型,ES的查询效率更高 - */ - private String groupMetric = ONE; - - @Override - public String getKey() { - return ONE.equals(groupMetric) ? "G@" +clusterPhyId + "@" + group + "@" + monitorTimestamp2min(timestamp) - : "G@" +clusterPhyId + "@" + group + "@" + partitionId + "@" + topic + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return clusterPhyId + "@" + group; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/PartitionMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/PartitionMetricPO.java deleted file mode 100644 index 9bd598b8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/PartitionMetricPO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PartitionMetricPO extends BaseMetricESPO{ - - private String topic; - - private Integer brokerId; - - private Integer partitionId; - - public PartitionMetricPO(Long clusterId, String topicName, Integer brokerId, Integer partitionId){ - super(clusterId); - this.topic = topicName; - this.brokerId = brokerId; - this.partitionId = partitionId; - } - - @Override - public String getKey() { - return "P@" + clusterPhyId + "@" + topic + "@" + brokerId + "@" +partitionId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(partitionId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ReplicationMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ReplicationMetricPO.java deleted file mode 100644 index 4172f2c9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ReplicationMetricPO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ReplicationMetricPO extends BaseMetricESPO{ - - private String topic; - - private Integer brokerId; - - private Integer partitionId; - - public ReplicationMetricPO(Long clusterId, String topicName, Integer brokerId, Integer partitionId){ - super(clusterId); - this.topic = topicName; - this.brokerId = brokerId; - this.partitionId = partitionId; - } - - @Override - public String getKey() { - return "R@" + clusterPhyId + "@" + topic + "@" + brokerId + "@" +partitionId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(partitionId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/TopicMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/TopicMetricPO.java deleted file mode 100644 index 1a671d00..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/TopicMetricPO.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.constant.Constant.*; -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TopicMetricPO extends BaseMetricESPO { - - private String topic; - - private Integer brokerId; - - /** - * brokerAgg: 1:是由broker聚合而成的topic整体维度指标,0:是broker维度的指标 - * 针对类似枚举和状态类属性,使用字符串来表示,ES的查询效率更高 - */ - private String brokerAgg = ONE; - - /** - * defaultTopic: 1:是集群默认索引,0:不是集群默认索引 - * 针对类似枚举和状态类属性,使用字符串来表示,ES的查询效率更高 - */ - private String defaultTopic = ZERO; - - public TopicMetricPO(String topic, Long clusterPhyId){ - super(clusterPhyId); - this.topic = topic; - } - - @Override - public String getKey() { - return ONE.equals(brokerAgg) ? "T@" + clusterPhyId + "@" + topic + "@" + monitorTimestamp2min(timestamp) - : "T@" + clusterPhyId + "@" + brokerId + "@" + topic + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return topic; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ZookeeperMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ZookeeperMetricPO.java deleted file mode 100644 index 96921739..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/ZookeeperMetricPO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice; - -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -@Data -@NoArgsConstructor -public class ZookeeperMetricPO extends BaseMetricESPO { - public ZookeeperMetricPO(Long clusterPhyId){ - super(clusterPhyId); - } - - @Override - public String getKey() { - return "ZK@" + clusterPhyId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(clusterPhyId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectClusterMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectClusterMetricPO.java deleted file mode 100644 index 462c7763..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectClusterMetricPO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.BaseMetricESPO; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectClusterMetricPO extends BaseMetricESPO { - private Long connectClusterId; - - public ConnectClusterMetricPO(Long kafkaClusterPhyId, Long connectClusterId){ - super(kafkaClusterPhyId); - this.connectClusterId = connectClusterId; - } - - @Override - public String getKey() { - return "KCC@" + clusterPhyId + "@" + connectClusterId + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(connectClusterId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectorMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectorMetricPO.java deleted file mode 100644 index 7f3f7d71..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/connect/ConnectorMetricPO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.BaseMetricESPO; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectorMetricPO extends BaseMetricESPO { - private Long connectClusterId; - - private String connectorName; - - /** - * 用于es内部排序 - */ - private String connectorNameAndClusterId; - - public ConnectorMetricPO(Long kafkaClusterPhyId, Long connectClusterId, String connectorName){ - super(kafkaClusterPhyId); - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.connectorNameAndClusterId = connectorName + "#" + connectClusterId; - } - - @Override - public String getKey() { - return "KCOR@" + clusterPhyId + "@" + connectClusterId + "@" + connectorName + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(connectClusterId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/mm2/MirrorMakerMetricPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/mm2/MirrorMakerMetricPO.java deleted file mode 100644 index 5a823024..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/metrice/mm2/MirrorMakerMetricPO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.metrice.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.BaseMetricESPO; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.xiaojukeji.know.streaming.km.common.utils.CommonUtils.monitorTimestamp2min; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class MirrorMakerMetricPO extends BaseMetricESPO { - private Long connectClusterId; - - private String connectorName; - - /** - * 用于es内部排序 - */ - private String connectorNameAndClusterId; - - public MirrorMakerMetricPO(Long kafkaClusterPhyId, Long connectClusterId, String connectorName){ - super(kafkaClusterPhyId); - this.connectClusterId = connectClusterId; - this.connectorName = connectorName; - this.connectorNameAndClusterId = connectorName + "#" + connectClusterId; - } - - @Override - public String getKey() { - return "KCOR@" + clusterPhyId + "@" + connectClusterId + "@" + connectorName + "@" + monitorTimestamp2min(timestamp); - } - - @Override - public String getRoutingValue() { - return String.valueOf(connectClusterId); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/partition/PartitionPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/partition/PartitionPO.java deleted file mode 100644 index 8740668c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/partition/PartitionPO.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.partition; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -import java.util.Objects; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "partition") -public class PartitionPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 分区ID - */ - private Integer partitionId; - - /** - * LeaderBroker - */ - private Integer leaderBrokerId; - - /** - * ISR - */ - private String inSyncReplicas; - - /** - * AR - */ - private String assignReplicas; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - - PartitionPO po = (PartitionPO) o; - return Objects.equals(clusterPhyId, po.clusterPhyId) - && Objects.equals(topicName, po.topicName) - && Objects.equals(partitionId, po.partitionId) - && Objects.equals(leaderBrokerId, po.leaderBrokerId) - && Objects.equals(inSyncReplicas, po.inSyncReplicas) - && Objects.equals(assignReplicas, po.assignReplicas); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), clusterPhyId, topicName, partitionId, leaderBrokerId, inSyncReplicas, assignReplicas); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignJobPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignJobPO.java deleted file mode 100644 index 5fecb9d5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignJobPO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.reassign; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -import java.util.Date; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "reassign_job") -public class ReassignJobPO extends BasePO { - /** - * 物理集群ID - */ - private Long clusterPhyId; - - /** - * 迁移Json - */ - private String reassignmentJson; - - /** - * 备注 - */ - private String description; - - /** - * 限流值 - */ - private Long throttleUnitByte; - - /** - * 开始时间 - */ - private Date startTime; - - /** - * 结束时间 - */ - private Date finishedTime; - - /** - * 创建人 - */ - private String creator; - - /** - * 状态 - */ - private Integer status; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignSubJobPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignSubJobPO.java deleted file mode 100644 index 210e8c9f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/reassign/ReassignSubJobPO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.reassign; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -import java.util.Date; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "reassign_sub_job") -public class ReassignSubJobPO extends BasePO { - /** - * 主任务ID - */ - private Long jobId; - - /** - * 物流集群ID - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 分区ID - */ - private Integer partitionId; - - /** - * 源Broker列表 - */ - private String originalBrokerIds; - - /** - * 目标Broker列表 - */ - private String reassignBrokerIds; - - /** - * 开始时间 - */ - private Date startTime; - - /** - * 结束时间 - */ - private Date finishedTime; - - /** - * 扩展数据 - * @see com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.ReassignSubJobExtendData - */ - private String extendData; - - /** - * 状态 - * @see com.xiaojukeji.know.streaming.km.common.enums.job.JobStatusEnum - */ - private Integer status; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/topic/TopicPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/topic/TopicPO.java deleted file mode 100644 index 8e14a313..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/topic/TopicPO.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.topic; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -import java.util.Objects; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "topic") -public class TopicPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * Topic名称 - */ - private String topicName; - - /** - * 副本数 - */ - private Integer replicaNum; - - /** - * 分区数 - */ - private Integer partitionNum; - - /** - * BrokerId列表 - */ - private String brokerIds; - - /** - * 分区分布 - */ - private String partitionMap; - - /** - * 保存时间 - */ - private Long retentionMs; - - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.topic.TopicTypeEnum - */ - private Integer type; - - /** - * 备注信息 - */ - private String description; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - if (!super.equals(o)) { - return false; - } - - TopicPO topicPO = (TopicPO) o; - return Objects.equals(clusterPhyId, topicPO.clusterPhyId) - && Objects.equals(topicName, topicPO.topicName) - && Objects.equals(replicaNum, topicPO.replicaNum) - && Objects.equals(partitionNum, topicPO.partitionNum) - && Objects.equals(brokerIds, topicPO.brokerIds) - && Objects.equals(partitionMap, topicPO.partitionMap) - && Objects.equals(retentionMs, topicPO.retentionMs) - && Objects.equals(type, topicPO.type) - && Objects.equals(description, topicPO.description); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), clusterPhyId, topicName, replicaNum, partitionNum, brokerIds, partitionMap, retentionMs, type, description); - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/zookeeper/ZookeeperInfoPO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/zookeeper/ZookeeperInfoPO.java deleted file mode 100644 index 69968ef6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/po/zookeeper/ZookeeperInfoPO.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.po.zookeeper; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Data; - -@Data -@TableName(Constant.MYSQL_TABLE_NAME_PREFIX + "zookeeper") -public class ZookeeperInfoPO extends BasePO { - /** - * 集群Id - */ - private Long clusterPhyId; - - /** - * 主机 - */ - private String host; - - /** - * 端口 - */ - private Integer port; - - /** - * 角色 - */ - private String role; - - /** - * 版本 - */ - private String version; - - /** - * ZK状态 - */ - private Integer status; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseTimeVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseTimeVO.java deleted file mode 100644 index cc665fec..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseTimeVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.ToString; - -import java.util.Date; - -/** - * @author d06679 - * @date 2019/3/13 - */ -@ToString -@Data -public class BaseTimeVO extends BaseVO { - @ApiModelProperty(value = "创建时间(ms)", example = "1645608135717") - private Date createTime; - - @ApiModelProperty(value = "更新时间(ms)", example = "1645608135717") - private Date updateTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseVO.java deleted file mode 100644 index 00fe5f7e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/BaseVO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo; - -import lombok.ToString; - -import java.io.Serializable; - -/** - * @author d06679 - * @date 2019/3/13 - */ -@ToString -public class BaseVO implements Serializable { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/acl/AclBindingVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/acl/AclBindingVO.java deleted file mode 100644 index de053391..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/acl/AclBindingVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.acl; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "ACL绑定信息") -public class AclBindingVO { - @ApiModelProperty(value = "kafkaUser名称", example = "know-streaming") - private String kafkaUser; - - /** - * 定义操作 —— 操作类型 - * @see org.apache.kafka.common.acl.AclOperation - */ - @ApiModelProperty(value = "操作类型,读/写/任意等", example = "1") - private Integer aclOperation; - - /** - * 定义操作 — 权限状态,允许或者拒绝 - * @see org.apache.kafka.common.acl.AclPermissionType - */ - @ApiModelProperty(value = "权限状态,允许/拒绝等", example = "2") - private Integer aclPermissionType; - - /** - * 定义操作 — 客户端主机 - */ - @ApiModelProperty(value = "客户端主机", example = "127.0.0.1") - private String aclClientHost; - - /** - * 定义资源 —— 资源类型 - * @see org.apache.kafka.common.resource.ResourceType - */ - @ApiModelProperty(value = "资源类型, Topic/Group等", example = "2") - private Integer resourceType; - - /** - * 定义资源 —— 资源名称 - */ - @ApiModelProperty(value = "资源名称", example = "know-streaming") - private String resourceName; - - /** - * 定义资源 —— 资源匹配方式 - * @see org.apache.kafka.common.resource.PatternType - */ - @ApiModelProperty(value = "资源匹配方式", example = "2") - private Integer resourcePatternType; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerBasicVO.java deleted file mode 100644 index fdd9eb86..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerBasicVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.broker; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.metadata.BrokerMetadataVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * 集群Broker信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@NoArgsConstructor -@ApiModel(description = "Broker基本信息") -public class BrokerBasicVO extends BrokerMetadataVO { - @ApiModelProperty(value = "集群名称", example = "know-streaming") - private String clusterName; - - public BrokerBasicVO(Integer brokerId, String host, String clusterName) { - super(brokerId, host); - this.clusterName = clusterName; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerReplicaSummaryVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerReplicaSummaryVO.java deleted file mode 100644 index ad6390b1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/broker/BrokerReplicaSummaryVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.broker; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "BrokerReplica信息") -public class BrokerReplicaSummaryVO { - @ApiModelProperty(value = "Topic名字", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value = "分区ID", example = "1") - private Integer partitionId; - - @ApiModelProperty(value = "leaderBrokerId", example = "12") - private Integer leaderBrokerId; - - @ApiModelProperty(value = "是否为leader副本", example = "true") - private Boolean isLeaderReplace; - - @ApiModelProperty(value = "是否在Isr中", example = "true") - private Boolean inSync; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/changerecord/KafkaChangeRecordVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/changerecord/KafkaChangeRecordVO.java deleted file mode 100644 index f94f0b0b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/changerecord/KafkaChangeRecordVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.changerecord; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@Data -public class KafkaChangeRecordVO extends BaseTimeVO { - @ApiModelProperty(value = "集群ID", example = "6") - private Long clusterPhyId; - - @ApiModelProperty(value = "资源类型Code", example = "0") - private Integer resTypeCode; - - @ApiModelProperty(value = "资源类型名称", example = "Topics") - private String resTypeName; - - @ApiModelProperty(value = "资源名称", example = "know-streaming") - private String resName; - - @ApiModelProperty(value = "变更说明", example = "修改配置") - private String changeDesc; - - @ApiModelProperty(value = "操作时间") - private Date operateTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseCombineExistVO.java deleted file mode 100644 index 1ffc6da1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseCombineExistVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "集群信息") -public class ClusterPhyBaseCombineExistVO extends ClusterPhyBaseVO { - @ApiModelProperty(value="是否存在", example = "true") - protected Boolean exist; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseVO.java deleted file mode 100644 index e0707e20..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyBaseVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "集群信息") -public class ClusterPhyBaseVO extends BaseTimeVO { - @ApiModelProperty(value="集群ID", example = "1") - protected Long id; - - @ApiModelProperty(value="集群名称", example = "KnowStreaming") - protected String name; - - @ApiModelProperty(value="ZK地址, 不允许修改", example = "127.0.0.1:2181") - protected String zookeeper; - - @ApiModelProperty(value="bootstrap地址", example = "127.0.0.1:9093") - protected String bootstrapServers; - - @ApiModelProperty(value="KM连接集群时使用的客户端配置", example = "{}") - protected String clientProperties; - - @ApiModelProperty(value="Jmx配置", example = "{}") - protected String jmxProperties; - - @ApiModelProperty(value="ZK配置", example = "{}") - protected String zkProperties; - - @ApiModelProperty(value="描述", example = "测试") - protected String description; - - @ApiModelProperty(value="集群的kafka版本", example = "2.5.1") - protected String kafkaVersion; - - @ApiModelProperty(value="集群的运行模式", example = "2:raft模式,其他是ZK模式") - private Integer runState; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyDashboardVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyDashboardVO.java deleted file mode 100644 index 3d38d283..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhyDashboardVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "集群大盘信息") -public class ClusterPhyDashboardVO extends ClusterPhyBaseVO { - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/Brokers/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "多个指标的历史曲线值,包括LogSize/BytesIn等") - private List metricLines; - - @ApiModelProperty(value="是否存活,1:Live,0:Down", example = "1") - private Integer alive; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysHealthStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysHealthStateVO.java deleted file mode 100644 index 4c81d30c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysHealthStateVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "集群健康状态信息") -public class ClusterPhysHealthStateVO { - @ApiModelProperty(value = "未知", example = "30") - private Integer unknownCount; - - @ApiModelProperty(value = "好", example = "30") - private Integer goodCount; - - @ApiModelProperty(value = "中", example = "30") - private Integer mediumCount; - - @ApiModelProperty(value = "差", example = "30") - private Integer poorCount; - - @ApiModelProperty(value = "down", example = "30") - private Integer deadCount; - - @ApiModelProperty(value = "总数", example = "150") - private Integer total; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysStateVO.java deleted file mode 100644 index b8a7c8dd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/ClusterPhysStateVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "集群状态信息") -public class ClusterPhysStateVO { - @ApiModelProperty(value = "存活集群数", example = "30") - private Integer liveCount; - - @ApiModelProperty(value = "挂掉集群数", example = "10") - private Integer downCount; - - @ApiModelProperty(value = "未知状态集群数", example = "10") - private Integer unknownCount; - - @ApiModelProperty(value = "集群总数", example = "40") - private Integer total; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicCombineExistVO.java deleted file mode 100644 index 4cb919a7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicCombineExistVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * 集群的Connect集群信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Connect集群基本信息") -public class ConnectClusterBasicCombineExistVO extends ConnectClusterBasicVO { - @ApiModelProperty(value="是否存在", example = "true") - protected Boolean exist; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicVO.java deleted file mode 100644 index 53bdc0ed..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectClusterBasicVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * 集群的Connect集群信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Connect集群基本信息") -public class ConnectClusterBasicVO extends BaseVO { - @ApiModelProperty(value = "Connect集群ID", example = "1") - private Long id; - - @ApiModelProperty(value = "Connect集群名称", example = "know-streaming") - private String name; - - @ApiModelProperty(value = "Connect集群使用的Group", example = "know-streaming") - private String groupName; - - @ApiModelProperty(value = "Connect集群URL", example = "http://127.0.0.1:8080") - private String clusterUrl; - - @ApiModelProperty(value = "Connect集群获取到的URL", example = "http://127.0.0.1:8080") - private String memberLeaderUrl; - - @ApiModelProperty(value = "Connect集群版本", example = "2.5.1") - private String version; - - @ApiModelProperty(value = "JMX配置", example = "") - private String jmxProperties; - - /** - * 集群使用的消费组状态,也表示集群状态 - * @see com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum - */ - @ApiModelProperty(value = "状态,2表示Dead,只有Dead才可以删除", example = "") - private Integer state; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectStateVO.java deleted file mode 100644 index e94b0b28..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connect/ConnectStateVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群Connectors状态信息 - * @author zengqiao - * @date 22/10/17 - */ -@Data -@ApiModel(description = "集群Connects状态信息") -public class ConnectStateVO extends BaseVO { - @ApiModelProperty(value = "健康检查状态", example = "1") - private Integer healthState; - - @ApiModelProperty(value = "健康检查通过数", example = "1") - private Integer healthCheckPassed; - - @ApiModelProperty(value = "健康检查总数", example = "1") - private Integer healthCheckTotal; - - @ApiModelProperty(value = "connect集群数", example = "1") - private Integer connectClusterCount; - - @ApiModelProperty(value = "worker数", example = "1") - private Integer workerCount; - - @ApiModelProperty(value = "总Connector数", example = "1") - private Integer totalConnectorCount; - - @ApiModelProperty(value = "存活Connector数", example = "1") - private Integer aliveConnectorCount; - - @ApiModelProperty(value = "总Task数", example = "1") - private Integer totalTaskCount; - - @ApiModelProperty(value = "存活Task数", example = "1") - private Integer aliveTaskCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterConnectorOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterConnectorOverviewVO.java deleted file mode 100644 index 8533eec1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterConnectorOverviewVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 集群Connector信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Connector概览信息") -public class ClusterConnectorOverviewVO extends ConnectorBasicVO { - @ApiModelProperty(value = "Connector插件名称", example = "know-streaming") - private String connectorClassName; - - @ApiModelProperty(value = "Connector类型", example = "source") - private String connectorType; - - /** - * @see org.apache.kafka.connect.runtime.AbstractStatus.State - */ - @ApiModelProperty(value = "状态", example = "RUNNING") - private String state; - - @ApiModelProperty(value = "Task数", example = "100") - private Integer taskCount; - - @ApiModelProperty(value = "访问的Topic列表", example = "") - private List topicNameList; - - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "多个指标的历史曲线值,包括LogSize/BytesIn等") - private List metricLines; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterWorkerOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterWorkerOverviewVO.java deleted file mode 100644 index c14eb4e2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ClusterWorkerOverviewVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * 集群Worker信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Worker概览信息") -public class ClusterWorkerOverviewVO extends BaseVO { - @ApiModelProperty(value = "Connect集群ID", example = "1") - private Long connectClusterId; - - @ApiModelProperty(value = "Connect集群名称", example = "know-streaming") - private String connectClusterName; - - @ApiModelProperty(value = "worker主机", example = "know-streaming") - private String workerHost; - - @ApiModelProperty(value = "Connector数", example = "10") - private Integer connectorCount; - - @ApiModelProperty(value = "Task数", example = "10") - private Integer taskCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicCombineExistVO.java deleted file mode 100644 index 0bf6042f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicCombineExistVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * 集群Connector信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Connector基本信息") -public class ConnectorBasicCombineExistVO extends ConnectorBasicVO { - @ApiModelProperty(value="是否存在", example = "true") - protected Boolean exist; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicVO.java deleted file mode 100644 index 19217668..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/connector/ConnectorBasicVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * 集群Connector信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Connector基本信息") -public class ConnectorBasicVO extends BaseVO { - @ApiModelProperty(value = "Connect集群ID", example = "1") - private Long connectClusterId; - - @ApiModelProperty(value = "Connect集群名称", example = "know-streaming") - private String connectClusterName; - - @ApiModelProperty(value = "Connector名称", example = "know-streaming") - private String connectorName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/ClusterMirrorMakerOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/ClusterMirrorMakerOverviewVO.java deleted file mode 100644 index 27a3bd94..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/ClusterMirrorMakerOverviewVO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 集群MM2信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "MM2概览信息") -public class ClusterMirrorMakerOverviewVO extends MirrorMakerBasicVO { - @ApiModelProperty(value = "源Kafka集群Id", example = "1") - private Long sourceKafkaClusterId; - - @ApiModelProperty(value = "源Kafka集群名称", example = "aaa") - private String sourceKafkaClusterName; - - @ApiModelProperty(value = "目标Kafka集群Id", example = "1") - private Long destKafkaClusterId; - - @ApiModelProperty(value = "目标Kafka集群名称", example = "aaa") - private String destKafkaClusterName; - - /** - * @see org.apache.kafka.connect.runtime.AbstractStatus.State - */ - @ApiModelProperty(value = "状态", example = "RUNNING") - private String state; - - @ApiModelProperty(value = "Task数", example = "100") - private Integer taskCount; - - @ApiModelProperty(value = "心跳检测connector", example = "heartbeatConnector") - private String heartbeatConnector; - - @ApiModelProperty(value = "进度确认connector", example = "checkpointConnector") - private String checkpointConnector; - - - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "多个指标的历史曲线值,包括LogSize/BytesIn等") - private List metricLines; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBaseStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBaseStateVO.java deleted file mode 100644 index 04aed035..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBaseStateVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群MM2状态信息 - * @author fengqiongfeng - * @date 22/12/29 - */ -@Data -@ApiModel(description = "集群MM2状态信息") -public class MirrorMakerBaseStateVO extends BaseVO { - - @ApiModelProperty(value = "worker数", example = "1") - private Integer workerCount; - - @ApiModelProperty(value = "总Task数", example = "1") - private Integer totalTaskCount; - - @ApiModelProperty(value = "存活Task数", example = "1") - private Integer aliveTaskCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBasicVO.java deleted file mode 100644 index 177d76eb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerBasicVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ConnectorBasicVO; -import io.swagger.annotations.ApiModel; -import lombok.Data; - - -/** - * 集群MM2信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "MM2基本信息") -public class MirrorMakerBasicVO extends ConnectorBasicVO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerStateVO.java deleted file mode 100644 index e0a1782d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/mm2/MirrorMakerStateVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群MM2状态信息 - * @author zengqiao - * @date 22/12/12 - */ -@Data -@ApiModel(description = "集群MM2状态信息") -public class MirrorMakerStateVO extends BaseVO { - - @ApiModelProperty(value = "MM2数", example = "1") - private Integer mirrorMakerCount; - - @ApiModelProperty(value = "worker数", example = "1") - private Integer workerCount; - - @ApiModelProperty(value = "总Connector数", example = "1") - private Integer totalConnectorCount; - - @ApiModelProperty(value = "存活Connector数", example = "1") - private Integer aliveConnectorCount; - - @ApiModelProperty(value = "总Task数", example = "1") - private Integer totalTaskCount; - - @ApiModelProperty(value = "存活Task数", example = "1") - private Integer aliveTaskCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterACLsStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterACLsStateVO.java deleted file mode 100644 index f9b2baae..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterACLsStateVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群Topic信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "集群ACL状态信息") -public class ClusterACLsStateVO { - @ApiModelProperty(value = "开启ACL", example = "false") - private Boolean openAcl; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersOverviewVO.java deleted file mode 100644 index b172403c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersOverviewVO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metadata.BrokerMetadataVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 集群Broker信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Broker信息概览") -public class ClusterBrokersOverviewVO extends BrokerMetadataVO { - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "角色", example = "[gc, tc, controller]") - private List kafkaRoleList; - - @ApiModelProperty(value = "启动时间", example = "31324242434") - private Long startTimeUnitMs; - - @ApiModelProperty(value = "rack") - private String rack; - - @ApiModelProperty(value = "jmx端口") - private Integer jmxPort; - - @ApiModelProperty(value = "jmx连接状态 true:连接成功 false:连接失败") - private Boolean jmxConnected; - - @ApiModelProperty(value = "是否存活 true:存活 false:不存活") - private Boolean alive; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersStateVO.java deleted file mode 100644 index afeaf5db..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterBrokersStateVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkacontroller.KafkaControllerVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * 集群Topic信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "集群Broker状态信息") -public class ClusterBrokersStateVO implements Serializable { - @ApiModelProperty(value = "Broker数", example = "100") - private Integer brokerCount; - - @ApiModelProperty(value = "Broker版本信息", example = "[\"2.5.1\", \"3.1.0\"]") - private List brokerVersionList; - - @ApiModelProperty(value = "KafkaController信息") - private KafkaControllerVO kafkaController; - - @ApiModelProperty(value = "KafkaController正常") - private Boolean kafkaControllerAlive; - - @ApiModelProperty(value = "配置一致", example = "true") - private Boolean configSimilar; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterGroupsStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterGroupsStateVO.java deleted file mode 100644 index 6ceb327e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterGroupsStateVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群Groups信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "集群Groups状态信息") -public class ClusterGroupsStateVO extends BaseTimeVO { - @ApiModelProperty(value = "Group数", example = "100") - private Integer groupCount; - - @ApiModelProperty(value = "active数", example = "50") - private Integer activeCount; - - @ApiModelProperty(value = "empty数", example = "20") - private Integer emptyCount; - - @ApiModelProperty(value = "reBalance数", example = "10") - private Integer reBalanceCount; - - @ApiModelProperty(value = "dead数", example = "20") - private Integer deadCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterPhyTopicsOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterPhyTopicsOverviewVO.java deleted file mode 100644 index 10258bf1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterPhyTopicsOverviewVO.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 集群Topic信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Topic信息概览") -public class ClusterPhyTopicsOverviewVO extends BaseTimeVO { - @ApiModelProperty(value = "Topic名称", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value = "说明", example = "测试") - private String description; - - @ApiModelProperty(value = "分区数", example = "3") - private Integer partitionNum; - - @ApiModelProperty(value = "保存时间(ms)", example = "172800000") - private Long retentionTimeUnitMs; - - @ApiModelProperty(value = "副本数", example = "2") - private Integer replicaNum; - - @ApiModelProperty(value = "处于镜像复制中", example = "true") - private Boolean inMirror; - - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "多个指标的历史曲线值,包括LogSize/BytesIn等") - private List metricLines; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterTopicsStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterTopicsStateVO.java deleted file mode 100644 index 75425eb5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ClusterTopicsStateVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 集群Topic信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "集群Topic状态信息") -public class ClusterTopicsStateVO extends BaseTimeVO { - @ApiModelProperty(value = "Topic数", example = "1000") - private Integer topicCount; - - @ApiModelProperty(value = "分区数", example = "50000") - private Integer partitionCount; - - @ApiModelProperty(value = "无Leader分区数", example = "100") - private Integer noLeaderPartitionCount; - - @ApiModelProperty(value = "处于最小Isr的分区数", example = "4000") - private Integer atMinIsrPartitionCount; - - @ApiModelProperty(value = "未处于最小Isr的分区数", example = "323") - private Integer underMinIsrPartitionCount; - - @ApiModelProperty(value = "未同步副本数", example = "234") - private Integer underReplicatedPartitionCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ControllerChangeLogVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ControllerChangeLogVO.java deleted file mode 100644 index 3b72cb29..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/cluster/res/ControllerChangeLogVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res; - -import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "集群ControllerChangeLog信息") -public class ControllerChangeLogVO extends BasePO { - - @ApiModelProperty(value = "改变时间") - private Long changeTime; - - @ApiModelProperty(value = "BrokerId") - private Integer brokerId; - - @ApiModelProperty(value = "rack") - private String rack; - - @ApiModelProperty(value = "主机") - private String host; - - @ApiModelProperty(value = "kafka 集群 id") - private Long clusterPhyId; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaBrokerConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaBrokerConfigVO.java deleted file mode 100644 index 29915d9e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaBrokerConfigVO.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaBrokerConfigVO { - @ApiModelProperty(value = "配置名", example = "retention.ms") - private String name; - - @ApiModelProperty(value = "配置值", example = "1268888") - private String value; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigSource - */ - @ApiModelProperty(value = "配置源", example = "1268888") - private Integer configSource; - - @ApiModelProperty(value = "敏感的配置", example = "false") - private boolean sensitive; - - @ApiModelProperty(value = "只读的配置", example = "false") - private boolean readOnly; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigType - */ - @ApiModelProperty(value = "配置value类型", example = "false") - private Integer configType; - - @ApiModelProperty(value = "配置说明", example = "保存时间") - private String documentation; - - @ApiModelProperty(value = "已覆写配置", example = "false") - private Boolean override; - - @ApiModelProperty(value = "独有配置", example = "false") - private Boolean exclusive; - - @ApiModelProperty(value = "存在差异的配置", example = "false") - private Boolean differentiated; - - @ApiModelProperty(value = "配置值", example = "1268888") - private String defaultValue; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaInZKConfigChangedVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaInZKConfigChangedVO.java deleted file mode 100644 index 2f092ef3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaInZKConfigChangedVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "KafkaInZK配置信息") -public class KafkaInZKConfigChangedVO extends BaseTimeVO { - @ApiModelProperty(value = "配置变更信息", example = "broker-1001配置修改") - private String changedMessage; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicConfigVO.java deleted file mode 100644 index 7dfdcf59..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicConfigVO.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaTopicConfigVO { - @ApiModelProperty(value = "配置名", example = "retention.ms") - private String name; - - @ApiModelProperty(value = "配置值", example = "1268888") - private String value; - - @ApiModelProperty(value = "默认配置值", example = "1268888") - private String defaultValue; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigSource - */ - @ApiModelProperty(value = "配置源", example = "1268888") - private Integer configSource; - - @ApiModelProperty(value = "敏感的配置", example = "false") - private Boolean sensitive; - - @ApiModelProperty(value = "只读的配置", example = "false") - private Boolean readOnly; - - /** - * 配置源 - * @see org.apache.kafka.common.requests.DescribeConfigsResponse.ConfigType - */ - @ApiModelProperty(value = "配置value类型", example = "false") - private Integer configType; - - @ApiModelProperty(value = "配置说明", example = "保存时间") - private String documentation; - - @ApiModelProperty(value = "已覆写配置", example = "false") - private Boolean override; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicDefaultConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicDefaultConfigVO.java deleted file mode 100644 index b237d66a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/kafka/KafkaTopicDefaultConfigVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.kafka; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/28 - */ -@Data -@ApiModel(description = "Kafka配置信息") -public class KafkaTopicDefaultConfigVO { - @ApiModelProperty(value = "配置名", example = "retention.ms") - protected String name; - - @ApiModelProperty(value = "默认配置值", example = "1268888") - protected String defaultValue; - - @ApiModelProperty(value = "只读的配置", example = "false") - protected Boolean readOnly; - - @ApiModelProperty(value = "配置说明", example = "保存时间") - private String documentation; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/metric/UserMetricConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/metric/UserMetricConfigVO.java deleted file mode 100644 index 2b4e76b3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/metric/UserMetricConfigVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.metric; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.version.VersionItemVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "单值指标线,一条线就代表一个指标的多个指标点") -public class UserMetricConfigVO extends VersionItemVO { - @ApiModelProperty(value = "该指标用户是否设置展现", example = "true") - private Boolean set; - - @ApiModelProperty(value = "该指标展示优先级", example = "1") - private Integer rank; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/platform/PlatformClusterConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/platform/PlatformClusterConfigVO.java deleted file mode 100644 index 4c48d640..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/config/platform/PlatformClusterConfigVO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.config.platform; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class PlatformClusterConfigVO extends BaseTimeVO { - /** - * 配置组 - */ - private Long clusterId; - - /** - * 配置组 - */ - private String valueGroup; - - /** - * 配置项的名称 - */ - private String valueName; - - /** - * 配置项的值 - */ - private String value; - - /** - * 备注 - */ - private String description; - - /** - * 操作人 - */ - private String operator; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/connector/ConnectorStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/connector/ConnectorStateVO.java deleted file mode 100644 index 7176efd2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/connector/ConnectorStateVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.connector; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wyb - * @date 2022/11/15 - */ -@Data -public class ConnectorStateVO { - @ApiModelProperty(value = "connect集群ID", example = "1") - private Long connectClusterId; - - @ApiModelProperty(value = "connector名称", example = "input1") - private String name; - - @ApiModelProperty(value = "connector类型", example = "source") - private String type; - - @ApiModelProperty(value = "connector状态", example = "running") - private String state; - - @ApiModelProperty(value = "总Task数", example = "1") - private Integer totalTaskCount; - - @ApiModelProperty(value = "存活Task数", example = "1") - private Integer aliveTaskCount; - - @ApiModelProperty(value = "总Worker数", example = "1") - private Integer totalWorkerCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfoVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfoVO.java deleted file mode 100644 index 172ecdc3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfoVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo; - - -/** - * @see ConfigInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigInfoVO { - private ConnectConfigKeyInfoVO definition; - - private ConnectConfigValueInfoVO value; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfosVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfosVO.java deleted file mode 100644 index 200a32fd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigInfosVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigInfos; - -import java.util.List; - -/** - * @see ConfigInfos - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigInfosVO { - private String name; - - private int errorCount; - - private List groups; - - private List configs; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigKeyInfoVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigKeyInfoVO.java deleted file mode 100644 index 424cb344..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigKeyInfoVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigKeyInfo; - -import java.util.List; - -/** - * @see ConfigKeyInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigKeyInfoVO { - private String name; - - private String type; - - private boolean required; - - private String defaultValue; - - private String importance; - - private String documentation; - - private String group; - - private int orderInGroup; - - private String width; - - private String displayName; - - private List dependents; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigValueInfoVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigValueInfoVO.java deleted file mode 100644 index 6363cca0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectConfigValueInfoVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.kafka.connect.runtime.rest.entities.ConfigValueInfo; - -import java.util.List; - -/** - * @see ConfigValueInfo - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ConnectConfigValueInfoVO { - private String name; - - private String value; - - private List recommendedValues; - - private List errors; - - private boolean visible; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectPluginBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectPluginBasicVO.java deleted file mode 100644 index 1b9c811b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/plugin/ConnectPluginBasicVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/10/17 - */ -@Data -@ApiModel(description = "Connect插件信息") -public class ConnectPluginBasicVO extends BaseVO { - @ApiModelProperty(value = "指标或操作项名称", example = "org.apache.kafka.connect.file.FileStreamSinkConnector") - private String className; - - @ApiModelProperty(value = "类型", example = "source|sink") - private String type; - - @ApiModelProperty(value = "版本", example = "2.5.1") - private String version; - - @ApiModelProperty(value = "帮助文档地址", example = "") - private String helpDocLink; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/task/KCTaskOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/task/KCTaskOverviewVO.java deleted file mode 100644 index c82b0ed4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/connect/task/KCTaskOverviewVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * Task信息概览 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "Task信息概览") -public class KCTaskOverviewVO extends BaseVO { - - @ApiModelProperty(value = "connect集群ID", example = "1") - private Long connectClusterId; - - @ApiModelProperty(value = "taskId", example = "1") - private Integer taskId; - - @ApiModelProperty(value = "worker地址", example = "127.0.0.1:8080") - private String workerId; - - @ApiModelProperty(value = "task状态", example = "RUNNING") - private String state; - - @ApiModelProperty(value = "错误原因", example = "asx") - private String trace; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupOverviewVO.java deleted file mode 100644 index df976643..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupOverviewVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.group; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author wyb - * @date 2022/10/9 - */ -@Data -@ApiModel(value = "Group信息") -public class GroupOverviewVO { - @ApiModelProperty(value = "Group名称", example = "group-know-streaming-test") - private String name; - - @ApiModelProperty(value = "Group状态", example = "Empty") - private String state; - - @ApiModelProperty(value = "group的成员数", example = "12") - private Integer memberCount; - - @ApiModelProperty(value = "Topic列表", example = "[topic1,topic2]") - private List topicNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicBasicVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicBasicVO.java deleted file mode 100644 index 830e0f9d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicBasicVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.group; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "GroupTopic信息") -public class GroupTopicBasicVO { - @ApiModelProperty(value = "Topic名称", example = "know-streaming-test") - protected String topicName; - - @ApiModelProperty(value = "Group名称", example = "group-know-streaming-test") - protected String groupName; - - @ApiModelProperty(value = "Group状态", example = "Empty") - protected String state; - - @ApiModelProperty(value = "member数", example = "12") - protected Integer memberCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicConsumedDetailVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicConsumedDetailVO.java deleted file mode 100644 index 9561d674..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicConsumedDetailVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.group; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "TopicGroup消费详细信息") -public class GroupTopicConsumedDetailVO { - @ApiModelProperty(value = "Topic名称", example = "konw-streaming") - private String topicName; - - @ApiModelProperty(value = "分区Id", example = "200") - private Integer partitionId; - - @ApiModelProperty(value = "memberId", example = "dkm_admin") - private String memberId; - - @ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "member的主机", example = "127.0.0.1") - private String host; - - @ApiModelProperty(value = "member的ClientId", example = "consumer-1") - private String clientId; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicOverviewVO.java deleted file mode 100644 index 40d2f652..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/group/GroupTopicOverviewVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.group; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "GroupTopic信息") -public class GroupTopicOverviewVO extends GroupTopicBasicVO { - @ApiModelProperty(value = "最大Lag", example = "12345678") - private Long maxLag; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/ha/mirror/TopicMirrorInfoVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/ha/mirror/TopicMirrorInfoVO.java deleted file mode 100644 index b1f748c0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/ha/mirror/TopicMirrorInfoVO.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.ha.mirror; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 20/4/29 - */ -@Data -@ApiModel(description="Topic复制信息") -public class TopicMirrorInfoVO { - @ApiModelProperty(value="源集群ID", example = "1") - private Long sourceClusterId; - - @ApiModelProperty(value="源集群名称", example = "know-streaming-1") - private String sourceClusterName; - - @ApiModelProperty(value="目标集群ID", example = "2") - private Long destClusterId; - - @ApiModelProperty(value="目标集群名称", example = "know-streaming-2") - private String destClusterName; - - @ApiModelProperty(value="Topic名称", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value="写入速率(bytes/s)", example = "100") - private Double bytesIn; - - @ApiModelProperty(value="复制速率(bytes/s)", example = "100") - private Double replicationBytesIn; - - @ApiModelProperty(value="延迟消息数", example = "100") - private Long lag; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthCheckConfigVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthCheckConfigVO.java deleted file mode 100644 index cb889444..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthCheckConfigVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.health; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/03/01 - */ -@Data -@ApiModel(description = "健康检查配置") -public class HealthCheckConfigVO { - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum - */ - @ApiModelProperty(value="检查维度Code", example = "1") - private Integer dimensionCode; - - @ApiModelProperty(value="检查维度名称", example = "Broker") - private String dimensionName; - - @ApiModelProperty(value="检查维度前端展示名称", example = "Connector") - private String dimensionDisplayName; - - @ApiModelProperty(value="配置组", example = "HEALTH") - private String configGroup; - - @ApiModelProperty(value="检查名称", example = "Group延迟") - private String configName; - - @ApiModelProperty(value="检查项", example = "Group延迟") - private String configItem; - - @ApiModelProperty(value="检查说明", example = "Group延迟") - private String configDesc; - - @ApiModelProperty(value="检查配置", example = "100") - private String value; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreBaseResultVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreBaseResultVO.java deleted file mode 100644 index 5da85481..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreBaseResultVO.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.health; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/03/01 - */ -@Data -@ApiModel(description = "健康检查结果信息") -public class HealthScoreBaseResultVO extends BaseTimeVO { - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum - */ - @ApiModelProperty(value="检查维度", example = "1") - private Integer dimension; - - @ApiModelProperty(value="检查维度名称", example = "cluster") - private String dimensionName; - - @ApiModelProperty(value="检查维度前端显示名称", example = "cluster") - private String dimensionDisplayName; - - @ApiModelProperty(value="检查名称", example = "Group延迟") - private String configName; - - @ApiModelProperty(value="检查项", example = "Group延迟") - private String configItem; - - @ApiModelProperty(value="检查说明", example = "Group延迟") - private String configDesc; - - @ApiModelProperty(value="结果", example = "true") - private Boolean passed; - - @ApiModelProperty(value="检查配置", example = "") - private HealthCheckConfigVO checkConfig; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreResultDetailVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreResultDetailVO.java deleted file mode 100644 index 580b1e73..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/health/HealthScoreResultDetailVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.health; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/03/01 - */ -@Data -@ApiModel(description = "健康检查结果信息") -public class HealthScoreResultDetailVO extends HealthScoreBaseResultVO { - @ApiModelProperty(value="未通过的资源列表", example = "") - private List notPassedResNameList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobDetailVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobDetailVO.java deleted file mode 100644 index 9bdf4631..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobDetailVO.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -@Data -@ApiModel(description = "job详情") -public class JobDetailVO extends BaseTimeVO { - - @ApiModelProperty(value = "任务id") - private Long id; - - @ApiModelProperty(value = "任务类型") - private Integer jobType; - - @ApiModelProperty(value = "任务名称") - private String jobName; - - @ApiModelProperty(value = "任务状态") - private Integer jobStatus; - - @ApiModelProperty(value = "任务描述") - private String jobDesc; - - @ApiModelProperty(value = "任务计划执行时间") - private Date planTime; - - @ApiModelProperty(value = "任务开始执行时间") - private Date startTime; - - @ApiModelProperty(value = "任务完成执行时间") - private Date endTime; - - @ApiModelProperty(value = "任务限流值") - private Double flowLimit; - - @ApiModelProperty(value = "子任务总数") - private Integer total; - - @ApiModelProperty(value = "子任务成功数") - private Integer success; - - @ApiModelProperty(value = "子任务失败数") - private Integer fail; - - @ApiModelProperty(value = "子任务进行数") - private Integer doing; - - @ApiModelProperty(value = "子任务列表,不同的子任务的实现不一样,需要具体场景具体处理") - private List subJobs; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobModifyDetailVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobModifyDetailVO.java deleted file mode 100644 index ec940f9f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobModifyDetailVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@Data -@ApiModel(description = "job列表") -public class JobModifyDetailVO extends BaseTimeVO { - - @ApiModelProperty(value = "任务id") - private Long id; - - @ApiModelProperty(value = "任务类型") - private Integer jobType; - - @ApiModelProperty(value = "任务状态") - private Integer jobStatus; - - @ApiModelProperty(value = "任务描述") - private String jobDesc; - - @ApiModelProperty(value = "任务数据") - private String jobData; - - @ApiModelProperty(value = "任务计划开始执行时间") - private Date planTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobOverViewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobOverViewVO.java deleted file mode 100644 index 89c818fa..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobOverViewVO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@Data -@ApiModel(description = "job列表") -public class JobOverViewVO extends BaseTimeVO { - - @ApiModelProperty(value = "任务id") - private Long id; - - @ApiModelProperty(value = "任务类型") - private Integer jobType; - - @ApiModelProperty(value = "任务状态") - private Integer jobStatus; - - @ApiModelProperty(value = "任务描述") - private String jobDesc; - - @ApiModelProperty(value = "任务执行对象") - private String target; - - @ApiModelProperty(value = "子任务运行成功数") - private Integer success; - - @ApiModelProperty(value = "子任务运行失败数") - private Integer fail; - - @ApiModelProperty(value = "子任务等待运行数") - private Integer waiting; - - @ApiModelProperty(value = "子任务正在运行数") - private Integer doing; - - @ApiModelProperty(value = "子任务总数") - private Integer total; - - @ApiModelProperty(value = "任务计划执行时间") - private Date planTime; - - @ApiModelProperty(value = "任务开始执行时间") - private Date startTime; - - @ApiModelProperty(value = "任务提交人") - private String creator; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobStateVO.java deleted file mode 100644 index b3212c84..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobStateVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "job 模块状态") -public class JobStateVO extends BaseVO { - - @ApiModelProperty(value = "任务总数") - private Integer jobNu; - - @ApiModelProperty(value = "运行中的任务数") - private Integer runningNu; - - @ApiModelProperty(value = "准备好待运行的任务数") - private Integer waitingNu; - - @ApiModelProperty(value = "运行成功的任务数") - private Integer successNu; - - @ApiModelProperty(value = "运行失败的任务数") - private Integer failedNu; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTrafficBrokerVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTrafficBrokerVO.java deleted file mode 100644 index b83287d2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTrafficBrokerVO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Map; - -@Data -@ApiModel(description = "job流量") -public class JobTrafficBrokerVO extends BaseTimeVO { - @ApiModelProperty(value = "任务id") - private Long id; - - @ApiModelProperty(value = "brokerId") - private Integer brokerId; - - @ApiModelProperty(value = "brokerHost") - private String brokerHost; - - @ApiModelProperty(value = "Job BytesIn,单位byte") - private Double byteInJob; - - @ApiModelProperty(value = "Job BytesOut,单位byte") - private Double byteOutJob; - - @ApiModelProperty(value = "Total BytesIn,单位byte") - private Double byteInTotal; - - @ApiModelProperty(value = "Total BytesOut,单位byte") - private Double byteOutTotal; - - @ApiModelProperty(value = "流入该broker的broker信息") - private Map inBrokers; - - @ApiModelProperty(value = "流出该broker的broker信息") - private Map outBrokers; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTypeVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTypeVO.java deleted file mode 100644 index 3ba85a4f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/JobTypeVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "job类型") -public class JobTypeVO extends BaseTimeVO { - @ApiModelProperty(value = "任务类型") - private Integer type; - - @ApiModelProperty(value = "描述信息") - private String message; - - public JobTypeVO(Integer type, String message) { - this.type = type; - this.message = message; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubBrokerJobVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubBrokerJobVO.java deleted file mode 100644 index 73816e52..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubBrokerJobVO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -public abstract class SubBrokerJobVO extends SubJobVO { - @ApiModelProperty(value = "源BrokerId列表") - protected List sourceBrokers; - - @ApiModelProperty(value = "目标BrokerId列表") - protected List desBrokers; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobClusterBalanceReplicaMoveVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobClusterBalanceReplicaMoveVO.java deleted file mode 100644 index 49c27bdc..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobClusterBalanceReplicaMoveVO.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "Job-集群平衡-子任务详情") -public class SubJobClusterBalanceReplicaMoveVO extends SubBrokerJobVO { - @ApiModelProperty(value = "topic 名称") - private String topicName; - - @ApiModelProperty(value = "分区列表") - private List partitions; - - @ApiModelProperty(value = "当前数据保存时间") - private Long currentTimeSpent; - - @ApiModelProperty(value = "迁移数据时间范围") - private Long moveTimeSpent; - - @ApiModelProperty(value = "状态") - private Integer status; - - @ApiModelProperty(value = "需迁移MessageSize") - private Double totalSize; - - @ApiModelProperty(value = "已完成MessageSize") - private Double movedSize; - - @ApiModelProperty(value = "预计剩余时长") - private Long remainTime; - - @ApiModelProperty(value = "子任务成功数") - private Integer total; - - @ApiModelProperty(value = "子任务成功数") - private Integer success; - - @ApiModelProperty(value = "子任务失败数") - private Integer fail; - - @ApiModelProperty(value = "子任务进行数") - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobPartitionDetailVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobPartitionDetailVO.java deleted file mode 100644 index e7a74886..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobPartitionDetailVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "subJob详情") -public class SubJobPartitionDetailVO extends BaseTimeVO { - - @ApiModelProperty(value = "partitionId") - private Integer partitionId; - - @ApiModelProperty(value = "源BrokerID") - private List sourceBrokerIds; - - @ApiModelProperty(value = "目标BrokerID") - private List desBrokerIds; - - @ApiModelProperty(value = "需迁移MessageSize") - private Double totalSize; - - @ApiModelProperty(value = "已完成MessageSize") - private Double movedSize; - - @ApiModelProperty(value = "任务状态") - private Integer status; - - @ApiModelProperty(value = "预计剩余时长") - private Long remainTime; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaMoveVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaMoveVO.java deleted file mode 100644 index 0b004722..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaMoveVO.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "Job-Topic迁移-子任务详情") -public class SubJobReplicaMoveVO extends SubBrokerJobVO { - @ApiModelProperty(value = "topic 名称") - private String topicName; - - @ApiModelProperty(value = "分区列表") - private List partitions; - - @ApiModelProperty(value = "当前数据保存时间") - private Long currentTimeSpent; - - @ApiModelProperty(value = "迁移数据时间范围") - private Long moveTimeSpent; - - @ApiModelProperty(value = "状态") - private Integer status; - - @ApiModelProperty(value = "需迁移MessageSize") - private Double totalSize; - - @ApiModelProperty(value = "已完成MessageSize") - private Double movedSize; - - @ApiModelProperty(value = "预计剩余时长") - private Long remainTime; - - @ApiModelProperty(value = "子任务成功数") - private Integer total; - - @ApiModelProperty(value = "子任务成功数") - private Integer success; - - @ApiModelProperty(value = "子任务失败数") - private Integer fail; - - @ApiModelProperty(value = "子任务进行数") - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaScalaVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaScalaVO.java deleted file mode 100644 index 63a1103a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobReplicaScalaVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "Job-Topic扩缩副本-子任务详情") -public class SubJobReplicaScalaVO extends SubBrokerJobVO { - @ApiModelProperty(value = "Topic名称") - private String topicName; - - @ApiModelProperty(value = "原副本数") - private Integer oldReplicaNu; - - @ApiModelProperty(value = "新副本数") - private Integer newReplicaNu; - - @ApiModelProperty(value = "状态") - private Integer status; - - @ApiModelProperty(value = "需迁移MessageSize") - private Double totalSize; - - @ApiModelProperty(value = "已完成MessageSize") - private Double movedSize; - - @ApiModelProperty(value = "预计剩余时长") - private Long remainTime; - - @ApiModelProperty(value = "子任务成功数") - private Integer total; - - @ApiModelProperty(value = "子任务成功数") - private Integer success; - - @ApiModelProperty(value = "子任务失败数") - private Integer fail; - - @ApiModelProperty(value = "子任务进行数") - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobVO.java deleted file mode 100644 index d2c08ec6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/job/sub/SubJobVO.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub; - -import io.swagger.annotations.ApiModel; - -@ApiModel(description = "Job-子任务详情") -public abstract class SubJobVO { -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkacontroller/KafkaControllerVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkacontroller/KafkaControllerVO.java deleted file mode 100644 index 275d338f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkacontroller/KafkaControllerVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.kafkacontroller; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * @author zengqiao - * @date 2022/02/24 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(value = "KafkaController信息") -public class KafkaControllerVO implements Serializable { - @ApiModelProperty(value = "节点ID", example = "1") - private Integer brokerId; - - @ApiModelProperty(value = "节点地址", example = "127.0.0.1") - private String brokerHost; - - @ApiModelProperty(value = "节点地址", example = "WXH") - private String brokerRack; - - @ApiModelProperty(value = "变更时间", example = "1234567890123") - private Long timestamp; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserTokenVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserTokenVO.java deleted file mode 100644 index 76d3004f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserTokenVO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -public class KafkaUserTokenVO extends KafkaUserVO { - @ApiModelProperty(value = "密钥", example = "1235") - protected String token; - - @ApiModelProperty(value = "是否解密", example = "true") - private Boolean decrypt; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserVO.java deleted file mode 100644 index b4d404dd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/kafkauser/KafkaUserVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -public class KafkaUserVO extends BaseTimeVO { - @ApiModelProperty(value = "集群Id", example = "3") - protected Long clusterId; - - @ApiModelProperty(value = "KafkaUser名称", example = "know") - protected String name; - - @ApiModelProperty(value = "认证方式", example = "1300") - protected Integer authType; - - @ApiModelProperty(value = "认证方式", example = "scram") - protected String authName; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/log/LogDirVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/log/LogDirVO.java deleted file mode 100644 index 951b7c23..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/log/LogDirVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.log; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * LogDir信息 - * @author zengqiao - * @date 22/02/23 - */ -@Data -@ApiModel(description = "LogDir信息") -public class LogDirVO { - @ApiModelProperty(value = "目录", example = "/root/data/apache-kafka") - private String dir; - - @ApiModelProperty(value = "Topic名", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value = "分区ID", example = "10") - private Integer partitionId; - - @ApiModelProperty(value = "副本offsetLag", example = "1000") - private Long offsetLag; - - @ApiModelProperty(value = "log的大小", example = "100000") - private Long logSizeUnitB; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataCombineExistVO.java deleted file mode 100644 index a7eab208..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataCombineExistVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metadata; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author zengqiao - * @date 20/4/29 - */ -@Data -@NoArgsConstructor -@ApiModel(description="Broker是否存在及元信息") -public class BrokerMetadataCombineExistVO extends BrokerMetadataVO { - @ApiModelProperty(value="是否存在,true:是 , false:否") - private Boolean exist; - - @ApiModelProperty(value="是否存活,true:是 , false:否") - private Boolean alive; - - public BrokerMetadataCombineExistVO(Integer brokerId, String host, Boolean exist, Boolean alive) { - super(brokerId, host); - this.exist = exist; - this.alive = alive; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataVO.java deleted file mode 100644 index b5c193a2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/BrokerMetadataVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metadata; - -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author zengqiao - * @date 19/7/12 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class BrokerMetadataVO { - @ApiModelProperty(value="id") - private Integer brokerId; - - @ApiModelProperty(value="主机") - private String host; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/GroupMetadataCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/GroupMetadataCombineExistVO.java deleted file mode 100644 index dd40951b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/GroupMetadataCombineExistVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metadata; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author zengqiao - * @date 20/4/29 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description="Group元信息带是否存在") -public class GroupMetadataCombineExistVO { - @ApiModelProperty(value="物理集群ID", example = "6") - private Long clusterPhyId; - - @ApiModelProperty(value="Group名称", example = "g-know-streaming") - private String groupName; - - @ApiModelProperty(value="Topic名称", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value="是否存在,true:是 , false:否") - private Boolean exist; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataCombineExistVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataCombineExistVO.java deleted file mode 100644 index 28f44771..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataCombineExistVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metadata; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 20/4/29 - */ -@Data -@ApiModel(description="Topic是否存在及元信息") -public class TopicMetadataCombineExistVO extends TopicMetadataVO { - @ApiModelProperty(value="是否存在,true:是 , false:否") - private Boolean exist; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataVO.java deleted file mode 100644 index 1cfd405d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metadata/TopicMetadataVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metadata; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 20/4/29 - */ -@Data -@ApiModel(description="Topic元信息") -public class TopicMetadataVO { - @ApiModelProperty(value="Topic名称", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value="Topic分区列表", example = "[1, 2, 3]") - private List partitionIdList; - - @ApiModelProperty(value="Topic分区数", example = "10") - private Integer partitionNum; - - @ApiModelProperty(value="副本数", example = "2") - private Integer replicaNum; - - /** - * @see com.xiaojukeji.know.streaming.km.common.enums.topic.TopicTypeEnum - */ - @ApiModelProperty(value="Topic类型,1是Kafka内部的Topic", example = "0") - private Integer type; -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricLineVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricLineVO.java deleted file mode 100644 index 3ae92847..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricLineVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.point.MetricPointVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "单值指标线,一条线就代表一个指标的多个指标点") -public class MetricLineVO implements Serializable { - @ApiModelProperty(value = "指标对象名称:brokerId、topicName") - private String name; - - @ApiModelProperty(value = "指标名称") - private String metricName; - - @ApiModelProperty(value = "指标点集合") - private List metricPoints; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiLinesVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiLinesVO.java deleted file mode 100644 index 917769d2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiLinesVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "多条指标线,由多个指标的指标线构成") -public class MetricMultiLinesVO { - - @ApiModelProperty(value = "指标名称") - private String metricName; - - @ApiModelProperty(value = "指标名称对应的指标线") - private List metricLines; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiValuePointVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiValuePointVO.java deleted file mode 100644 index 99ab80b2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/line/MetricMultiValuePointVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseTimeVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Map; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "多值指标点,一个点只代表多个指标的多个值") -public class MetricMultiValuePointVO extends BaseTimeVO implements Comparable{ - - @ApiModelProperty(value = "指标时间,毫秒时间戳", example = "13459484543") - private Long timeStamp; - - @ApiModelProperty(value = "多指标多个值的map组合", example = "") - private Map values; - - @ApiModelProperty(value = "指标值聚合方式:avg、max、min、sum") - private String aggType; - - @Override - public int compareTo(MetricMultiValuePointVO o) { - if(null == o){return 0;} - - return this.getTimeStamp().intValue() - o.getTimeStamp().intValue(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/point/MetricPointVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/point/MetricPointVO.java deleted file mode 100644 index 72b5b31e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/metrics/point/MetricPointVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.point; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author didi - */ -@Data -@NoArgsConstructor -@ApiModel(description = "指标点") -public class MetricPointVO implements Comparable { - @ApiModelProperty(value = "指标名", example = "HealthScore") - private String name; - - @ApiModelProperty(value = "指标时间,毫秒时间戳", example = "13459484543") - private Long timeStamp; - - @ApiModelProperty(value = "指标值", example = "12.345") - private String value; - - @ApiModelProperty(value = "指标值聚合方式:avg、max、min、sum") - private String aggType; - - public MetricPointVO(String name, Long timeStamp, String value, String aggType) { - this.name = name; - this.timeStamp = timeStamp; - this.value = value; - this.aggType = aggType; - } - - @Override - public int compareTo(MetricPointVO o) { - if(null == o){return 0;} - if(null == this.getTimeStamp() - || null == o.getTimeStamp()){ - return 0; - } - - return this.getTimeStamp().intValue() - o.getTimeStamp().intValue(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/ReassignTopicOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/ReassignTopicOverviewVO.java deleted file mode 100644 index ef7908a1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/ReassignTopicOverviewVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.metadata.TopicMetadataVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.point.MetricPointVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@ApiModel(description = "迁移计划") -public class ReassignTopicOverviewVO extends TopicMetadataVO { - @ApiModelProperty(value="Topic数据保存时间", example = "10") - private Long retentionMs; - - @ApiModelProperty(value="近N天的avg的BytesIn") - private List latestDaysAvgBytesInList; - - @ApiModelProperty(value="近N天的max的BytesIn") - private List latestDaysMaxBytesInList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobOverviewVO.java deleted file mode 100644 index 7d63b336..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobOverviewVO.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.job; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "迁移任务Job信息") -public class RawReassignJobOverviewVO { - @ApiModelProperty(value="JobId") - private Long rawReassignJobId; - - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="所有分区列表") - private List allPartitionIdList; - - @ApiModelProperty(value="已迁移完成的分区列表") - private List finishedPartitionIdList; - - @ApiModelProperty(value="当前BrokerId列表") - private List currentBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; - - @ApiModelProperty(value="Topic当前数据保存时间", example = "10") - private Long presentRetentionMs; - - @ApiModelProperty(value="Topic迁移时数据保存时间", example = "10") - private Long reassignRetentionMs; - - @ApiModelProperty(value="需迁移LogSize", example = "100000") - private Long reassignLogSizeUnitB; - - @ApiModelProperty(value="已迁移LogSize", example = "100000") - private Long finishedLogSizeUnitB; - - @ApiModelProperty(value="任务状态", example = "10") - private Integer status; - - @ApiModelProperty(value="预计剩余时长", example = "10") - private Long remainTimeUnitSec; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobStatVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobStatVO.java deleted file mode 100644 index b8ad803c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobStatVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.job; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "迁移任务stat信息") -public class RawReassignJobStatVO { - @ApiModelProperty(value="总数", example = "10") - private Integer totalSize; - - @ApiModelProperty(value="成功", example = "10") - private Integer success; - - @ApiModelProperty(value="失败", example = "10") - private Integer failed; - - @ApiModelProperty(value="运行中", example = "10") - private Integer doing; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobTaskOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobTaskOverviewVO.java deleted file mode 100644 index 90f14e02..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/job/RawReassignJobTaskOverviewVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.job; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel(description = "迁移任务JobTask信息") -public class RawReassignJobTaskOverviewVO { - @ApiModelProperty(value="JobId") - private Long rawReassignJobId; - - @ApiModelProperty(value="TaskId") - private Long rawReassignTaskId; - - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="分区Id") - private Integer partitionId; - - @ApiModelProperty(value="当前BrokerId列表") - private List currentBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; - - @ApiModelProperty(value="需迁移LogSize", example = "100000") - private Long reassignLogSizeUnitB; - - @ApiModelProperty(value="已迁移LogSize", example = "100000") - private Long finishedLogSizeUnitB; - - @ApiModelProperty(value="任务状态", example = "10") - private Integer status; - - @ApiModelProperty(value="预计剩余时长", example = "10") - private Long remainTimeUnitSec; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPartitionPlanVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPartitionPlanVO.java deleted file mode 100644 index 1f5b31e9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPartitionPlanVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@ApiModel(description = "迁移计划") -public class ReassignPartitionPlanVO { - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="分区ID") - private Integer partitionId; - - @ApiModelProperty(value="当前BrokerId列表") - private List currentBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPlanVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPlanVO.java deleted file mode 100644 index c0fa1da4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignPlanVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@ApiModel(description = "迁移计划") -public class ReassignPlanVO { - @ApiModelProperty(value="迁移计划列表") - private List topicPlanList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignTopicPlanVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignTopicPlanVO.java deleted file mode 100644 index 590f0d98..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/reassign/plan/ReassignTopicPlanVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/05/06 - */ -@Data -@ApiModel(description = "迁移计划") -public class ReassignTopicPlanVO { - @ApiModelProperty(value="集群ID") - private Long clusterId; - - @ApiModelProperty(value="Topic名称") - private String topicName; - - @ApiModelProperty(value="当前BrokerId列表") - private List currentBrokerIdList; - - @ApiModelProperty(value="迁移BrokerId列表") - private List reassignBrokerIdList; - - @ApiModelProperty(value="迁移计划列表") - private List partitionPlanList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/self/SelfMetricsVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/self/SelfMetricsVO.java deleted file mode 100644 index f4a26680..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/self/SelfMetricsVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.self; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -public class SelfMetricsVO extends BaseVO { - @ApiModelProperty(value = "KS-KM的IP", example = "127.0.0.1") - private String ksIp; - - @ApiModelProperty(value = "KS-KM的唯一Key", example = "know-streaming") - private String ksClusterKey; - - @ApiModelProperty(value = "KS用户数", example = "100") - private Integer ksUserCount; - - @ApiModelProperty(value = "KS服务端地址", example = "[123, 456, 789]") - private List ksServerIps; - - @ApiModelProperty(value = "纳管Kafka集群数", example = "10") - private Integer kafkaClusterCount; - - @ApiModelProperty(value = "纳管Kafka节点数", example = "100") - private Integer kafkaBrokerCount; -} - diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicBrokersPartitionsSummaryVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicBrokersPartitionsSummaryVO.java deleted file mode 100644 index c1ef0ceb..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicBrokersPartitionsSummaryVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "Topic-BrokersPartitions概要信息") -public class TopicBrokersPartitionsSummaryVO { - @ApiModelProperty(value = "总Broker数", example = "5") - private Integer brokerCount; - - @ApiModelProperty(value = "存活Broker数", example = "4") - private Integer liveBrokerCount; - - @ApiModelProperty(value = "挂掉Broker数", example = "1") - private Integer deadBrokerCount; - - @ApiModelProperty(value = "总Partition数", example = "5") - private Integer partitionCount; - - @ApiModelProperty(value = "无Leader的Partition数", example = "5") - private Integer noLeaderPartitionCount; - - @ApiModelProperty(value = "未同步的Partition数", example = "5") - private Integer underReplicatedPartitionCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicRecordVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicRecordVO.java deleted file mode 100644 index 520e2c49..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicRecordVO.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.record.RecordHeaderKS; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "TopicRecord信息") -public class TopicRecordVO { - @ApiModelProperty(value = "Topic名称", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value = "分区ID", example = "6") - private Integer partitionId; - - @ApiModelProperty(value = "记录的offset", example = "534234232234") - private Long offset; - - @ApiModelProperty(value = "记录的时间", example = "1645603045040") - private Long timestampUnitMs; - - @ApiModelProperty(value = "记录的headers") - private List headerList; - - @ApiModelProperty(value = "记录Key", example = "测试Key") - private String key; - - @ApiModelProperty(value = "记录值", example = "测试Value测试Value测试Value测试Value") - private String value; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicStateVO.java deleted file mode 100644 index 29f9aea9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/TopicStateVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "Topic状态信息") -public class TopicStateVO { - @ApiModelProperty(value = "分区数", example = "100") - private Integer partitionCount; - - @ApiModelProperty(value = "所有分区都有Leader", example = "true") - private Boolean allPartitionHaveLeader; - - @ApiModelProperty(value = "副本数", example = "3") - private Integer replicaFactor; - - @ApiModelProperty(value = "所有副本在Isr中", example = "false") - private Boolean allReplicaInSync; - - @ApiModelProperty(value = "最小InIsr数", example = "1") - private Integer minimumIsr; - - @ApiModelProperty(value = "所有分区满足最小InIsr要求", example = "false") - private Boolean allPartitionMatchAtMinIsr; - - @ApiModelProperty(value = "已compact", example = "false") - private Boolean compacted; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerAllVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerAllVO.java deleted file mode 100644 index d456a61d..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerAllVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic.broker; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "Topic所有的Broker信息") -public class TopicBrokerAllVO { - @ApiModelProperty(value = "总Broker数", example = "5") - private Integer total; - - @ApiModelProperty(value = "存活Broker数", example = "4") - private Integer live; - - @ApiModelProperty(value = "挂掉Broker数", example = "1") - private Integer dead; - - @ApiModelProperty(value = "总Partition数", example = "5") - private Integer partitionCount; - - @ApiModelProperty(value = "noLeader分区Id列表", example = "[1, 2, 3]") - private List noLeaderPartitionIdList; - - @ApiModelProperty(value = "未同步分区Id列表", example = "[1, 2, 3, 4]") - private List underReplicatedPartitionIdList; - - @ApiModelProperty(value = "Broker的Partition状态信息") - private List brokerPartitionStateList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerSingleVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerSingleVO.java deleted file mode 100644 index e5bc0e37..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/broker/TopicBrokerSingleVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic.broker; - -import com.xiaojukeji.know.streaming.km.common.bean.vo.broker.BrokerReplicaSummaryVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "TopicBroker状态信息") -public class TopicBrokerSingleVO { - @ApiModelProperty(value = "brokerId", example = "1") - private Integer brokerId; - - @ApiModelProperty(value = "主机名", example = "2") - private String host; - - @ApiModelProperty(value = "是否存活, true:是 false:否", example = "true") - private Boolean alive; - - @ApiModelProperty(value = "每秒流入流量(B/s)", example = "13242424.32423") - private Float bytesInOneMinuteRate; - - @ApiModelProperty(value = "每秒流出流量(B/s)", example = "313242424.32423") - private Float bytesOutOneMinuteRate; - - @ApiModelProperty(value = "Broker副本信息") - private List replicaList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/partition/TopicPartitionVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/partition/TopicPartitionVO.java deleted file mode 100644 index 7405fcdd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/topic/partition/TopicPartitionVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/22 - */ -@Data -@ApiModel(value = "TopicPartition信息") -public class TopicPartitionVO { - @ApiModelProperty(value = "Topic名字", example = "know-streaming") - private String topicName; - - @ApiModelProperty(value = "分区ID", example = "1") - private Integer partitionId; - - @ApiModelProperty(value = "近期指标") - private BaseMetrics latestMetrics; - - @ApiModelProperty(value = "leaderBrokerId", example = "12") - private Integer leaderBrokerId; - - @ApiModelProperty(value = "AR", example = "[1, 2, 3]") - private List assignReplicas; - - @ApiModelProperty(value = "ISR", example = "[1, 2, 3]") - private List inSyncReplicas; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaBSValidateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaBSValidateVO.java deleted file mode 100644 index 059d6698..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaBSValidateVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.util; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "Kafka-BS检查结果") -public class KafkaBSValidateVO extends KafkaZKValidateVO { - @ApiModelProperty(value = "ZK地址", example = "127.0.0.1:2181") - private String zookeeper; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaZKValidateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaZKValidateVO.java deleted file mode 100644 index 0cdb9ed0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/util/KafkaZKValidateVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.util; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zengqiao - * @date 22/02/24 - */ -@Data -@ApiModel(description = "Kafka-ZK检查结果") -public class KafkaZKValidateVO { - @ApiModelProperty(value = "jmx端口", example = "8099") - private Integer jmxPort; - - @ApiModelProperty(value = "集群版本", example = "2.5.1") - private String kafkaVersion; - - @ApiModelProperty(value = "错误信息") - private List> errList; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/KmVersionVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/KmVersionVO.java deleted file mode 100644 index 13b20bab..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/KmVersionVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.version; - -import io.swagger.annotations.ApiModel; -import lombok.Data; - -/** - * @author zengqiao - * @date 22/03/04 - */ -@Data -@ApiModel(description = "Km版本信息") -public class KmVersionVO { - private String kmVersion; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/VersionItemVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/VersionItemVO.java deleted file mode 100644 index 4e6a1b66..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/version/VersionItemVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.version; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(description = "Km版本信息") -public class VersionItemVO { - @ApiModelProperty(value = "指标或操作项分类", example = "901") - private int type; - - @ApiModelProperty(value = "指标或操作项名称", example = "BytesIn") - private String name; - - @ApiModelProperty(value = "指标的单位,非指标的没有", example = "GB/s") - private String unit; - - @ApiModelProperty(value = "指标的类别", example = "GB/s") - private String category; - - @ApiModelProperty(value = "指标的描述", example = "直接流入量") - private String desc; - - @ApiModelProperty(value = "当前kafka版本是否支持", example = "true") - private Boolean support; - - @ApiModelProperty(value = "当前指标支持的最小版本,归一化之后的版本号,包含", example = "0") - private Long minVersion; - - @ApiModelProperty(value = "当前指标支持的最大版本,归一化之后的版本号,不包含,所以该指标支持的版本区间是[minVersion, maxVersion),左闭右开", example = "111111") - private Long maxVersion; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersOverviewVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersOverviewVO.java deleted file mode 100644 index 477b3bf4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersOverviewVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wyc - * @date 2022/9/23 - */ -@Data -@ApiModel(description = "Zookeeper信息概览") -public class ClusterZookeepersOverviewVO { - @ApiModelProperty(value = "主机ip", example = "121.0.0.1") - private String host; - - @ApiModelProperty(value = "主机存活状态,1:Live,0:Down", example = "1") - private Integer status; - - @ApiModelProperty(value = "端口号", example = "2416") - private Integer port; - - @ApiModelProperty(value = "版本", example = "1.1.2") - private String version; - - @ApiModelProperty(value = "角色", example = "Leader") - private String role; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersStateVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersStateVO.java deleted file mode 100644 index ceb2041f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ClusterZookeepersStateVO.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - - -/** - * @author wyc - * @date 2022/9/23 - */ -@Data -@ApiModel(description = "ZK状态信息") -public class ClusterZookeepersStateVO { - @ApiModelProperty(value = "健康检查状态", example = "1") - private Integer healthState; - - @ApiModelProperty(value = "健康检查通过数", example = "1") - private Integer healthCheckPassed; - - @ApiModelProperty(value = "健康检查总数", example = "1") - private Integer healthCheckTotal; - - @ApiModelProperty(value = "ZK的Leader机器", example = "127.0.0.1") - private String leaderNode; - - @ApiModelProperty(value = "Watch数", example = "123456") - private Integer watchCount; - - @ApiModelProperty(value = "节点存活数", example = "8") - private Integer aliveServerCount; - - @ApiModelProperty(value = "总节点数", example = "10") - private Integer totalServerCount; - - @ApiModelProperty(value = "Follower角色存活数", example = "8") - private Integer aliveFollowerCount; - - @ApiModelProperty(value = "Follower角色总数", example = "10") - private Integer totalFollowerCount; - - @ApiModelProperty(value = "Observer角色存活数", example = "3") - private Integer aliveObserverCount; - - @ApiModelProperty(value = "Observer角色总数", example = "3") - private Integer totalObserverCount; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeStatVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeStatVO.java deleted file mode 100644 index c5cd0aa9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeStatVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wyc - * @date 2022/9/23 - */ -@Data -public class ZnodeStatVO { - @ApiModelProperty(value = "节点被创建时的事物的ID", example = "0x1f09") - private Long czxid; - - @ApiModelProperty(value = "创建时间", example = "Sat Mar 16 15:38:34 CST 2019") - private Long ctime; - - @ApiModelProperty(value = "节点最后一次被修改时的事物的ID", example = "0x1f09") - private Long mzxid; - - @ApiModelProperty(value = "最后一次修改时间", example = "Sat Mar 16 15:38:34 CST 2019") - private Long mtime; - - @ApiModelProperty(value = "子节点列表最近一次呗修改的事物ID", example = "0x31") - private Long pzxid; - - @ApiModelProperty(value = "子节点版本号", example = "0") - private Integer cversion; - - @ApiModelProperty(value = "数据版本号", example = "0") - private Integer version; - - @ApiModelProperty(value = "ACL版本号", example = "0") - private Integer aversion; - - @ApiModelProperty(value = "创建临时节点的事物ID,持久节点事物为0", example = "0") - private Long ephemeralOwner; - - @ApiModelProperty(value = "数据长度,每个节点都可保存数据", example = "22") - private Integer dataLength; - - @ApiModelProperty(value = "子节点的个数", example = "6") - private Integer numChildren; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeVO.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeVO.java deleted file mode 100644 index ebc1a0f2..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/bean/vo/zookeeper/ZnodeVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.bean.vo.zookeeper; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wyc - * @date 2022/9/23 - */ -@Data -public class ZnodeVO { - - @ApiModelProperty(value = "节点名称", example = "broker") - private String name; - - @ApiModelProperty(value = "节点数据", example = "saassad") - private String data; - - @ApiModelProperty(value = "节点属性", example = "") - private ZnodeStatVO stat; - - @ApiModelProperty(value = "节点路径", example = "/cluster") - private String namespace; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseExtendFactory.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseExtendFactory.java deleted file mode 100644 index 0da610d3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseExtendFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.component; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.exception.NotFindSubclassException; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeansException; - -import java.util.Map; - -/** - * 从SpringContent中获取指定接口的类的实例 - * 使用例子参考 HandleFactory - * - * @author linyunan - * @date 2021-04-25 - */ -public abstract class BaseExtendFactory { - - private static final ILog LOGGER = LogFactory.getLog(BaseExtendFactory.class); - - public T getByClassNamePer(String classNamePre, Class clazz) { - T handler = null; - try { - handler = doGet(classNamePre, clazz); - } catch (NotFindSubclassException e) { - LOGGER.error("method=getByClassNamePer||handleNamePre={}||msg={}", classNamePre, - e.getMessage()); - } - - return handler; - } - - private T doGet(String classNamePre, Class clazz) { - Map beans = null; - try { - beans = SpringTool.getBeansOfType(clazz); - } catch (BeansException e) { - LOGGER.error("method=findFromSpringContext||handleNamePre={}||msg={}", - classNamePre, e.getMessage()); - } - - if (beans == null || beans.isEmpty()) { - throw new NotFindSubclassException( String.format("找不到【%s】的具体处理器【%s】", clazz.getSimpleName(), classNamePre)); - } - - for (Map.Entry bean : beans.entrySet()) { - if (StringUtils.startsWith(bean.getKey(), classNamePre)) { - return bean.getValue(); - } - } - - throw new NotFindSubclassException( String.format("找不到【%s】的具体处理器【%s】", clazz.getSimpleName(), classNamePre)); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseHandle.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseHandle.java deleted file mode 100644 index 50bc5466..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/BaseHandle.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.component; - -/** - * 基础handle标识, 搭配 BaseExtendFactory 使用 - * - * @author linyunan - * @date 2021-04-25 - */ -public interface BaseHandle { - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/HandleFactory.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/HandleFactory.java deleted file mode 100644 index 3277e493..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/HandleFactory.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.component; - -import com.google.common.collect.Maps; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author linyunan - * @date 2021-04-26 - */ -@Component -public class HandleFactory extends BaseExtendFactory { - - private Map baseHandleMap = Maps.newConcurrentMap(); - - /** - * 根据类名前缀获取接口BaseHandle的实现类实例 - * 注意: handleNamePre 需要保证全局唯一 - */ - public BaseHandle getByHandlerNamePer(String handleNamePre) { - if (baseHandleMap.containsKey(handleNamePre)) { - return baseHandleMap.get(handleNamePre); - } else { - BaseHandle baseHandle = getByClassNamePer(handleNamePre, BaseHandle.class); - baseHandleMap.put(handleNamePre, baseHandle); - return baseHandle; - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTemplateConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTemplateConfig.java deleted file mode 100644 index 332b6776..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTemplateConfig.java +++ /dev/null @@ -1,206 +0,0 @@ -/** - * @Author yunan - * @Date 2017/9/27 18:24 - */ -package com.xiaojukeji.know.streaming.km.common.component; - -import com.alibaba.fastjson.JSON; -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.didiglobal.logi.log.common.Constants; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.exception.ThirdPartRemoteException; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpRequest; -import org.springframework.http.client.*; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; - -/** - * @author jinbinbin - * @version $Id: RestTemplateConfig.java, v 0.1 2018年09月27日 17:45 jinbinbin Exp $ - */ -@Configuration -public class RestTemplateConfig { - - private static final ILog REQ_LOGGER = LogFactory.getLog("thirdReqLogger"); - private static final ILog RESP_LOGGER = LogFactory.getLog("thirdRespLogger"); - private static final ILog SYSTEM_LOGGER = LogFactory.getLog(RestTemplateConfig.class); - - @Bean - public RestTemplate restTemplate() { - SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory(); - // 2分钟超时 - simpleClientHttpRequestFactory.setConnectTimeout(2 * 60 * 1000); - simpleClientHttpRequestFactory.setReadTimeout(60 * 1000); - - RestTemplate restTemplate = new RestTemplate( - new BufferingClientHttpRequestFactory(simpleClientHttpRequestFactory)); - - // 增加自定义的拦截器 - List interceptors = new ArrayList<>(); - interceptors.add(new LogHttpRequestInterceptor()); - restTemplate.setInterceptors(interceptors); - - // 设置字符编码 - List> converters = restTemplate.getMessageConverters(); - for (HttpMessageConverter converter : converters) { - if (converter instanceof StringHttpMessageConverter) { - StringHttpMessageConverter stringConverter = (StringHttpMessageConverter) converter; - stringConverter.setWriteAcceptCharset(false); - stringConverter.setDefaultCharset( StandardCharsets.UTF_8); - } - } - - return restTemplate; - } - - private class LogHttpRequestInterceptor implements ClientHttpRequestInterceptor { - - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) { - ClientHttpResponse response = null; - String subFlag = LogFactory.getUniqueFlag(); - Long beginNano = System.nanoTime(); - try { - - //打印请求出口日志 - traceRequest(request, subFlag, body); - - request.getHeaders().add(Constants.FLAG, LogFactory.getFlag()); - request.getHeaders().add("traceid", LogFactory.getFlag()); - request.getHeaders().add("spanid", subFlag); - - response = execution.execute(request, body); - - // 打印请求响应日志 - traceResponse(request, response, null, subFlag, beginNano); - - return response; - } catch (IOException exe) { - try { - traceResponse(request, response, exe, subFlag, beginNano); - } catch (Exception e) { - SYSTEM_LOGGER.warn("method=intercept||msg={}", e.getMessage()); - } - throw new ThirdPartRemoteException("rest-template: " + exe.getMessage(), exe, - ResultStatus.HTTP_REQ_ERROR); - } - } - - private void traceRequest(HttpRequest request, String subFlag, byte[] body) throws IOException { - REQ_LOGGER.info("method=traceRequest||remoteRequest||url={}||method={}||headers={}||body={}||subFlag={}", - request.getURI(), request.getMethod(), JSON.toJSONString(request.getHeaders()), new String(body, "UTF-8"), subFlag); - } - - private void traceResponse(HttpRequest request, ClientHttpResponse response, IOException exception, - String subFlag, long nanoTime) throws IOException { - String url = simpleUrl(request); - StringBuilder inputStringBuilder = new StringBuilder(); - if (response == null) { - RESP_LOGGER.warn( - "method=traceResponse||remoteResponse||code=-1||url={}||text={}||headers={}||body={}||timeCost={}||subFlag={}", - url, null, null, null, (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag); - return; - } - - try { - try (BufferedReader bufferedReader = new BufferedReader( - new InputStreamReader(response.getBody(), "UTF-8"))) { - - boolean first = true; - String line = bufferedReader.readLine(); - while (line != null) { - if (!first) { - inputStringBuilder.append('\n'); - } else { - first = false; - } - inputStringBuilder.append(line); - line = bufferedReader.readLine(); - } - } - } catch (Exception e) { - RESP_LOGGER.warn( - "method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||body={}||error={}||timeCost={}||subFlag={}", - response.getStatusCode(), - url, - response.getStatusText(), - response.getHeaders(), - inputStringBuilder.toString(), - e, - (System.nanoTime() - nanoTime) / 1000 / 1000, - subFlag - ); - - if (!response.getStatusCode().is2xxSuccessful()) { - throw new ThirdPartRemoteException(getResponseBodyAndIgnoreException(response), e, ResultStatus.HTTP_REQ_ERROR); - } - } - - String responseString = inputStringBuilder.toString().replace("\n", ""); - responseString = responseString.substring(0, Math.min(responseString.length(), 5000)); - - if (!response.getStatusCode().is2xxSuccessful()) { - if (exception == null) { - RESP_LOGGER.warn( - "method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||body={}||timeCost={}||subFlag={}", - response.getStatusCode(), url, response.getStatusText(), response.getHeaders(), responseString, - (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag); - } else { - RESP_LOGGER.warn( - "method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||body={}||error={}||timeCost={}||subFlag={}", - response.getStatusCode(), url, response.getStatusText(), response.getHeaders(), responseString, - exception, (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag); - } - throw new ThirdPartRemoteException(responseString, ResultStatus.HTTP_REQ_ERROR); - } - - if (exception == null) { - RESP_LOGGER.info( - "method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||responseBody={}||timeCost={}||subFlag={}", - response.getStatusCode(), url, response.getStatusText(), response.getHeaders(), responseString, - (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag); - } else { - RESP_LOGGER.warn( - "method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||responseBody={}||error={}||timeCost={}||subFlag={}", - response.getStatusCode(), url, response.getStatusText(), response.getHeaders(), responseString, - exception, (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag); - } - - } - - } - - private String getResponseBodyAndIgnoreException(ClientHttpResponse response) { - try { - byte[] bytes = new byte[response.getBody().available()]; - response.getBody().read(bytes); - - return new String(bytes); - } catch (Exception e) { - // ignore - } - - return ""; - } - - private static String simpleUrl(HttpRequest request) { - String url = request.getURI().toString(); - int index = url.indexOf("?"); - if (index > 0) { - return url.substring(0, index); - } else { - return url; - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTool.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTool.java deleted file mode 100644 index 058e4540..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/RestTool.java +++ /dev/null @@ -1,357 +0,0 @@ - -package com.xiaojukeji.know.streaming.km.common.component; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.lang.reflect.Type; -import java.util.List; -import java.util.Map; - -/** - * - * @author jinbinbin - * @version $Id: RestHelper.java, v 0.1 2018年09月19日 17:31 jinbinbin Exp $ - */ -@Component -public class RestTool { - private static final ILog LOGGER = LogFactory.getLog(RestTool.class); - - @Autowired - private RestTemplate restTemplate; - - /** - * POST请求 - * @param url 请求地址 - * @param postBody 请求内容 - * @param headers header - * @param resultType 返回类型 - * @param 泛型T - * @return - */ - public T postObjectWithRawContent(String url, Object postBody, HttpHeaders headers, Class resultType) { - ResponseEntity result = restTemplate.exchange( - url, - HttpMethod.POST, - new HttpEntity<>(postBody, headers), - String.class - ); - - return ConvertUtil.toObj(result.getBody(), resultType); - } - - /** - * POST请求 - * @param url 请求地址 - * @param postBody 请求内容 - * @param resultType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T postObjectWithJsonContent(String url, Object postBody, Class resultType) { - return this.postObjectWithRawContent(url, postBody, this.getJsonContentHeaders(), resultType); - } - - /** - * POST请求 - * @param url 请求地址 - * @param postBody 请求内容 - * @param resultType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T postObjectWithJsonContentAndHeader(String url, Map headers, Object postBody, Class resultType) { - return this.postObjectWithRawContent(url, postBody, this.getJsonContentHeaders(headers), resultType); - } - - /** - * GET请求 - * @param url 请求地址 - * @param params 请求参数 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T getObjectWithJsonContent(String url, Map params, Class resultType) { - ResponseEntity result = restTemplate.exchange( - url, - HttpMethod.GET, - null, - String.class, - params - ); - - return ConvertUtil.toObj(result.getBody(), resultType); - } - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T getForObject(String url, HttpHeaders headers, Type resultType) { - ResponseEntity result = restTemplate.exchange( - url, - HttpMethod.GET, - new HttpEntity<>(null, headers), - String.class - ); - - return ConvertUtil.toObj(result.getBody(), resultType); - } - - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param params 请求参数 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T getObjectWithParamsAndHeader(String url, Map headers, - Map params, Type resultType) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, - new HttpEntity<>(null, getJsonContentHeaders(headers)), String.class, params); - return ConvertUtil.toObj(result.getBody(), resultType); - } - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T getForObject(String url, Map headers, Type resultType) { - try { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, - new HttpEntity<>(null, getJsonContentHeaders(headers)), String.class); - return JSON.parseObject(result.getBody(), resultType); - } catch (Exception e){ - LOGGER.error("method=getForObject||url={}||msg=exception!", url, e); - } - - return null; - } - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T getForObject(String url, HttpHeaders headers, TypeReference resultType) { - try { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, - new HttpEntity<>(null, headers), String.class); - return JSON.parseObject(result.getBody(), resultType); - } catch (Exception e){ - LOGGER.error("method=getForObject||url={}||msg=exception!", url, e); - } - - return null; - } - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @return T - */ - public String getForString(String url, Map headers) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, - new HttpEntity<>(null, getJsonContentHeaders(headers)), String.class); - return result.getBody(); - } - - /** - * GET请求 - * @param url 请求地址 - * @param params 请求参数 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public List getArrayObjectWithJsonContent(String url, Map params, Class resultType) { - ResponseEntity result = restTemplate.exchange( - url, - HttpMethod.GET, - null, - String.class, - params - ); - - return ConvertUtil.str2ObjArrayByJson(result.getBody(), resultType); - } - - /** - * 根据map中的参数构建url+queryString - * @param url 请求地址 - * @param params 请求参数 - * @return 请求url - */ - public static String getQueryString(String url, Map params) { - if (params == null) { - return url; - } - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url); - - return builder.toUriString(); - } - - /** - * DEL请求 - * @param url 请求地址 - */ - public void deleteObject(String url) { - restTemplate.delete(url); - } - - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param params 请求参数 - * @param resultType 返回类型 - * @param 泛型T - * @return T - */ - public T deleteWithParamsAndHeader(String url, Map headers, - Map params, Type resultType) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.DELETE, - new HttpEntity<>(params, getJsonContentHeaders(headers)), String.class); - return ConvertUtil.toObj(result.getBody(), resultType); - } - - /** - * GET请求 header中有application/json - * @param url 请求地址 - * @param resultType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T getObjectWithJsonContent(String url, Type resultType) { - HttpHeaders headers = getJsonContentHeaders(); - ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers), - String.class); - return ConvertUtil.toObj(result.getBody(), resultType); - } - - /** - * 构建 application/json header - * @return HttpHeaders - */ - private HttpHeaders getJsonContentHeaders() { - HttpHeaders headers = new HttpHeaders(); - headers.add( HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); - return headers; - } - - /** - * 构建 application/json header - * @return HttpHeaders - */ - private HttpHeaders getJsonContentHeaders(Map headMap) { - HttpHeaders headers = new HttpHeaders(); - headers.add( HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); - for (Map.Entry entry : headMap.entrySet()) { - headers.add(entry.getKey(), entry.getValue()); - } - return headers; - } - - /** - * PUT请求 header中有application/json - * @param url 请求地址 - * @param request 请求内容 - * @param responseType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T putJsonForObject(String url, Object request, Class responseType) { - HttpHeaders jsonHead = getJsonContentHeaders(); - ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.PUT, - new HttpEntity(ConvertUtil.obj2Json(request), jsonHead), responseType); - return responseEntity.getBody(); - } - - /** - * PUT请求 - * @param url 请求地址 - * @param request 请求内容 - * @param responseType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T putForObject(String url, Object request, Type responseType) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.PUT, - new HttpEntity<>(ConvertUtil.obj2Json(request)), String.class); - return ConvertUtil.toObj(result.getBody(), responseType); - } - - /** - * PUT请求 - * @param url 请求地址 - * @param request 请求内容 - * @param responseType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T putForObject(String url, HttpHeaders headers, String request, Type responseType) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.PUT, - new HttpEntity<>(request, headers), String.class); - return ConvertUtil.toObj(result.getBody(), responseType); - } - - /** - * POST请求 - * @param url 请求地址 - * @param request 请求内容 - * @param responseType 期望返回的类型 - * @param 泛型T - * @return T - */ - public T putObjectWithJsonContentAndHeader(String url, Map headers, Object request, - Type responseType) { - ResponseEntity result = restTemplate.exchange(url, HttpMethod.PUT, - new HttpEntity(ConvertUtil.obj2Json(request), getJsonContentHeaders(headers)), String.class); - return ConvertUtil.toObj(result.getBody(), responseType); - } - - /** - * GET请求 - * @param url 请求地址 - * @param headers 请求头 - * @param resultType 返回类型 - * @param 泛型T - * @return T - * */ - public T deleteForObject(String url, Map headers, Type resultType) { - ResponseEntity result = restTemplate.exchange( - url, - HttpMethod.GET, - new HttpEntity<>(null, getJsonContentHeaders(headers)), - String.class - ); - - return ConvertUtil.toObj(result.getBody(), resultType); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/SpringTool.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/SpringTool.java deleted file mode 100644 index 8d9be3d4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/component/SpringTool.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.component; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.context.ApplicationEvent; -import org.springframework.context.annotation.Lazy; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Service; - -import java.util.Map; - -@Service("springTool") -@Lazy(false) -@Order(value = 1) -public class SpringTool implements ApplicationContextAware, DisposableBean { - private static final Logger logger = LoggerFactory.getLogger(SpringTool.class); - - private static ApplicationContext applicationContext = null; - - /** - * 去的存储在静态变量中的ApplicationContext - */ - private static ApplicationContext getApplicationContext() { - return applicationContext; - } - - /** - * 从静态变量applicationContext中去的Bean,自动转型为所复制对象的类型 - */ - public static T getBean(String name) { - return (T) applicationContext.getBean(name); - } - - public static T getBean(String name, Class clazz) { - return applicationContext.getBean(name, clazz); - } - - public static Map getBeansOfType(Class type) throws BeansException { - return getApplicationContext().getBeansOfType(type); - } - - /** - * 清除SpringContextHolder中的ApplicationContext为Null - */ - public static void clearHolder() { - if (logger.isDebugEnabled()) { - logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); - } - applicationContext = null; - } - - /** - * 实现ApplicationContextAware接口,注入Context到静态变量 - */ - @Override - public void setApplicationContext(ApplicationContext context) throws BeansException { - SpringTool.applicationContext = context; - } - - /** - * 实现DisposableBean接口,在Context关闭时清理静态变量 - */ - @Override - public void destroy() throws Exception { - SpringTool.clearHolder(); - } - - /** - * 发布一个事件 - */ - public static void publish(ApplicationEvent event) { - getApplicationContext().publishEvent(event); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ApiPrefix.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ApiPrefix.java deleted file mode 100644 index c7c1803b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ApiPrefix.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -/** - * Api前缀 - * @author zengqiao - * @date 20/4/16 - */ -public class ApiPrefix { - public static final String API_PREFIX = "/ks-km/api/"; - - public static final String API_V1_PREFIX = API_PREFIX + "v1/"; - - public static final String API_V3_PREFIX = API_PREFIX + "v3/"; - - public static final String API_V3_CONNECT_PREFIX = API_V3_PREFIX + "kafka-connect/"; - - public static final String API_V3_MM2_PREFIX = API_V3_PREFIX + "kafka-mm2/"; - - public static final String API_V3_HA_MIRROR_PREFIX = API_V3_PREFIX + "ha-mirror/"; - - public static final String API_V3_OPEN_PREFIX = API_V3_PREFIX + "open/"; - - private ApiPrefix() { - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/Constant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/Constant.java deleted file mode 100644 index 5ba73baa..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/Constant.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -/** - * @author zengqiao - * @date 20/2/28 - */ -public class Constant { - - private Constant() {} - - public static final String ONE = "1"; - public static final String ZERO = "0"; - - public static final Integer NUM_ONE = 1; - public static final Integer NUM_ZERO = 0; - - public static final Integer SUCCESS = 0; - - public static final String SYSTEM = "系统"; - - public static final String COMMA = ","; - - public static final Integer YES = 1; - public static final Integer NO = 0; - - public static final Integer ALIVE = 1; - public static final Integer DOWN = 0; - - public static final Integer ONE_HUNDRED = 100; - - public static final Long B_TO_GB = 1024L * 1024L * 1024L; - - public static final Long B_TO_MB = 1024L * 1024L; - - public static final Integer DEFAULT_SESSION_TIMEOUT_UNIT_MS = 15000; - public static final Integer DEFAULT_REQUEST_TIMEOUT_UNIT_MS = 5000; - - /** - * 指标相关 - */ - public static final Integer PER_BATCH_MAX_VALUE = 100; - - public static final String DEFAULT_USER_NAME = "know-streaming-app"; - - public static final int INVALID_CODE = -1; - - public static final String MYSQL_TABLE_NAME_PREFIX = "ks_km_"; - public static final String MYSQL_KC_TABLE_NAME_PREFIX = "ks_kc_"; - public static final String MYSQL_HA_TABLE_NAME_PREFIX = "ks_ha_"; - - public static final String SWAGGER_API_TAG_PREFIX = "KS-KM-"; - - public static final String HC_CONFIG_NAME_PREFIX = "HC_"; - - /** - * kafka-user前缀 - */ - public static final String KAFKA_PRINCIPAL_PREFIX = "User:"; - - /** - * 采集指标的花费时间 - */ - public static final String COLLECT_METRICS_COST_TIME_METRICS_NAME = "CollectMetricsCostTimeUnitSec"; - public static final Float COLLECT_METRICS_ERROR_COST_TIME = 100.001F; - - public static final Integer DEFAULT_RETRY_TIME = 3; - - public static final Integer ZK_ALIVE_BUT_4_LETTER_FORBIDDEN = 11; - - public static final String CONNECTOR_CONFIG_ACTION_RELOAD_NAME = "config.action.reload"; - - public static final String CONNECTOR_CONFIG_ERRORS_TOLERANCE_NAME = "errors.tolerance"; - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java deleted file mode 100644 index 85bf2084..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -public class ESConstant { - - public static final String TIME_STAMP = "timestamp"; - - public static final String HIST = "hist"; - - public static final String KEY = "key"; - - public static final String VALUE = "value"; - - public static final String MATCH = "match"; - - public static final String TERM = "term"; - - public static final String PREFIX = "prefix"; - - public static final String METRICS_DOT = "metrics."; - - public static final String RANGE = "range"; - - public static final String FIELD = "field"; - - public static final String ORDER = "order"; - - public static final String DESC = "desc"; - - public static final String ASC = "asc"; - - public static final String GTE = "gte"; - - public static final String LTE = "lte"; - - public static final String TOTAL = "total"; - - public static final Integer DEFAULT_RETRY_TIME = 3; - - /** - * 获取Topic-Latest指标时,单次允许的Topic数 - */ - public static final int SEARCH_LATEST_TOPIC_METRIC_CNT_PER_REQUEST = 500; - - private ESConstant() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/JobConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/JobConstant.java deleted file mode 100644 index 4e5d8631..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/JobConstant.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -public class JobConstant { - private JobConstant() { - } - - public static final String TOPIC_REPLICA_MOVE = "topicReplicaMoveJobHandler"; - - public static final String TOPIC_REPLICA_SCALA = "topicReplicaScalaJobHandler"; - - public static final String CLUSTER_BALANCE = "clusterBalanceJobHandler"; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/KafkaConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/KafkaConstant.java deleted file mode 100644 index 465f6f8a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/KafkaConstant.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - - -import kafka.log.LogConfig$; -import kafka.server.KafkaConfig$; -import org.apache.kafka.common.config.ConfigDef; -import org.apache.kafka.common.internals.Topic; -import scala.jdk.javaapi.CollectionConverters; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -/** - * @author zengqiao - * @date 20/5/20 - */ -public class KafkaConstant { - public static final List KAFKA_INTERNAL_TOPICS = Arrays.asList( - Topic.TRANSACTION_STATE_TOPIC_NAME, - Topic.GROUP_METADATA_TOPIC_NAME, - "__cluster_metadata" - ); - - public static final String VERSION = "version"; - - public static final String PARTITIONS = "partitions"; - - public static final String EXTERNAL_KEY = "EXTERNAL"; - - public static final String INTERNAL_KEY = "INTERNAL"; - - public static final String WITHOUT_RACK_INFO_NAME = ""; - - public static final Integer DATA_VERSION_ONE = 1; - - public static final Integer ADMIN_CLIENT_REQUEST_TIME_OUT_UNIT_MS = 10000; - - public static final Integer KAFKA_SASL_SCRAM_ITERATIONS = 8192; - - public static final Integer NO_LEADER = -1; - - public static final Long POLL_ONCE_TIMEOUT_UNIT_MS = 2000L; - - public static final String CONTROLLER_ROLE = "controller"; - - public static final String DEFAULT_CONNECT_VERSION = "2.5.0"; - - public static final List CONFIG_SIMILAR_IGNORED_CONFIG_KEY_LIST = Arrays.asList("broker.id", "listeners", "name", "value", "advertised.listeners", "node.id"); - - public static final Map KAFKA_ALL_CONFIG_DEF_MAP = new ConcurrentHashMap<>(); - - static { - try { - KAFKA_ALL_CONFIG_DEF_MAP.putAll(CollectionConverters.asJava(LogConfig$.MODULE$.configKeys())); - } catch (Exception e) { - // ignore - } - - try { - KAFKA_ALL_CONFIG_DEF_MAP.putAll(CollectionConverters.asJava(KafkaConfig$.MODULE$.configKeys())); - } catch (Exception e) { - // ignore - } - } - - private KafkaConstant() { - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/LoginConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/LoginConstant.java deleted file mode 100644 index cc0ad875..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/LoginConstant.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -/** - * 登录常量 - * @author zengqiao - * @date 20/5/8 - */ -public class LoginConstant { - public static final String SESSION_USERNAME_KEY = "username"; - - public static final String COOKIE_CHINESE_USERNAME_KEY = "chineseName"; - - public static final Integer COOKIE_OR_SESSION_MAX_AGE_UNIT_MS = 24 * 60 * 60 * 1000; - - /** - * HTTP Header key - */ - public static final String TRICK_LOGIN_SWITCH = "Trick-Login-Switch"; - - public static final String TRICK_LOGIN_USER = "Trick-Login-User"; - - /** - * 配置允许 trick 登录用户名单 - */ - public static final String TRICK_LOGIN_LEGAL_USER_CONFIG_KEY = "SECURITY.TRICK_USERS"; - - /** - * 开关状态值 - */ - public static final String TRICK_LOGIN_SWITCH_ON = "on"; - public static final String TRICK_LOGIN_SWITCH_OFF = "off"; - - private LoginConstant() { - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/MsgConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/MsgConstant.java deleted file mode 100644 index 2f510a84..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/MsgConstant.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -/** - * 信息模版Constant - * @author zengqiao - * @date 22/03/03 - */ -public class MsgConstant { - private MsgConstant() { - } - - /**************************************************** Cluster ****************************************************/ - - public static String getClusterBizStr(Long clusterPhyId, String clusterName){ - return String.format("集群ID:[%d] 集群名称:[%s]", clusterPhyId, clusterName); - } - - public static String getClusterPhyNotExist(Long clusterPhyId) { - return String.format("集群ID:[%d] 不存在或者未加载", clusterPhyId); - } - - - - /**************************************************** Broker ****************************************************/ - - public static String getBrokerNotExist(Long clusterPhyId, Integer brokerId) { - return String.format("集群ID:[%d] brokerId:[%d] 不存在或未存活", clusterPhyId, brokerId); - } - - public static String getBrokerBizStr(Long clusterPhyId, Integer brokerId) { - return String.format("集群ID:[%d] brokerId:[%d]", clusterPhyId, brokerId); - } - - - /**************************************************** Topic ****************************************************/ - - public static String getTopicNotExist(Long clusterPhyId, String topicName) { - return String.format("集群ID:[%d] Topic名称:[%s] 不存在", clusterPhyId, topicName); - } - - public static String getTopicBizStr(Long clusterPhyId, String topicName) { - return String.format("集群ID:[%d] Topic名称:[%s]", clusterPhyId, topicName); - } - - public static String getTopicExtend(Long existPartitionNum, Long totalPartitionNum,String expandParam){ - return String.format("新增分区, 从:[%d] 增加到:[%d], 详细参数信息:[%s]", existPartitionNum,totalPartitionNum,expandParam); - } - - public static String getClusterTopicKey(Long clusterPhyId, String topicName) { - return String.format("%d@%s", clusterPhyId, topicName); - } - - /**************************************************** Partition ****************************************************/ - - public static String getPartitionNoLeader(Long clusterPhyId) { - return String.format("集群ID:[%d] 所有分区NoLeader", clusterPhyId); - } - - public static String getPartitionNoLeader(Long clusterPhyId, String topicName) { - return String.format("集群ID:[%d] Topic名称:[%s] 所有分区NoLeader", clusterPhyId, topicName); - } - - public static String getPartitionNotExist(Long clusterPhyId, String topicName) { - return String.format("集群ID:[%d] Topic名称:[%s] 存在非法的分区ID", clusterPhyId, topicName); - } - - public static String getPartitionNotExist(Long clusterPhyId, String topicName, Integer partitionId) { - return String.format("集群ID:[%d] Topic名称:[%s] 分区Id:[%d] 不存在", clusterPhyId, topicName, partitionId); - } - - /**************************************************** KafkaUser ****************************************************/ - - public static String getKafkaUserBizStr(Long clusterPhyId, String kafkaUser) { - return String.format("集群ID:[%d] kafkaUser:[%s]", clusterPhyId, kafkaUser); - } - - public static String getKafkaUserNotExist(Long clusterPhyId, String kafkaUser) { - return String.format("集群ID:[%d] kafkaUser:[%s] 不存在", clusterPhyId, kafkaUser); - } - - public static String getKafkaUserDuplicate(Long clusterPhyId, String kafkaUser) { - return String.format("集群ID:[%d] kafkaUser:[%s] 已存在", clusterPhyId, kafkaUser); - } - - /**************************************************** reassign ****************************************************/ - - public static String getReassignJobBizStr(Long jobId, Long clusterPhyId) { - return String.format("任务Id:[%d] 集群ID:[%s]", jobId, clusterPhyId); - } - - public static String getJobIdCanNotNull() { - return "jobId不允许为空"; - } - - public static String getJobNotExist(Long jobId) { - return String.format("jobId:[%d] 不存在", jobId); - } - - - /**************************************************** Connect-Cluster ****************************************************/ - - public static String getConnectClusterBizStr(Long clusterId, String clusterName){ - return String.format("Connect集群ID:[%d] 集群名称:[%s]", clusterId, clusterName); - } - - public static String getConnectClusterNotExist(Long clusterId) { - return String.format("Connect集群ID:[%d] 不存在或者未加载", clusterId); - } - - public static String getConnectorBizStr(Long clusterPhyId, String topicName) { - return String.format("Connect集群ID:[%d] Connector名称:[%s]", clusterPhyId, topicName); - } - - - /**************************************************** Connector ****************************************************/ - - public static String getConnectorNotExist(Long connectClusterId, String connectorName) { - return String.format("Connect集群ID:[%d] Connector名称:[%s] 不存在", connectClusterId, connectorName); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/PaginationConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/PaginationConstant.java deleted file mode 100644 index 9b8def80..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/PaginationConstant.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant; - -/** - * @author zengqiao - * @date 20/2/28 - */ -public class PaginationConstant { - - private PaginationConstant() { - } - - /** - * 默认页 - */ - public static final Integer DEFAULT_PAGE_NO = 1; - - /** - * 默认页大小 - */ - public static final Integer DEFAULT_PAGE_SIZE = 10; - - /** - * group列表的默认排序规则 - */ - public static final String DEFAULT_GROUP_SORTED_FIELD = "name"; - - /** - * groupTopic列表的默认排序规则 - */ - public static final String DEFAULT_GROUP_TOPIC_SORTED_FIELD = "topicName"; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/connect/KafkaConnectConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/connect/KafkaConnectConstant.java deleted file mode 100644 index 63612874..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/connect/KafkaConnectConstant.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant.connect; - -/** - * @author zengqiao - * @date 20/5/20 - */ -public class KafkaConnectConstant { - public static final String CONNECTOR_CLASS_FILED_NAME = "connector.class"; - - public static final String CONNECTOR_TOPICS_FILED_NAME = "topics"; - public static final String CONNECTOR_TOPICS_FILED_ERROR_VALUE = "know-streaming-connect-illegal-value"; - - public static final String MIRROR_MAKER_TOPIC_PARTITION_PATTERN = "kafka.connect.mirror:type=MirrorSourceConnector,target=*,topic=*,partition=*"; - - public static final String MIRROR_MAKER_SOURCE_CONNECTOR_TYPE = "org.apache.kafka.connect.mirror.MirrorSourceConnector"; - - public static final String MIRROR_MAKER_HEARTBEAT_CONNECTOR_TYPE = "org.apache.kafka.connect.mirror.MirrorHeartbeatConnector"; - - public static final String MIRROR_MAKER_CHECKPOINT_CONNECTOR_TYPE = "org.apache.kafka.connect.mirror.MirrorCheckpointConnector"; - - public static final String MIRROR_MAKER_TARGET_CLUSTER_BOOTSTRAP_SERVERS_FIELD_NAME = "target.cluster.bootstrap.servers"; - public static final String MIRROR_MAKER_TARGET_CLUSTER_ALIAS_FIELD_NAME = "target.cluster.alias"; - public static final String MIRROR_MAKER_TARGET_CLUSTER_FIELD_NAME = "target.cluster"; - - public static final String MIRROR_MAKER_SOURCE_CLUSTER_BOOTSTRAP_SERVERS_FIELD_NAME = "source.cluster.bootstrap.servers"; - public static final String MIRROR_MAKER_SOURCE_CLUSTER_ALIAS_FIELD_NAME = "source.cluster.alias"; - public static final String MIRROR_MAKER_SOURCE_CLUSTER_FIELD_NAME = "source.cluster"; - - public static final String MIRROR_MAKER_NAME_FIELD_NAME = "name"; - private KafkaConnectConstant() { - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/AbstractTopicConfig.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/AbstractTopicConfig.java deleted file mode 100644 index c804f393..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/AbstractTopicConfig.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.annotations.KafkaSource; - -import java.lang.reflect.Field; -import java.util.*; - -@KafkaSource(modified = 1, modifyDesc = "除了0.10.2及以下版本是需要按照格式组装之外,其他版本是直接拷贝的源码") -public abstract class AbstractTopicConfig { - private static final ILog log = LogFactory.getLog(AbstractTopicConfig.class); - - public static final String KAFKA_CONFIG_KEY_NAME = "KAFKA_CONFIG_KEY_NAME"; - - public static final String KAFKA_CONFIG_DOC_NAME = "KAFKA_CONFIG_DOC_NAME"; - - // 遍历版本 - public static List getTopicConfigNamesAndDocs(Class clazz) { - Map configMap = new HashMap<>(); - - // 遍历版本对应的字段 - for (Field field: clazz.getDeclaredFields()) { - try { - if (field.getName().endsWith("_CONFIG")) { - String fieldNamePrefix = field.getName().substring(0, field.getName().length() - "_CONFIG".length()); - - Properties properties = configMap.getOrDefault(fieldNamePrefix, new Properties()); - properties.put(KAFKA_CONFIG_KEY_NAME, field.get(null)); - configMap.put(fieldNamePrefix, properties); - } else if (field.getName().endsWith("_DOC")){ - String fieldNamePrefix = field.getName().substring(0, field.getName().length() - "_DOC".length()); - - Properties properties = configMap.getOrDefault(fieldNamePrefix, new Properties()); - properties.put(KAFKA_CONFIG_DOC_NAME, field.get(null)); - configMap.put(fieldNamePrefix, properties); - } - } catch (Exception e) { - log.error("method=static||class={}||field={}||errMsg=exception", clazz.getSimpleName(), field.getName()); - } - } - - List propsList = new ArrayList<>(configMap.values()); - if (clazz != TopicConfig0100.class) { - Properties leaderReplicationProps = new Properties(); - leaderReplicationProps.put(KAFKA_CONFIG_KEY_NAME, LeaderReplicationThrottledReplicasProp); - leaderReplicationProps.put(KAFKA_CONFIG_DOC_NAME, LeaderReplicationThrottledReplicasDoc); - propsList.add(leaderReplicationProps); - - Properties followerReplicationProps = new Properties(); - leaderReplicationProps.put(KAFKA_CONFIG_KEY_NAME, FollowerReplicationThrottledReplicasProp); - leaderReplicationProps.put(KAFKA_CONFIG_DOC_NAME, FollowerReplicationThrottledReplicasDoc); - propsList.add(followerReplicationProps); - } - - return propsList; - } - - // Leave these out of TopicConfig for now as they are replication quota configs - public static final String LeaderReplicationThrottledReplicasProp = "leader.replication.throttled.replicas"; - public static final String LeaderReplicationThrottledReplicasDoc = "A list of replicas for which log replication should be throttled on " + - "the leader side. The list should describe a set of replicas in the form " + - "[PartitionId]:[BrokerId],[PartitionId]:[BrokerId]:... or alternatively the wildcard '*' can be used to throttle " + - "all replicas for this topic."; - - public static final String FollowerReplicationThrottledReplicasProp = "follower.replication.throttled.replicas"; - public static final String FollowerReplicationThrottledReplicasDoc = "A list of replicas for which log replication should be throttled on " + - "the follower side. The list should describe a set of " + "replicas in the form " + - "[PartitionId]:[BrokerId],[PartitionId]:[BrokerId]:... or alternatively the wildcard '*' can be used to throttle " + - "all replicas for this topic."; - - protected AbstractTopicConfig() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0100.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0100.java deleted file mode 100755 index 229bda77..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0100.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig0100 extends AbstractTopicConfig { - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a log can grow " + - "to before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. By default there is no size limit only a time limit."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0101.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0101.java deleted file mode 100755 index 02d7c6df..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0101.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig0101 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a log can grow " + - "to before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. By default there is no size limit only a time limit."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0102.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0102.java deleted file mode 100755 index 98fd15c0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0102.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig0102 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a log can grow " + - "to before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. By default there is no size limit only a time limit."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0110.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0110.java deleted file mode 100755 index e3ca80af..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig0110.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig0110 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a log can grow " + - "to before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. By default there is no size limit only a time limit."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1000.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1000.java deleted file mode 100755 index d1ce9229..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1000.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig1000 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a partition " + - "(which consists of log segments) can grow to before we will discard old log segments to free up space if we " + - "are using the \"delete\" retention policy. By default there is no size limit only a time limit. " + - "Since this limit is enforced at the partition level, multiply it by the number of partitions to compute " + - "the topic retention in bytes."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1100.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1100.java deleted file mode 100755 index f2cfe34e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig1100.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig1100 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a partition " + - "(which consists of log segments) can grow to before we will discard old log segments to free up space if we " + - "are using the \"delete\" retention policy. By default there is no size limit only a time limit. " + - "Since this limit is enforced at the partition level, multiply it by the number of partitions to compute " + - "the topic retention in bytes."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data. If set to -1, no time limit is applied."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2000.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2000.java deleted file mode 100755 index c29272f1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2000.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - * Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - * The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig2000 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a partition " + - "(which consists of log segments) can grow to before we will discard old log segments to free up space if we " + - "are using the \"delete\" retention policy. By default there is no size limit only a time limit. " + - "Since this limit is enforced at the partition level, multiply it by the number of partitions to compute " + - "the topic retention in bytes."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data. If set to -1, no time limit is applied."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = "

The largest record batch size allowed by Kafka. If this " + - "is increased and there are consumers older than 0.10.2, the consumers' fetch size must also be increased so that " + - "the they can fetch record batches this large.

" + - "

In the latest message format version, records are always grouped into batches for efficiency. In previous " + - "message format versions, uncompressed records are not grouped into batches and this limit only applies to a " + - "single record in that case.

"; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to it's offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\". This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', lz4). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; - - public static final String MESSAGE_DOWNCONVERSION_ENABLE_CONFIG = "message.downconversion.enable"; - public static final String MESSAGE_DOWNCONVERSION_ENABLE_DOC = "This configuration controls whether " + - "down-conversion of message formats is enabled to satisfy consume requests. When set to false, " + - "broker will not perform down-conversion for consumers expecting an older message format. The broker responds " + - "with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration" + - "does not apply to any message format conversion that might be required for replication to followers."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2500.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2500.java deleted file mode 100755 index 9bc80bf9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/kafka/TopicConfig2500.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.xiaojukeji.know.streaming.km.common.constant.kafka; - -/** - *

Keys that can be used to configure a topic. These keys are useful when creating or reconfiguring a - * topic using the AdminClient. - * - *

The intended pattern is for broker configs to include a `log.` prefix. For example, to set the default broker - * cleanup policy, one would set log.cleanup.policy instead of cleanup.policy. Unfortunately, there are many cases - * where this pattern is not followed. - */ -// This is a public API, so we should not remove or alter keys without a discussion and a deprecation period. -// Eventually this should replace LogConfig.scala. -public class TopicConfig2500 extends AbstractTopicConfig{ - public static final String SEGMENT_BYTES_CONFIG = "segment.bytes"; - public static final String SEGMENT_BYTES_DOC = "This configuration controls the segment file size for " + - "the log. Retention and cleaning is always done a file at a time so a larger segment size means " + - "fewer files but less granular control over retention."; - - public static final String SEGMENT_MS_CONFIG = "segment.ms"; - public static final String SEGMENT_MS_DOC = "This configuration controls the period of time after " + - "which Kafka will force the log to roll even if the segment file isn't full to ensure that retention " + - "can delete or compact old data."; - - public static final String SEGMENT_JITTER_MS_CONFIG = "segment.jitter.ms"; - public static final String SEGMENT_JITTER_MS_DOC = "The maximum random jitter subtracted from the scheduled " + - "segment roll time to avoid thundering herds of segment rolling"; - - public static final String SEGMENT_INDEX_BYTES_CONFIG = "segment.index.bytes"; - public static final String SEGMENT_INDEX_BYTES_DOC = "This configuration controls the size of the index that " + - "maps offsets to file positions. We preallocate this index file and shrink it only after log " + - "rolls. You generally should not need to change this setting."; - - public static final String FLUSH_MESSAGES_INTERVAL_CONFIG = "flush.messages"; - public static final String FLUSH_MESSAGES_INTERVAL_DOC = "This setting allows specifying an interval at " + - "which we will force an fsync of data written to the log. For example if this was set to 1 " + - "we would fsync after every message; if it were 5 we would fsync after every five messages. " + - "In general we recommend you not set this and use replication for durability and allow the " + - "operating system's background flush capabilities as it is more efficient. This setting can " + - "be overridden on a per-topic basis (see the per-topic configuration section)."; - - public static final String FLUSH_MS_CONFIG = "flush.ms"; - public static final String FLUSH_MS_DOC = "This setting allows specifying a time interval at which we will " + - "force an fsync of data written to the log. For example if this was set to 1000 " + - "we would fsync after 1000 ms had passed. In general we recommend you not set " + - "this and use replication for durability and allow the operating system's background " + - "flush capabilities as it is more efficient."; - - public static final String RETENTION_BYTES_CONFIG = "retention.bytes"; - public static final String RETENTION_BYTES_DOC = "This configuration controls the maximum size a partition " + - "(which consists of log segments) can grow to before we will discard old log segments to free up space if we " + - "are using the \"delete\" retention policy. By default there is no size limit only a time limit. " + - "Since this limit is enforced at the partition level, multiply it by the number of partitions to compute " + - "the topic retention in bytes."; - - public static final String RETENTION_MS_CONFIG = "retention.ms"; - public static final String RETENTION_MS_DOC = "This configuration controls the maximum time we will retain a " + - "log before we will discard old log segments to free up space if we are using the " + - "\"delete\" retention policy. This represents an SLA on how soon consumers must read " + - "their data. If set to -1, no time limit is applied."; - - public static final String MAX_MESSAGE_BYTES_CONFIG = "max.message.bytes"; - public static final String MAX_MESSAGE_BYTES_DOC = - "The largest record batch size allowed by Kafka (after compression if compression is enabled). " + - "If this is increased and there are consumers older than 0.10.2, the consumers' fetch " + - "size must also be increased so that the they can fetch record batches this large. " + - "In the latest message format version, records are always grouped into batches for efficiency. " + - "In previous message format versions, uncompressed records are not grouped into batches and this " + - "limit only applies to a single record in that case."; - - public static final String INDEX_INTERVAL_BYTES_CONFIG = "index.interval.bytes"; - public static final String INDEX_INTERVAL_BYTES_DOCS = "This setting controls how frequently " + - "Kafka adds an index entry to its offset index. The default setting ensures that we index a " + - "message roughly every 4096 bytes. More indexing allows reads to jump closer to the exact " + - "position in the log but makes the index larger. You probably don't need to change this."; - - public static final String FILE_DELETE_DELAY_MS_CONFIG = "file.delete.delay.ms"; - public static final String FILE_DELETE_DELAY_MS_DOC = "The time to wait before deleting a file from the " + - "filesystem"; - - public static final String DELETE_RETENTION_MS_CONFIG = "delete.retention.ms"; - public static final String DELETE_RETENTION_MS_DOC = "The amount of time to retain delete tombstone markers " + - "for log compacted topics. This setting also gives a bound " + - "on the time in which a consumer must complete a read if they begin from offset 0 " + - "to ensure that they get a valid snapshot of the final stage (otherwise delete " + - "tombstones may be collected before they complete their scan)."; - - public static final String MIN_COMPACTION_LAG_MS_CONFIG = "min.compaction.lag.ms"; - public static final String MIN_COMPACTION_LAG_MS_DOC = "The minimum time a message will remain " + - "uncompacted in the log. Only applicable for logs that are being compacted."; - - public static final String MAX_COMPACTION_LAG_MS_CONFIG = "max.compaction.lag.ms"; - public static final String MAX_COMPACTION_LAG_MS_DOC = "The maximum time a message will remain " + - "ineligible for compaction in the log. Only applicable for logs that are being compacted."; - - public static final String MIN_CLEANABLE_DIRTY_RATIO_CONFIG = "min.cleanable.dirty.ratio"; - public static final String MIN_CLEANABLE_DIRTY_RATIO_DOC = "This configuration controls how frequently " + - "the log compactor will attempt to clean the log (assuming log " + - "compaction is enabled). By default we will avoid cleaning a log where more than " + - "50% of the log has been compacted. This ratio bounds the maximum space wasted in " + - "the log by duplicates (at 50% at most 50% of the log could be duplicates). A " + - "higher ratio will mean fewer, more efficient cleanings but will mean more wasted " + - "space in the log. If the " + MAX_COMPACTION_LAG_MS_CONFIG + " or the " + MIN_COMPACTION_LAG_MS_CONFIG + - " configurations are also specified, then the log compactor considers the log to be eligible for compaction " + - "as soon as either: (i) the dirty ratio threshold has been met and the log has had dirty (uncompacted) " + - "records for at least the " + MIN_COMPACTION_LAG_MS_CONFIG + " duration, or (ii) if the log has had " + - "dirty (uncompacted) records for at most the " + MAX_COMPACTION_LAG_MS_CONFIG + " period."; - - public static final String CLEANUP_POLICY_CONFIG = "cleanup.policy"; - public static final String CLEANUP_POLICY_COMPACT = "compact"; - public static final String CLEANUP_POLICY_DELETE = "delete"; - public static final String CLEANUP_POLICY_DOC = "A string that is either \"" + CLEANUP_POLICY_DELETE + - "\" or \"" + CLEANUP_POLICY_COMPACT + "\" or both. This string designates the retention policy to use on " + - "old log segments. The default policy (\"delete\") will discard old segments when their retention " + - "time or size limit has been reached. The \"compact\" setting will enable log " + - "compaction on the topic."; - - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG = "unclean.leader.election.enable"; - public static final String UNCLEAN_LEADER_ELECTION_ENABLE_DOC = "Indicates whether to enable replicas " + - "not in the ISR set to be elected as leader as a last resort, even though doing so may result in data " + - "loss."; - - public static final String MIN_IN_SYNC_REPLICAS_CONFIG = "min.insync.replicas"; - public static final String MIN_IN_SYNC_REPLICAS_DOC = "When a producer sets acks to \"all\" (or \"-1\"), " + - "this configuration specifies the minimum number of replicas that must acknowledge " + - "a write for the write to be considered successful. If this minimum cannot be met, " + - "then the producer will raise an exception (either NotEnoughReplicas or " + - "NotEnoughReplicasAfterAppend).
When used together, min.insync.replicas and acks " + - "allow you to enforce greater durability guarantees. A typical scenario would be to " + - "create a topic with a replication factor of 3, set min.insync.replicas to 2, and " + - "produce with acks of \"all\". This will ensure that the producer raises an exception " + - "if a majority of replicas do not receive a write."; - - public static final String COMPRESSION_TYPE_CONFIG = "compression.type"; - public static final String COMPRESSION_TYPE_DOC = "Specify the final compression type for a given topic. " + - "This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally " + - "accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the " + - "original compression codec set by the producer."; - - public static final String PREALLOCATE_CONFIG = "preallocate"; - public static final String PREALLOCATE_DOC = "True if we should preallocate the file on disk when " + - "creating a new log segment."; - - public static final String MESSAGE_FORMAT_VERSION_CONFIG = "message.format.version"; - public static final String MESSAGE_FORMAT_VERSION_DOC = "Specify the message format version the broker " + - "will use to append messages to the logs. The value should be a valid ApiVersion. Some examples are: " + - "0.8.2, 0.9.0.0, 0.10.0, check ApiVersion for more details. By setting a particular message format " + - "version, the user is certifying that all the existing messages on disk are smaller or equal than the " + - "specified version. Setting this value incorrectly will cause consumers with older versions to break as " + - "they will receive messages with a format that they don't understand."; - - public static final String MESSAGE_TIMESTAMP_TYPE_CONFIG = "message.timestamp.type"; - public static final String MESSAGE_TIMESTAMP_TYPE_DOC = "Define whether the timestamp in the message is " + - "message create time or log append time. The value should be either `CreateTime` or `LogAppendTime`"; - - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_CONFIG = "message.timestamp.difference.max.ms"; - public static final String MESSAGE_TIMESTAMP_DIFFERENCE_MAX_MS_DOC = "The maximum difference allowed between " + - "the timestamp when a broker receives a message and the timestamp specified in the message. If " + - "message.timestamp.type=CreateTime, a message will be rejected if the difference in timestamp " + - "exceeds this threshold. This configuration is ignored if message.timestamp.type=LogAppendTime."; - - public static final String MESSAGE_DOWNCONVERSION_ENABLE_CONFIG = "message.downconversion.enable"; - public static final String MESSAGE_DOWNCONVERSION_ENABLE_DOC = "This configuration controls whether " + - "down-conversion of message formats is enabled to satisfy consume requests. When set to false, " + - "broker will not perform down-conversion for consumers expecting an older message format. The broker responds " + - "with UNSUPPORTED_VERSION error for consume requests from such older clients. This configuration" + - "does not apply to any message format conversion that might be required for replication to followers."; -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ChangeRecordVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ChangeRecordVOConverter.java deleted file mode 100644 index f5b009b8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ChangeRecordVOConverter.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.po.changerecord.KafkaChangeRecordPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.changerecord.KafkaChangeRecordVO; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum; -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum; - -import java.util.ArrayList; -import java.util.List; - -public class ChangeRecordVOConverter { - public static List convert2KafkaChangeRecordVOList(List poList) { - if (poList == null) { - return new ArrayList<>(); - } - - List voList = new ArrayList<>(); - for (KafkaChangeRecordPO po: poList) { - KafkaChangeRecordVO vo = new KafkaChangeRecordVO(); - vo.setClusterPhyId(po.getClusterPhyId()); - vo.setResTypeCode(po.getResType()); - vo.setResTypeName(ModuleEnum.valueOf(po.getResType()).getDesc()); - vo.setResName(po.getResName()); - vo.setOperateTime(po.getOperateTime()); - vo.setCreateTime(po.getCreateTime()); - vo.setChangeDesc(OperationEnum.valueOf(po.getOperateType()).getDesc()); - vo.setUpdateTime(po.getUpdateTime()); - voList.add(vo); - } - - return voList; - } - - private ChangeRecordVOConverter() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterConverter.java deleted file mode 100644 index bf848c8e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterConverter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterPhyAddDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterPhyModifyDTO; -import com.xiaojukeji.know.streaming.km.common.bean.po.cluster.ClusterPhyPO; -import com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterAuthTypeEnum; -import com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterRunStateEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import org.apache.kafka.common.config.SaslConfigs; - -import java.util.Properties; - -public class ClusterConverter { - private ClusterConverter() { - } - - public static ClusterPhyPO convert2ClusterPhyPO(ClusterPhyAddDTO dto) { - ClusterPhyPO clusterPhyPO = ConvertUtil.obj2Obj(dto, ClusterPhyPO.class); - clusterPhyPO.setClientProperties(ConvertUtil.obj2Json(dto.getClientProperties())); - clusterPhyPO.setJmxProperties(ConvertUtil.obj2Json(dto.getJmxProperties())); - if (ValidateUtils.isNull(dto.getZkProperties())) { - clusterPhyPO.setZkProperties(""); - } else { - clusterPhyPO.setZkProperties(ConvertUtil.obj2Json(dto.getZkProperties())); - } - clusterPhyPO.setRunState( - ValidateUtils.isBlank(dto.getZookeeper())? - ClusterRunStateEnum.RUN_RAFT.getRunState() : - ClusterRunStateEnum.RUN_ZK.getRunState() - ); - clusterPhyPO.setAuthType(ClusterConverter.getAuthType(dto.getClientProperties())); - return clusterPhyPO; - } - - public static ClusterPhyPO convert2ClusterPhyPO(ClusterPhyModifyDTO dto) { - ClusterPhyPO clusterPhyPO = ConvertUtil.obj2Obj(dto, ClusterPhyPO.class); - clusterPhyPO.setClientProperties(ConvertUtil.obj2Json(dto.getClientProperties())); - clusterPhyPO.setJmxProperties(ConvertUtil.obj2Json(dto.getJmxProperties())); - if (ValidateUtils.isNull(dto.getZkProperties())) { - clusterPhyPO.setZkProperties(""); - } else { - clusterPhyPO.setZkProperties(ConvertUtil.obj2Json(dto.getZkProperties())); - } - clusterPhyPO.setRunState( - ValidateUtils.isBlank(dto.getZookeeper())? - ClusterRunStateEnum.RUN_RAFT.getRunState() : - ClusterRunStateEnum.RUN_ZK.getRunState() - ); - clusterPhyPO.setAuthType(ClusterConverter.getAuthType(dto.getClientProperties())); - return clusterPhyPO; - } - - private static Integer getAuthType(Properties properties) { - if (properties == null || properties.isEmpty()) { - return ClusterAuthTypeEnum.NO_AUTH.getAuthType(); - } - - return ClusterAuthTypeEnum.getAuthBySaslMechanism(properties.getProperty(SaslConfigs.SASL_MECHANISM)).getAuthType(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterVOConverter.java deleted file mode 100644 index c9743845..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ClusterVOConverter.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyDashboardVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class ClusterVOConverter { - private ClusterVOConverter() { - } - - public static List convert2ClusterPhyDashboardVOList(List rowVOList, - List metricMultiLinesVOList, - List clusterMetricsList) { - Map voMap = rowVOList.stream().collect(Collectors.toMap(ClusterPhyDashboardVO::getId, Function.identity())); - - // > - Map> metricLineMap = new HashMap<>(); - if (metricMultiLinesVOList == null) { - metricMultiLinesVOList = new ArrayList<>(); - } - for (MetricMultiLinesVO multiLinesVO: metricMultiLinesVOList) { - if (multiLinesVO.getMetricLines() == null) { - continue; - } - for (MetricLineVO metricLineVO: multiLinesVO.getMetricLines()) { - metricLineMap.putIfAbsent(ConvertUtil.string2Long(metricLineVO.getName()), new ArrayList<>()); - metricLineMap.get(ConvertUtil.string2Long(metricLineVO.getName())).add(metricLineVO); - } - } - - List voList = new ArrayList<>(); - for (ClusterMetrics clusterMetrics: clusterMetricsList) { - ClusterPhyDashboardVO vo = voMap.get(clusterMetrics.getClusterPhyId()); - if (vo == null) { - vo = new ClusterPhyDashboardVO(); - vo.setId(clusterMetrics.getClusterPhyId()); - } - - vo.setLatestMetrics(clusterMetrics); - vo.setMetricLines(metricLineMap.getOrDefault(vo.getId(), new ArrayList<>())); - - voList.add(vo); - } - - return voList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ConnectConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ConnectConverter.java deleted file mode 100644 index 6dcc30e4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ConnectConverter.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnector; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorInfo; -import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorStateInfo; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect.ConnectClusterBasicCombineExistVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ClusterConnectorOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ConnectorBasicCombineExistVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ConnectorBasicVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.mm2.MirrorMakerBasicVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant; -import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class ConnectConverter { - public static ConnectorBasicCombineExistVO convert2BasicVO(ConnectCluster connectCluster, ConnectorPO connectorPO) { - ConnectorBasicCombineExistVO vo = new ConnectorBasicCombineExistVO(); - if (connectCluster == null || connectorPO == null) { - vo.setExist(false); - return vo; - } - - vo.setExist(true); - vo.setConnectClusterId(connectorPO.getConnectClusterId()); - vo.setConnectClusterName(connectCluster.getName()); - vo.setConnectorName(connectorPO.getConnectorName()); - - return vo; - } - - public static List convert2BasicVOList( - List clusterList, - List poList) { - Map clusterMap = new HashMap<>(); - clusterList.stream().forEach(elem -> clusterMap.put(elem.getId(), elem)); - - List voList = new ArrayList<>(); - poList.stream().filter(item -> clusterMap.containsKey(item.getConnectClusterId())).forEach(elem -> { - ConnectorBasicVO vo = new ConnectorBasicVO(); - vo.setConnectClusterId(elem.getConnectClusterId()); - vo.setConnectClusterName(clusterMap.get(elem.getConnectClusterId()).getName()); - vo.setConnectorName(elem.getConnectorName()); - - voList.add(vo); - }); - - return voList; - } - - public static List convert2MirrorMakerBasicVOList( - List clusterList, - List poList) { - Map clusterMap = new HashMap<>(); - clusterList.stream().forEach(elem -> clusterMap.put(elem.getId(), elem)); - - List voList = new ArrayList<>(); - poList.stream().filter(item -> clusterMap.containsKey(item.getConnectClusterId())).forEach(elem -> { - MirrorMakerBasicVO vo = new MirrorMakerBasicVO(); - vo.setConnectClusterId(elem.getConnectClusterId()); - vo.setConnectClusterName(clusterMap.get(elem.getConnectClusterId()).getName()); - vo.setConnectorName(elem.getConnectorName()); - - voList.add(vo); - }); - - return voList; - } - - public static ConnectClusterBasicCombineExistVO convert2ConnectClusterBasicCombineExistVO(ConnectCluster connectCluster) { - if (connectCluster == null) { - ConnectClusterBasicCombineExistVO combineExistVO = new ConnectClusterBasicCombineExistVO(); - combineExistVO.setExist(false); - - return combineExistVO; - } - - ConnectClusterBasicCombineExistVO combineExistVO = ConvertUtil.obj2Obj(connectCluster, ConnectClusterBasicCombineExistVO.class); - combineExistVO.setExist(true); - return combineExistVO; - } - - public static List convert2ClusterConnectorOverviewVOList(List clusterList, - List poList, - List metricsList) { - Map clusterMap = new HashMap<>(); - clusterList.stream().forEach(elem -> clusterMap.put(elem.getId(), elem)); - - Map metricMap = metricsList.stream().collect(Collectors.toMap(elem -> elem.getConnectClusterId() + "@" + elem.getConnectorName(), Function.identity())); - - List voList = new ArrayList<>(); - poList.stream().filter(item -> clusterMap.containsKey(item.getConnectClusterId())).forEach(elem -> { - ClusterConnectorOverviewVO vo = new ClusterConnectorOverviewVO(); - vo.setConnectClusterId(elem.getConnectClusterId()); - vo.setConnectClusterName(clusterMap.get(elem.getConnectClusterId()).getName()); - vo.setConnectorName(elem.getConnectorName()); - vo.setConnectorClassName(elem.getConnectorClassName()); - vo.setConnectorType(elem.getConnectorType()); - vo.setState(elem.getState()); - vo.setTaskCount(elem.getTaskCount()); - vo.setTopicNameList(CommonUtils.string2StrList(elem.getTopics())); - vo.setLatestMetrics(metricMap.getOrDefault(elem.getConnectClusterId() + "@" + elem.getConnectorName(), new ConnectorMetrics(elem.getConnectClusterId(), elem.getConnectorName()))); - voList.add(vo); - }); - - return voList; - } - - public static List supplyData2ClusterConnectorOverviewVOList(List voList, - List metricLineVOList) { - Map> metricLineMap = new HashMap<>(); - if (metricLineVOList != null) { - for (MetricMultiLinesVO metricMultiLinesVO : metricLineVOList) { - metricMultiLinesVO.getMetricLines() - .forEach(metricLineVO -> { - String key = metricLineVO.getName(); - List metricLineVOS = metricLineMap.getOrDefault(key, new ArrayList<>()); - metricLineVOS.add(metricLineVO); - metricLineMap.put(key, metricLineVOS); - }); - } - } - - voList.forEach(elem -> { - elem.setMetricLines(metricLineMap.get(genConnectorKey(elem.getConnectClusterId(), elem.getConnectorName()))); - }); - - return voList; - } - - public static KSConnector convert2KSConnector(Long kafkaClusterPhyId, Long connectClusterId, KSConnectorInfo connectorInfo, KSConnectorStateInfo stateInfo, List topicNameList) { - KSConnector ksConnector = new KSConnector(); - ksConnector.setKafkaClusterPhyId(kafkaClusterPhyId); - ksConnector.setConnectClusterId(connectClusterId); - ksConnector.setConnectorName(connectorInfo.getName()); - ksConnector.setConnectorClassName(connectorInfo.getConfig().getOrDefault(KafkaConnectConstant.CONNECTOR_CLASS_FILED_NAME, "")); - ksConnector.setConnectorType(connectorInfo.getType().name()); - ksConnector.setTopics(topicNameList != null? CommonUtils.strList2String(topicNameList): ""); - ksConnector.setTaskCount(connectorInfo.getTasks() != null? connectorInfo.getTasks().size(): 0); - ksConnector.setState(stateInfo != null? stateInfo.getConnector().getState(): ""); - - return ksConnector; - } - - private static String genConnectorKey(Long connectorId, String connectorName){ - return connectorId + "#" + connectorName; - } - - private ConnectConverter() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/GroupConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/GroupConverter.java deleted file mode 100644 index 131bd243..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/GroupConverter.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.group.Group; -import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopicMember; -import com.xiaojukeji.know.streaming.km.common.bean.po.group.GroupPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.group.GroupOverviewVO; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum; -import com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; - -import java.util.ArrayList; -import java.util.stream.Collectors; - -/** - * @author wyb - * @date 2022/10/10 - */ -public class GroupConverter { - - private GroupConverter() { - - } - - public static GroupOverviewVO convert2GroupOverviewVO(Group group) { - GroupOverviewVO vo = ConvertUtil.obj2Obj(group, GroupOverviewVO.class); - - vo.setState(group.getState().getState()); - vo.setTopicNameList(group.getTopicMembers().stream().map(elem -> elem.getTopicName()).collect(Collectors.toList())); - - return vo; - } - - public static Group convert2Group(GroupPO po) { - if (po == null) { - return null; - } - - Group group = ConvertUtil.obj2Obj(po, Group.class); - if (!ValidateUtils.isBlank(po.getTopicMembers())) { - group.setTopicMembers(ConvertUtil.str2ObjArrayByJson(po.getTopicMembers(), GroupTopicMember.class)); - } else { - group.setTopicMembers(new ArrayList<>()); - } - - group.setType(GroupTypeEnum.getTypeByCode(po.getType())); - group.setState(GroupStateEnum.getByState(po.getState())); - return group; - } - - public static GroupPO convert2GroupPO(Group group) { - if (group == null) { - return null; - } - - GroupPO po = ConvertUtil.obj2Obj(group, GroupPO.class); - po.setTopicMembers(ConvertUtil.obj2Json(group.getTopicMembers())); - po.setType(group.getType().getCode()); - po.setState(group.getState().getState()); - return po; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/HealthScoreVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/HealthScoreVOConverter.java deleted file mode 100644 index 5625c604..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/HealthScoreVOConverter.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthScoreResult; -import com.xiaojukeji.know.streaming.km.common.bean.vo.health.HealthCheckConfigVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.health.HealthScoreBaseResultVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.health.HealthScoreResultDetailVO; -import com.xiaojukeji.know.streaming.km.common.enums.config.ConfigGroupEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; - -import java.util.ArrayList; -import java.util.List; - -public class HealthScoreVOConverter { - private HealthScoreVOConverter() { - } - - public static List convert2HealthScoreResultDetailVOList(List healthScoreResultList) { - List voList = new ArrayList<>(); - for (HealthScoreResult healthScoreResult: healthScoreResultList) { - HealthScoreResultDetailVO vo = new HealthScoreResultDetailVO(); - vo.setDimension(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimension()); - vo.setDimensionName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getMessage()); - vo.setDimensionDisplayName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimensionDisplayName()); - vo.setConfigName(healthScoreResult.getCheckNameEnum().getConfigName()); - vo.setConfigItem(healthScoreResult.getCheckNameEnum().getConfigItem()); - vo.setConfigDesc(healthScoreResult.getCheckNameEnum().getConfigDesc()); - vo.setPassed(healthScoreResult.getPassed()); - vo.setCheckConfig(convert2HealthCheckConfigVO(ConfigGroupEnum.HEALTH.name(), healthScoreResult.getBaseConfig())); - - vo.setNotPassedResNameList(healthScoreResult.getNotPassedResNameList()); - vo.setCreateTime(healthScoreResult.getCreateTime()); - vo.setUpdateTime(healthScoreResult.getUpdateTime()); - voList.add(vo); - } - return voList; - } - - public static List convert2HealthScoreBaseResultVOList(List healthScoreResultList) { - List voList = new ArrayList<>(); - for (HealthScoreResult healthScoreResult: healthScoreResultList) { - HealthScoreBaseResultVO vo = new HealthScoreBaseResultVO(); - vo.setDimension(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimension()); - vo.setDimensionName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getMessage()); - vo.setConfigName(healthScoreResult.getCheckNameEnum().getConfigName()); - vo.setConfigDesc(healthScoreResult.getCheckNameEnum().getConfigDesc()); - vo.setPassed(healthScoreResult.getPassed()); - vo.setCheckConfig(convert2HealthCheckConfigVO(ConfigGroupEnum.HEALTH.name(), healthScoreResult.getBaseConfig())); - vo.setCreateTime(healthScoreResult.getCreateTime()); - vo.setUpdateTime(healthScoreResult.getUpdateTime()); - voList.add(vo); - } - return voList; - } - - public static List convert2HealthCheckConfigVOList(String groupName, List configList) { - List voList = new ArrayList<>(); - for (BaseClusterHealthConfig config: configList) { - voList.add(convert2HealthCheckConfigVO(groupName, config)); - } - return voList; - } - - public static HealthCheckConfigVO convert2HealthCheckConfigVO(String groupName, BaseClusterHealthConfig config) { - HealthCheckConfigVO vo = new HealthCheckConfigVO(); - vo.setDimensionCode(config.getCheckNameEnum().getDimensionEnum().getDimension()); - vo.setDimensionDisplayName(config.getCheckNameEnum().getDimensionEnum().getDimensionDisplayName()); - vo.setDimensionName(config.getCheckNameEnum().getDimensionEnum().name()); - vo.setConfigGroup(groupName); - vo.setConfigName(config.getCheckNameEnum().getConfigName()); - vo.setConfigItem(config.getCheckNameEnum().getConfigItem()); - vo.setConfigDesc(config.getCheckNameEnum().getConfigDesc()); - vo.setValue(ConvertUtil.obj2Json(config)); - return vo; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaAclConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaAclConverter.java deleted file mode 100644 index afa07702..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaAclConverter.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.acl.AclAtomDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.acl.ACLAtomParam; -import com.xiaojukeji.know.streaming.km.common.bean.po.KafkaAclPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.acl.AclBindingVO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import org.apache.kafka.common.acl.AclBinding; -import org.apache.kafka.common.acl.AclOperation; -import org.apache.kafka.common.acl.AclPermissionType; -import org.apache.kafka.common.resource.PatternType; -import org.apache.kafka.common.resource.ResourceType; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -public class KafkaAclConverter { - private KafkaAclConverter() { - } - - public static List convert2AclBindingVOList(List poList) { - List voList = new ArrayList<>(); - for (KafkaAclPO po: poList) { - voList.add(convert2AclBindingVO(po)); - } - return voList; - } - - public static AclBindingVO convert2AclBindingVO(KafkaAclPO po) { - AclBindingVO aclBindingVO = new AclBindingVO(); - aclBindingVO.setKafkaUser(po.getPrincipal()); - aclBindingVO.setAclOperation(po.getOperation()); - aclBindingVO.setAclPermissionType(po.getPermissionType()); - aclBindingVO.setAclClientHost(po.getHost()); - aclBindingVO.setResourceType(po.getResourceType()); - aclBindingVO.setResourceName(po.getResourceName()); - aclBindingVO.setResourcePatternType(po.getPatternType()); - return aclBindingVO; - } - - public static KafkaAclPO convert2KafkaAclPO(Long clusterPhyId, AclBinding aclBinding, Long updateTime) { - KafkaAclPO aclPO = new KafkaAclPO(); - aclPO.setClusterPhyId(clusterPhyId); - aclPO.setPrincipal(aclBinding.entry().principal()); - aclPO.setOperation(aclBinding.entry().operation().ordinal()); - aclPO.setPermissionType(aclBinding.entry().permissionType().ordinal()); - aclPO.setHost(aclBinding.entry().host()); - aclPO.setResourceType(aclBinding.pattern().resourceType().ordinal()); - aclPO.setResourceName(aclBinding.pattern().name()); - aclPO.setPatternType(aclBinding.pattern().patternType().ordinal()); - aclPO.initUniqueField(); - aclPO.setUpdateTime(new Date(updateTime)); - return aclPO; - } - - public static ACLAtomParam convert2ACLAtomParam(AclAtomDTO dto) { - ACLAtomParam aclAtomParam = new ACLAtomParam(); - aclAtomParam.setClusterPhyId(dto.getClusterId()); - aclAtomParam.setKafkaUserName(dto.getKafkaUser().startsWith(Constant.KAFKA_PRINCIPAL_PREFIX)? dto.getKafkaUser().substring(Constant.KAFKA_PRINCIPAL_PREFIX.length()): dto.getKafkaUser()); - aclAtomParam.setAclOperation(AclOperation.fromCode(dto.getAclOperation().byteValue())); - aclAtomParam.setAclPermissionType(AclPermissionType.fromCode(dto.getAclPermissionType().byteValue())); - aclAtomParam.setAclClientHost(dto.getAclClientHost()); - aclAtomParam.setResourceType(ResourceType.fromCode(dto.getResourceType().byteValue())); - aclAtomParam.setResourceName(dto.getResourceName()); - aclAtomParam.setResourcePatternType(PatternType.fromCode(dto.getResourcePatternType().byteValue())); - return aclAtomParam; - } - - public static KafkaAclPO convert2KafkaAclPO(ACLAtomParam aclAtomParam) { - KafkaAclPO po = new KafkaAclPO(); - po.setClusterPhyId(aclAtomParam.getClusterPhyId()); - if (!aclAtomParam.getKafkaUserName().startsWith(Constant.KAFKA_PRINCIPAL_PREFIX)) { - po.setPrincipal(Constant.KAFKA_PRINCIPAL_PREFIX + aclAtomParam.getKafkaUserName()); - } else { - po.setPrincipal(aclAtomParam.getKafkaUserName()); - } - - po.setOperation(aclAtomParam.getAclOperation().ordinal()); - po.setPermissionType(aclAtomParam.getAclPermissionType().ordinal()); - po.setHost(aclAtomParam.getAclClientHost()); - po.setResourceType(aclAtomParam.getResourceType().ordinal()); - po.setResourceName(aclAtomParam.getResourceName()); - po.setPatternType(aclAtomParam.getResourcePatternType().ordinal()); - po.initUniqueField(); - return po; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaConfigConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaConfigConverter.java deleted file mode 100644 index 8fbfdbd1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaConfigConverter.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaConfigDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.kafkaconfig.KafkaTopicDefaultConfig; -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import com.xiaojukeji.know.streaming.km.common.constant.kafka.AbstractTopicConfig; -import com.xiaojukeji.know.streaming.km.common.constant.kafka.TopicConfig0100; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import kafka.server.KafkaConfig; -import org.apache.kafka.clients.admin.Config; -import org.apache.kafka.clients.admin.ConfigEntry; -import org.apache.kafka.common.config.ConfigDef; -import org.apache.kafka.common.requests.DescribeConfigsResponse; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -public class KafkaConfigConverter { - private KafkaConfigConverter() { - } - - public static List convert2KafkaBrokerConfigDetailList(List configNameList, Properties properties) { - List configList = new ArrayList<>(); - for (String configName: configNameList) { - KafkaConfigDetail config = new KafkaConfigDetail(); - config.setName(configName); - config.setValue(properties.getProperty(configName)); - config.setConfigSource(DescribeConfigsResponse.ConfigSource.TOPIC_CONFIG.ordinal()); - - ConfigDef.ConfigKey configKey = KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP.get(configName); - if (configKey != null) { - config.setDocumentation(configKey.documentation); - config.setDefaultValue(configKey.defaultValue == null? "": configKey.defaultValue.toString()); - config.setOverride(config.getValue() != null && config.getValue().equals(configKey.defaultValue)); - config.setConfigType(configKey.type.ordinal()); - } else { - config.setDocumentation(null); - config.setDefaultValue(null); - config.setOverride(null); - config.setConfigType(null); - } - - config.setSensitive(null); - config.setReadOnly(null); - configList.add(config); - } - - return configList; - } - - public static List convert2KafkaTopicConfigDetailList(List configNameAndDocList, Properties presentConfig) { - List configList = new ArrayList<>(); - for (Properties nameAndDocProp: configNameAndDocList) { - String configName = nameAndDocProp.getProperty(AbstractTopicConfig.KAFKA_CONFIG_KEY_NAME); - if (ValidateUtils.isBlank(configName)) { - continue; - } - - KafkaConfigDetail config = new KafkaConfigDetail(); - - config.setName(configName); - config.setValue(presentConfig.getProperty(configName)); - config.setConfigSource(DescribeConfigsResponse.ConfigSource.TOPIC_CONFIG.ordinal()); - config.setDocumentation(nameAndDocProp.getProperty(AbstractTopicConfig.KAFKA_CONFIG_DOC_NAME)); - - ConfigDef.ConfigKey configKey = KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP.get(configName); - if (configKey != null) { - config.setOverride(config.getValue() != null && !config.getValue().equals(configKey.defaultValue)); - config.setConfigType(configKey.type.ordinal()); - } else { - config.setOverride(null); - config.setConfigType(null); - } - - config.setDefaultValue(null); - config.setSensitive(null); - config.setReadOnly(null); - - configList.add(config); - } - - return configList; - } - - public static List convert2KafkaConfigDetailList(Config config) { - List configList = new ArrayList<>(); - for (ConfigEntry configEntry: config.entries()) { - configList.add(convert2KafkaConfigDetail(configEntry, KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP)); - } - - return configList; - } - - private static KafkaConfigDetail convert2KafkaConfigDetail(ConfigEntry configEntry, Map configKeyMap) { - KafkaConfigDetail config = new KafkaConfigDetail(); - config.setName(configEntry.name()); - config.setValue(configEntry.value()); - config.setConfigSource(configEntry.source().ordinal()); - config.setSensitive(configEntry.isSensitive()); - config.setReadOnly(configEntry.isReadOnly()); - config.setConfigType(configEntry.type().ordinal()); - - ConfigDef.ConfigKey configKey = configKeyMap.get(configEntry.name()); - if (configKey != null) { - config.setDocumentation(configKey.documentation); - config.setDefaultValue(configKey.defaultValue == null? "": configKey.defaultValue.toString()); - } else { - config.setDocumentation(configEntry.documentation()); - config.setDocumentation(""); - } - - config.setOverride(!configEntry.isDefault()); - return config; - } - - public static List convert2KafkaTopicDefaultConfigList(List configNameAndDocList, Map defaultValueMap) { - List configList = new ArrayList<>(); - for (Properties nameAndDocProp: configNameAndDocList) { - String configName = nameAndDocProp.getProperty(AbstractTopicConfig.KAFKA_CONFIG_KEY_NAME); - if (ValidateUtils.isBlank(configName)) { - continue; - } - - KafkaTopicDefaultConfig config = new KafkaTopicDefaultConfig(); - config.setName(configName); - config.setDocumentation(nameAndDocProp.getProperty(AbstractTopicConfig.KAFKA_CONFIG_DOC_NAME)); - - ConfigDef.ConfigKey configKey = KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP.get(configName); - if (configKey != null) { - config.setConfigType(configKey.type.ordinal()); - } else { - config.setConfigType(null); - } - - // 设置默认值 - config.setDefaultValue( - defaultValueMap.getOrDefault(configName, defaultValueMap.getOrDefault("log." + configName, null)) - ); - - if (configName.equals(TopicConfig0100.RETENTION_MS_CONFIG)) { - if (defaultValueMap.containsKey(KafkaConfig.LogRetentionTimeMillisProp())) { - config.setDefaultValue(defaultValueMap.get(KafkaConfig.LogRetentionTimeMillisProp())); - } else if (defaultValueMap.containsKey(KafkaConfig.LogRetentionTimeMinutesProp())) { - Long val = ConvertUtil.string2Long(defaultValueMap.get(KafkaConfig.LogRetentionTimeMinutesProp())); - if (val != null && val.equals(-1L)) { - config.setDefaultValue("-1"); - } else if (val != null ) { - config.setDefaultValue(String.valueOf(val * 60L * 1000L)); - } - } else if (defaultValueMap.containsKey(KafkaConfig.LogRetentionTimeHoursProp())) { - Long val = ConvertUtil.string2Long(defaultValueMap.get(KafkaConfig.LogRetentionTimeHoursProp())); - if (val != null && val.equals(-1L)) { - config.setDefaultValue("-1"); - } else if (val != null ) { - config.setDefaultValue(String.valueOf(val * 60L * 60L * 1000L)); - } - } else { - config.setDefaultValue(null); - } - } - - config.setReadOnly(false); - configList.add(config); - } - - return configList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaUserVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaUserVOConverter.java deleted file mode 100644 index 7f04526f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/KafkaUserVOConverter.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkauser.KafkaUser; -import com.xiaojukeji.know.streaming.km.common.bean.po.KafkaUserPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser.KafkaUserTokenVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.kafkauser.KafkaUserVO; -import com.xiaojukeji.know.streaming.km.common.enums.cluster.ClusterAuthTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; - -import java.util.List; - -public class KafkaUserVOConverter { - private KafkaUserVOConverter() { - } - - public static KafkaUserTokenVO convert2KafkaUserTokenVO(KafkaUser kafkaUser, boolean decrypt, String rawToken) { - KafkaUserTokenVO vo = new KafkaUserTokenVO(); - vo.setClusterId(kafkaUser.getClusterPhyId()); - vo.setName(kafkaUser.getName()); - vo.setToken(decrypt? rawToken: kafkaUser.getCredentialString()); - vo.setAuthType(ClusterAuthTypeEnum.SASL_SCRAM.getAuthType()); - vo.setAuthName(ClusterAuthTypeEnum.SASL_SCRAM.getAuthName()); - vo.setDecrypt(decrypt); - return vo; - } - - public static List convert2KafkaUserVOList(Long clusterPhyId, List poList) { - List voList = ConvertUtil.list2List(poList, KafkaUserVO.class); - - voList.stream().forEach(elem -> { - elem.setClusterId(clusterPhyId); - elem.setAuthName(ClusterAuthTypeEnum.SASL_SCRAM.getAuthName()); - elem.setAuthType(ClusterAuthTypeEnum.SASL_SCRAM.getAuthType()); - }); - - return voList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/PartitionConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/PartitionConverter.java deleted file mode 100644 index f15726b4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/PartitionConverter.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition; -import org.apache.kafka.clients.admin.TopicDescription; -import org.apache.kafka.common.TopicPartitionInfo; - -import java.util.*; -import java.util.stream.Collectors; - -public class PartitionConverter { - private PartitionConverter() { - } - - public static List convert2PartitionList(Long clusterPhyId, TopicDescription description) { - List partitionList = new ArrayList<>(); - for (TopicPartitionInfo partitionInfo: description.partitions()) { - Partition partition = new Partition(); - partition.setClusterPhyId(clusterPhyId); - partition.setTopicName(description.name()); - partition.setPartitionId(partitionInfo.partition()); - partition.setLeaderBrokerId(partitionInfo.leader().id()); - partition.setInSyncReplicaList(partitionInfo.isr().stream().map(elem -> elem.id()).collect(Collectors.toList())); - partition.setAssignReplicaList(partitionInfo.replicas().stream().map(elem -> elem.id()).collect(Collectors.toList())); - - partitionList.add(partition); - } - - return partitionList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignConverter.java deleted file mode 100644 index 9d00febe..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignConverter.java +++ /dev/null @@ -1,351 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.plan.ReassignPartitionPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.reassign.plan.ReassignTopicPlanDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.Job; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.JobStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.content.JobCommunityReassignContent; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail.JobDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail.SubJobReplicaScalaDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.job.detail.SubJobReplicaMoveDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.ReassignResult; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.ReassignState; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.ReassignJobDetail; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.ReassignSubJobExtendData; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.ReplaceReassignJob; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.ReplaceReassignSubJob; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail.ReassignJobDetailDataGroupByPartition; -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.job.detail.ReassignJobDetailDataGroupByTopic; -import com.xiaojukeji.know.streaming.km.common.bean.po.reassign.ReassignJobPO; -import com.xiaojukeji.know.streaming.km.common.bean.po.reassign.ReassignSubJobPO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobPartitionDetailVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobReplicaMoveVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobReplicaScalaVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.job.sub.SubJobVO; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import com.xiaojukeji.know.streaming.km.common.enums.job.JobStatusEnum; -import com.xiaojukeji.know.streaming.km.common.enums.job.JobTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.kafka.KafkaReassignUtil; -import kafka.admin.ReassignPartitionsCommand; -import org.apache.kafka.common.TopicPartition; -import scala.jdk.javaapi.CollectionConverters; - -import java.util.*; -import java.util.stream.Collectors; - -public class ReassignConverter { - private ReassignConverter() { - } - - public static ReassignResult convert2ReassignmentResult(ReassignPartitionsCommand.VerifyAssignmentResult assignmentResult) { - Map reassignStateMap = new HashMap<>(); - CollectionConverters.asJava(assignmentResult.partStates()).entrySet().forEach(entry -> { - ReassignState state = new ReassignState(); - state.setCurrentReplicas(CollectionConverters.asJava(entry.getValue().currentReplicas()).stream().map(elem -> (Integer)elem).collect(Collectors.toList())); - state.setTargetReplicas(CollectionConverters.asJava(entry.getValue().targetReplicas()).stream().map(elem -> (Integer)elem).collect(Collectors.toList())); - state.setDone(entry.getValue().done()); - reassignStateMap.put(entry.getKey(), state); - }); - - ReassignResult reassignmentResult = new ReassignResult(); - reassignmentResult.setReassignStateMap(reassignStateMap); - reassignmentResult.setPartsOngoing(assignmentResult.partsOngoing()); - return reassignmentResult; - } - - public static ReplaceReassignJob convert2ReplaceReassignJob(JobCommunityReassignContent jobDTO) { - List subJobList = new ArrayList<>(); - for (ReassignTopicPlanDTO topicPlanDTO: jobDTO.getTopicPlanList()) { - for (ReassignPartitionPlanDTO partitionPlanDTO: topicPlanDTO.getPartitionPlanList()) { - ReplaceReassignSubJob subJob = new ReplaceReassignSubJob(); - - subJob.setClusterPhyId(partitionPlanDTO.getClusterId()); - subJob.setTopicName(partitionPlanDTO.getTopicName()); - subJob.setPartitionId(partitionPlanDTO.getPartitionId()); - subJob.setOriginalBrokerIdList(partitionPlanDTO.getOriginalBrokerIdList()); - subJob.setOriginalBrokerIdList(partitionPlanDTO.getOriginalBrokerIdList()); - subJob.setReassignBrokerIdList(partitionPlanDTO.getReassignBrokerIdList()); - - subJob.setOriginalRetentionTimeUnitMs(topicPlanDTO.getOriginalRetentionTimeUnitMs()); - subJob.setReassignRetentionTimeUnitMs(topicPlanDTO.getReassignRetentionTimeUnitMs()); - subJob.setOriginReplicaNum(topicPlanDTO.getPresentReplicaNum()); - subJob.setReassignReplicaNum(topicPlanDTO.getNewReplicaNum()); - - subJob.setReassignBrokerIdList(partitionPlanDTO.getReassignBrokerIdList()); - - subJobList.add(subJob); - } - } - - ReplaceReassignJob replaceReassignJob = new ReplaceReassignJob(); - replaceReassignJob.setClusterPhyId(jobDTO.getClusterId()); - replaceReassignJob.setThrottleUnitB(jobDTO.getThrottleUnitB()); - replaceReassignJob.setDescription(jobDTO.getDescription()); - replaceReassignJob.setSubJobList(subJobList); - - return replaceReassignJob; - } - - public static List convert2ReassignSubJobPOList(Long jobId, List subJobList) { - List poList = new ArrayList<>(); - - subJobList.forEach(elem -> { - ReassignSubJobPO po = ConvertUtil.obj2Obj(elem, ReassignSubJobPO.class); - - po.setJobId(jobId); - po.setOriginalBrokerIds(ConvertUtil.list2String(elem.getOriginalBrokerIdList(), Constant.COMMA)); - po.setReassignBrokerIds(ConvertUtil.list2String(elem.getReassignBrokerIdList(), Constant.COMMA)); - po.setStatus(JobStatusEnum.WAITING.getStatus()); - - ReassignSubJobExtendData extendData = new ReassignSubJobExtendData(); - extendData.setOriginalRetentionTimeUnitMs(elem.getOriginalRetentionTimeUnitMs()); - extendData.setReassignRetentionTimeUnitMs(elem.getReassignRetentionTimeUnitMs()); - extendData.setOriginReplicaNum(elem.getOriginReplicaNum()); - extendData.setReassignReplicaNum(elem.getReassignReplicaNum()); - po.setExtendData(ConvertUtil.obj2Json(extendData)); - - poList.add(po); - }); - - return poList; - } - - public static ReassignJobPO convert2ReassignJobPO(Long jobId, ReplaceReassignJob replaceReassignJob, String creator) { - ReassignJobPO po = new ReassignJobPO(); - - po.setId(jobId); - po.setClusterPhyId(replaceReassignJob.getClusterPhyId()); - po.setThrottleUnitByte(replaceReassignJob.getThrottleUnitB()); - po.setDescription(replaceReassignJob.getDescription()); - po.setReassignmentJson(convert2ReassignmentJson(replaceReassignJob)); - po.setCreator(creator); - po.setStatus(JobStatusEnum.WAITING.getStatus()); - - return po; - } - - public static String convert2ReassignmentJson(ReplaceReassignJob replaceReassignJob) { - Map> assignMap = new HashMap<>(); - for (ReplaceReassignSubJob subJob: replaceReassignJob.getSubJobList()) { - assignMap.put(new TopicPartition(subJob.getTopicName(), subJob.getPartitionId()), subJob.getReassignBrokerIdList()); - } - - return KafkaReassignUtil.formatAsReassignmentJson(assignMap); - } - - public static ReassignJobDetail convert2ReassignJobDetail(ReassignJobPO jobPO, List subJobPOList) { - // 按照Topic做聚合 - Map> topicJobPOMap = new HashMap<>(); - subJobPOList.forEach(elem -> { - topicJobPOMap.putIfAbsent(elem.getTopicName(), new ArrayList<>()); - topicJobPOMap.get(elem.getTopicName()).add(elem); - }); - - List reassignTopicDetailsList = new ArrayList<>(); - for (Map.Entry> entry: topicJobPOMap.entrySet()) { - reassignTopicDetailsList.add(convert2ReassignJobDetailDataGroupByTopic(entry.getValue())); - } - - ReassignJobDetail jobDetail = new ReassignJobDetail(); - jobDetail.setFinishedTime(jobPO.getFinishedTime()); - jobDetail.setThrottleUnitB(jobPO.getThrottleUnitByte()); - jobDetail.setDescription(jobPO.getDescription()); - jobDetail.setReassignTopicDetailsList(reassignTopicDetailsList); - return jobDetail; - } - - private static ReassignJobDetailDataGroupByTopic convert2ReassignJobDetailDataGroupByTopic(List subJobPOList) { - Set originalBrokerIdSet = new HashSet<>(); - Set reassignBrokerIdSet = new HashSet<>(); - - // 分区的信息 - List partitionDetailList = new ArrayList<>(); - for (ReassignSubJobPO subJobPO: subJobPOList) { - ReassignJobDetailDataGroupByPartition detail = new ReassignJobDetailDataGroupByPartition(); - detail.setPartitionId(subJobPO.getPartitionId()); - detail.setClusterPhyId(subJobPO.getClusterPhyId()); - detail.setTopicName(subJobPO.getTopicName()); - detail.setOriginalBrokerIdList(CommonUtils.string2IntList(subJobPO.getOriginalBrokerIds())); - detail.setReassignBrokerIdList(CommonUtils.string2IntList(subJobPO.getReassignBrokerIds())); - detail.setStatus(subJobPO.getStatus()); - detail.setOldReplicaNum(detail.getOriginalBrokerIdList().size()); - - ReassignSubJobExtendData extendData = ConvertUtil.str2ObjByJson(subJobPO.getExtendData(), ReassignSubJobExtendData.class); - if (extendData != null) { - detail.setNeedReassignLogSizeUnitB(extendData.getNeedReassignLogSizeUnitB()); - detail.setFinishedReassignLogSizeUnitB(extendData.getFinishedReassignLogSizeUnitB()); - detail.setRemainTimeUnitMs(extendData.getRemainTimeUnitMs()); - detail.setPresentReplicaNum(extendData.getOriginReplicaNum()); - detail.setNewReplicaNum(extendData.getReassignReplicaNum()); - detail.setOriginalRetentionTimeUnitMs(extendData.getOriginalRetentionTimeUnitMs()); - detail.setReassignRetentionTimeUnitMs(extendData.getReassignRetentionTimeUnitMs()); - } - - originalBrokerIdSet.addAll(detail.getOriginalBrokerIdList()); - reassignBrokerIdSet.addAll(detail.getReassignBrokerIdList()); - partitionDetailList.add(detail); - } - - // Topic的详细信息 - ReassignJobDetailDataGroupByTopic topicDetail = new ReassignJobDetailDataGroupByTopic(); - topicDetail.setPartitionIdList(partitionDetailList.stream().map(elem -> elem.getPartitionId()).collect(Collectors.toList())); - topicDetail.setReassignPartitionDetailsList(partitionDetailList); - topicDetail.setClusterPhyId(subJobPOList.get(0).getClusterPhyId()); - topicDetail.setTopicName(subJobPOList.get(0).getTopicName()); - - topicDetail.setOriginalBrokerIdList(new ArrayList<>(originalBrokerIdSet)); - topicDetail.setReassignBrokerIdList(new ArrayList<>(reassignBrokerIdSet)); - - List needSizeList = partitionDetailList - .stream() - .filter(elem -> elem.getNeedReassignLogSizeUnitB() != null) - .map(item -> item.getNeedReassignLogSizeUnitB()).collect(Collectors.toList()); - topicDetail.setNeedReassignLogSizeUnitB(needSizeList.isEmpty()? null: needSizeList.stream().reduce(Long::sum).get()); - - List finishedSizeList = partitionDetailList - .stream() - .filter(elem -> elem.getFinishedReassignLogSizeUnitB() != null) - .map(item -> item.getFinishedReassignLogSizeUnitB()).collect(Collectors.toList()); - topicDetail.setFinishedReassignLogSizeUnitB(finishedSizeList.isEmpty()? null: finishedSizeList.stream().reduce(Long::sum).get()); - - List remainList = partitionDetailList - .stream() - .filter(elem -> elem.getRemainTimeUnitMs() != null) - .map(item -> item.getRemainTimeUnitMs()).collect(Collectors.toList()); - topicDetail.setRemainTimeUnitMs(remainList.isEmpty()? null: remainList.stream().reduce(Long::max).get()); - - topicDetail.setPresentReplicaNum(partitionDetailList.get(0).getPresentReplicaNum()); - topicDetail.setNewReplicaNum(partitionDetailList.get(0).getNewReplicaNum()); - topicDetail.setOldReplicaNum(partitionDetailList.get(0).getOldReplicaNum()); - topicDetail.setOriginalRetentionTimeUnitMs(partitionDetailList.get(0).getOriginalRetentionTimeUnitMs()); - topicDetail.setReassignRetentionTimeUnitMs(partitionDetailList.get(0).getReassignRetentionTimeUnitMs()); - - topicDetail.setStatus( - new JobStatus( - partitionDetailList.stream().map(elem -> elem.getStatus()).collect(Collectors.toList()) - ).getStatus() - ); - - return topicDetail; - } - - public static List convert2SubJobPartitionDetailVOList(ReassignJobDetailDataGroupByTopic detailDataGroupByTopic) { - List voList = new ArrayList<>(); - for (ReassignJobDetailDataGroupByPartition jobDetailDataGroupByPartition: detailDataGroupByTopic.getReassignPartitionDetailsList()) { - SubJobPartitionDetailVO vo = new SubJobPartitionDetailVO(); - vo.setPartitionId(jobDetailDataGroupByPartition.getPartitionId()); - vo.setSourceBrokerIds(jobDetailDataGroupByPartition.getOriginalBrokerIdList()); - vo.setDesBrokerIds(jobDetailDataGroupByPartition.getReassignBrokerIdList()); - vo.setTotalSize(jobDetailDataGroupByPartition.getNeedReassignLogSizeUnitB() != null ? jobDetailDataGroupByPartition.getNeedReassignLogSizeUnitB().doubleValue(): null); - vo.setMovedSize(jobDetailDataGroupByPartition.getFinishedReassignLogSizeUnitB() != null ? jobDetailDataGroupByPartition.getFinishedReassignLogSizeUnitB().doubleValue(): null); - vo.setStatus(jobDetailDataGroupByPartition.getStatus()); - vo.setRemainTime(jobDetailDataGroupByPartition.getRemainTimeUnitMs()); - - voList.add(vo); - } - - return voList; - } - - public static JobDetail convert2JobDetail(Job job, ReassignJobDetail reassignJobDetail) { - JobDetail jobDetail = new JobDetail(); - jobDetail.setId(job.getId()); - jobDetail.setJobType(job.getJobType()); - jobDetail.setJobName(job.getJobName()); - jobDetail.setJobDesc(job.getJobDesc()); - jobDetail.setJobStatus(job.getJobStatus()); - jobDetail.setPlanTime(job.getPlanTime()); - jobDetail.setStartTime(job.getStartTime()); - - jobDetail.setEndTime(reassignJobDetail.getFinishedTime()); - jobDetail.setFlowLimit(reassignJobDetail.getThrottleUnitB().doubleValue()); - - JobStatus jobStatus = new JobStatus(reassignJobDetail.getReassignTopicDetailsList().stream().map(elem -> elem.getStatus()).collect(Collectors.toList())); - jobDetail.setTotal(jobStatus.getTotal()); - jobDetail.setSuccess(jobStatus.getSuccess()); - jobDetail.setFail(jobStatus.getFailed()); - jobDetail.setDoing(jobStatus.getDoing()); - - List subJobDetailList = new ArrayList<>(); - if (JobTypeEnum.TOPIC_REPLICA_MOVE.getType().equals(job.getJobType())) { - subJobDetailList.addAll( - ConvertUtil.list2List( - convert2SubJobReplicaMoveDetailList(reassignJobDetail.getReassignTopicDetailsList()), - SubJobReplicaMoveVO.class - ) - ); - } else if (JobTypeEnum.TOPIC_REPLICA_SCALA.getType().equals(job.getJobType())) { - subJobDetailList.addAll( - ConvertUtil.list2List( - convert2SubJobReplicaScalaDetailList(reassignJobDetail.getReassignTopicDetailsList()), - SubJobReplicaScalaVO.class - ) - ); - } - - jobDetail.setSubJobs(subJobDetailList); - - return jobDetail; - } - - private static List convert2SubJobReplicaScalaDetailList(List reassignTopicDetailsList) { - List detailList = new ArrayList<>(); - - for (ReassignJobDetailDataGroupByTopic detailDataGroupByTopic: reassignTopicDetailsList) { - SubJobReplicaScalaDetail detail = new SubJobReplicaScalaDetail(); - detail.setTopicName(detailDataGroupByTopic.getTopicName()); - detail.setOldReplicaNu(detailDataGroupByTopic.getOldReplicaNum()); - detail.setNewReplicaNu(detailDataGroupByTopic.getNewReplicaNum()); - detail.setSourceBrokers(detailDataGroupByTopic.getOriginalBrokerIdList()); - detail.setDesBrokers(detailDataGroupByTopic.getReassignBrokerIdList()); - detail.setStatus(detailDataGroupByTopic.getStatus()); - detail.setTotalSize(detailDataGroupByTopic.getNeedReassignLogSizeUnitB() == null? null: detailDataGroupByTopic.getNeedReassignLogSizeUnitB().doubleValue()); - detail.setMovedSize(detailDataGroupByTopic.getFinishedReassignLogSizeUnitB() == null? null: detailDataGroupByTopic.getFinishedReassignLogSizeUnitB().doubleValue()); - detail.setRemainTime(detailDataGroupByTopic.getRemainTimeUnitMs()); - - JobStatus jobStatus = new JobStatus(detailDataGroupByTopic.getReassignPartitionDetailsList().stream().map(elem -> elem.getStatus()).collect(Collectors.toList())); - detail.setTotal(jobStatus.getTotal()); - detail.setSuccess(jobStatus.getSuccess()); - detail.setFail(jobStatus.getFailed()); - detail.setDoing(jobStatus.getDoing()); - - detailList.add(detail); - } - - return detailList; - } - - private static List convert2SubJobReplicaMoveDetailList(List reassignTopicDetailsList) { - List detailList = new ArrayList<>(); - - for (ReassignJobDetailDataGroupByTopic detailDataGroupByTopic: reassignTopicDetailsList) { - SubJobReplicaMoveDetail detail = new SubJobReplicaMoveDetail(); - detail.setTopicName(detailDataGroupByTopic.getTopicName()); - detail.setPartitions(detailDataGroupByTopic.getPartitionIdList()); - detail.setCurrentTimeSpent(detailDataGroupByTopic.getOriginalRetentionTimeUnitMs()); - detail.setMoveTimeSpent(detailDataGroupByTopic.getReassignRetentionTimeUnitMs()); - detail.setSourceBrokers(detailDataGroupByTopic.getOriginalBrokerIdList()); - detail.setDesBrokers(detailDataGroupByTopic.getReassignBrokerIdList()); - detail.setStatus(detailDataGroupByTopic.getStatus()); - if (detailDataGroupByTopic.getNeedReassignLogSizeUnitB() != null) { - detail.setTotalSize(detailDataGroupByTopic.getNeedReassignLogSizeUnitB().doubleValue()); - } - if (detailDataGroupByTopic.getFinishedReassignLogSizeUnitB() != null) { - detail.setMovedSize(detailDataGroupByTopic.getFinishedReassignLogSizeUnitB().doubleValue()); - } - detail.setRemainTime(detailDataGroupByTopic.getRemainTimeUnitMs()); - - JobStatus jobStatus = new JobStatus(detailDataGroupByTopic.getReassignPartitionDetailsList().stream().map(elem -> elem.getStatus()).collect(Collectors.toList())); - detail.setTotal(jobStatus.getTotal()); - detail.setSuccess(jobStatus.getSuccess()); - detail.setFail(jobStatus.getFailed()); - detail.setDoing(jobStatus.getDoing()); - - detailList.add(detail); - } - - return detailList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignVOConverter.java deleted file mode 100644 index 68200376..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ReassignVOConverter.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.reassign.ReassignPlan; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan.ReassignPartitionPlanVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.reassign.plan.ReassignTopicPlanVO; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class ReassignVOConverter { - private ReassignVOConverter() { - } - - public static ReassignTopicPlanVO convert2ReassignTopicPlanVO(ReassignPlan reassignmentPlan) { - Set currentBrokerIdSet = new HashSet<>(); - Set reassignBrokerIdSet = new HashSet<>(); - List partitionPlanList = new ArrayList<>(); - - reassignmentPlan.getReAssignPlanMap().entrySet().stream().forEach(entry -> { - reassignBrokerIdSet.addAll(entry.getValue()); - - List currentBrokerIdList = reassignmentPlan.getCurrentAssignMap().get(entry.getKey()); - currentBrokerIdSet.addAll(currentBrokerIdList); - - // 构造分区迁移plan - ReassignPartitionPlanVO vo = new ReassignPartitionPlanVO(); - vo.setClusterId(reassignmentPlan.getClusterPhyId()); - vo.setTopicName(entry.getKey().topic()); - vo.setPartitionId(entry.getKey().partition()); - vo.setCurrentBrokerIdList(currentBrokerIdList); - vo.setReassignBrokerIdList(entry.getValue()); - partitionPlanList.add(vo); - }); - - // 返回结果 - ReassignTopicPlanVO vo = new ReassignTopicPlanVO(); - - vo.setClusterId(reassignmentPlan.getClusterPhyId()); - vo.setTopicName(reassignmentPlan.getTopicName()); - vo.setCurrentBrokerIdList(new ArrayList<>(currentBrokerIdSet)); - vo.setReassignBrokerIdList(new ArrayList<>(reassignBrokerIdSet)); - vo.setPartitionPlanList(partitionPlanList); - - return vo; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicConverter.java deleted file mode 100644 index 9ad4ed46..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicConverter.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.alibaba.fastjson.TypeReference; -import com.xiaojukeji.know.streaming.km.common.bean.entity.param.topic.TopicCreateParam; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.po.topic.TopicPO; -import com.xiaojukeji.know.streaming.km.common.enums.topic.TopicTypeEnum; -import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import org.apache.kafka.clients.admin.TopicDescription; -import org.apache.kafka.common.TopicPartitionInfo; -import org.apache.kafka.common.config.TopicConfig; - -import java.util.*; -import java.util.stream.Collectors; - -public class TopicConverter { - private TopicConverter() { - } - - public static Topic convert2Topic(TopicPO po) { - if (po == null) { - return null; - } - - Topic topic = ConvertUtil.obj2Obj(po, Topic.class); - - topic.setBrokerIdSet(new HashSet<>(CommonUtils.string2IntList(po.getBrokerIds()))); - topic.setCreateTime(po.getCreateTime().getTime()); - topic.setUpdateTime(po.getUpdateTime().getTime()); - - Map> partitionMap = ConvertUtil.str2ObjByJson( po.getPartitionMap(), new TypeReference>>(){} ); - if (partitionMap != null) { - topic.setPartitionMap(partitionMap); - } else { - topic.setPartitionMap(new HashMap<>()); - } - - return topic; - } - - public static List convert2TopicList(List poList) { - if (poList == null) { - return new ArrayList<>(); - } - - List topicList = new ArrayList<>(); - for (TopicPO po: poList) { - topicList.add(convert2Topic(po)); - } - return topicList; - } - - /** - * 仅合并Topic的元信息部分,业务信息和配置信息部分不合并 - */ - public static TopicPO mergeAndOnlyMetadata2NewTopicPO(Topic newTopicData, TopicPO oldDBTopicPO) { - TopicPO newTopicPO = new TopicPO(); - newTopicPO.setId(oldDBTopicPO != null? oldDBTopicPO.getId(): null); - - newTopicPO.setClusterPhyId(newTopicData.getClusterPhyId()); - newTopicPO.setTopicName(newTopicData.getTopicName()); - newTopicPO.setPartitionNum(newTopicData.getPartitionNum()); - newTopicPO.setReplicaNum(newTopicData.getReplicaNum()); - newTopicPO.setBrokerIds(CommonUtils.intList2String(new ArrayList<>(newTopicData.getBrokerIdSet()))); - newTopicPO.setType(newTopicData.getType()); - newTopicPO.setPartitionMap(ConvertUtil.obj2Json(newTopicData.getPartitionMap())); - - if (newTopicData.getCreateTime() != null) { - newTopicPO.setCreateTime(new Date(newTopicData.getCreateTime())); - newTopicPO.setUpdateTime(new Date(newTopicData.getUpdateTime())); - } else { - newTopicPO.setCreateTime(oldDBTopicPO != null? oldDBTopicPO.getCreateTime(): new Date()); - newTopicPO.setUpdateTime(oldDBTopicPO != null? oldDBTopicPO.getUpdateTime(): new Date()); - } - - newTopicPO.setDescription(oldDBTopicPO != null? oldDBTopicPO.getDescription(): null); - newTopicPO.setRetentionMs(oldDBTopicPO != null? oldDBTopicPO.getRetentionMs(): null); - return newTopicPO; - } - - public static TopicPO convert2TopicPOAndIgnoreTime(TopicCreateParam createParam) { - if (createParam == null) { - return null; - } - - TopicPO po = new TopicPO(); - - // 元信息 - po.setClusterPhyId(createParam.getClusterPhyId()); - po.setTopicName(createParam.getTopicName()); - po.setPartitionNum(createParam.getAssignmentMap().size()); - po.setReplicaNum(createParam.getReplicaNum()); - po.setBrokerIds(CommonUtils.intList2String(new ArrayList<>(createParam.getBrokerIdSet()))); - po.setPartitionMap(ConvertUtil.obj2Json(createParam.getAssignmentMap())); - po.setType(TopicTypeEnum.getTopicTypeCode(createParam.getTopicName())); - - // 配置 - Long retentionMs = ConvertUtil.string2Long(createParam.getConfig().get(TopicConfig.RETENTION_MS_CONFIG)); - po.setRetentionMs(retentionMs == null? -1L: retentionMs); - - // 业务信息 - po.setDescription(createParam.getDescription()); - - return po; - } - - public static Topic convert2Topic(Long clusterPhyId, TopicDescription description) { - Map> partitionMap = new HashMap<>(); - Set brokerIdSet = new HashSet<>(); - - for (TopicPartitionInfo partitionInfo: description.partitions()) { - partitionMap.put(partitionInfo.partition(), partitionInfo.replicas().stream().map(elem -> elem.id()).collect(Collectors.toList())); - brokerIdSet.addAll(partitionMap.get(partitionInfo.partition())); - } - - Topic metadata = new Topic(); - metadata.setClusterPhyId(clusterPhyId); - metadata.setTopicName(description.name()); - metadata.setPartitionMap(partitionMap); - metadata.setBrokerIdSet(brokerIdSet); - metadata.setReplicaNum(description.partitions().get(0).replicas().size()); - metadata.setPartitionNum(partitionMap.size()); - metadata.setType(TopicTypeEnum.getTopicTypeCode(description.name())); - metadata.setUpdateTime(null); - metadata.setCreateTime(null); - return metadata; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicVOConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicVOConverter.java deleted file mode 100644 index 14afdd9f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/TopicVOConverter.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics; -import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition; -import com.xiaojukeji.know.streaming.km.common.bean.entity.record.RecordHeaderKS; -import com.xiaojukeji.know.streaming.km.common.bean.entity.topic.Topic; -import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.res.ClusterPhyTopicsOverviewVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metadata.TopicMetadataCombineExistVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metadata.TopicMetadataVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicRecordVO; -import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition.TopicPartitionVO; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.apache.kafka.common.header.Header; - -import java.nio.charset.StandardCharsets; -import java.util.*; - -public class TopicVOConverter { - private TopicVOConverter() { - } - - public static TopicMetadataCombineExistVO convert2TopicMetadataCombineExistVO(String topicName, Topic topic) { - TopicMetadataCombineExistVO vo = new TopicMetadataCombineExistVO(); - vo.setTopicName(topicName); - - if (topic == null) { - vo.setExist(false); - return vo; - } - - vo.setPartitionIdList(new ArrayList<>(topic.getPartitionMap().keySet())); - vo.setReplicaNum(topic.getReplicaNum()); - vo.setPartitionNum(topic.getPartitionNum()); - vo.setType(topic.getType()); - vo.setExist(true); - return vo; - } - - public static TopicRecordVO convert2TopicRecordVO(String topicName, ConsumerRecord consumerRecord) { - TopicRecordVO vo = new TopicRecordVO(); - vo.setTopicName(topicName); - vo.setPartitionId(consumerRecord.partition()); - vo.setOffset(consumerRecord.offset()); - vo.setTimestampUnitMs(consumerRecord.timestamp()); - vo.setKey(consumerRecord.key()); - vo.setValue(consumerRecord.value()); - vo.setHeaderList(new ArrayList<>()); - for (Header header : consumerRecord.headers().toArray()) { - vo.getHeaderList().add(new RecordHeaderKS(header.key(), new String(header.value(), StandardCharsets.UTF_8))); - } - return vo; - } - - public static List convert2TopicMetadataVOList(List topicList) { - if (ValidateUtils.isEmptyList(topicList)) { - return new ArrayList<>(); - } - - List voList = new ArrayList<>(); - for (Topic topic: topicList) { - voList.add(convert2TopicMetadataVO(topic)); - } - return voList; - } - - public static TopicMetadataVO convert2TopicMetadataVO(Topic topic) { - TopicMetadataVO vo = new TopicMetadataVO(); - vo.setTopicName(topic.getTopicName()); - vo.setPartitionNum(topic.getPartitionNum()); - vo.setPartitionIdList(new ArrayList<>(topic.getPartitionMap().keySet())); - vo.setReplicaNum(topic.getReplicaNum()); - vo.setType(topic.getType()); - return vo; - } - - public static List convert2ClusterPhyTopicsOverviewVOList(List topicList, Map metricsMap, Set haTopicNameSet) { - List voList = new ArrayList<>(); - for (Topic topic: topicList) { - ClusterPhyTopicsOverviewVO vo = new ClusterPhyTopicsOverviewVO(); - - vo.setTopicName(topic.getTopicName()); - vo.setPartitionNum(topic.getPartitionNum()); - vo.setRetentionTimeUnitMs(topic.getRetentionMs() < 0? null: topic.getRetentionMs()); - vo.setReplicaNum(topic.getReplicaNum()); - vo.setDescription(topic.getDescription()); - vo.setCreateTime(new Date(topic.getCreateTime())); - vo.setUpdateTime(new Date(topic.getUpdateTime())); - - vo.setLatestMetrics(metricsMap.getOrDefault(topic.getTopicName(), new TopicMetrics(topic.getTopicName(), topic.getClusterPhyId()))); - - vo.setInMirror(haTopicNameSet.contains(topic.getTopicName())); - voList.add(vo); - } - - return voList; - } - - public static List supplyMetricLines(List voList, List metricMultiLinesVOList) { - // > - Map> metricLineMap = new HashMap<>(); - if (metricMultiLinesVOList == null) { - metricMultiLinesVOList = new ArrayList<>(); - } - for (MetricMultiLinesVO multiLinesVO: metricMultiLinesVOList) { - if (multiLinesVO.getMetricLines() == null) { - continue; - } - for (MetricLineVO metricLineVO: multiLinesVO.getMetricLines()) { - metricLineMap.putIfAbsent(metricLineVO.getName(), new ArrayList<>()); - metricLineMap.get(metricLineVO.getName()).add(metricLineVO); - } - } - - for (ClusterPhyTopicsOverviewVO vo: voList) { - vo.setMetricLines(metricLineMap.getOrDefault(vo.getTopicName(), new ArrayList<>())); - } - - return voList; - } - - public static TopicPartitionVO convert2TopicPartitionVO(Partition partition, PartitionMetrics metrics) { - TopicPartitionVO vo = new TopicPartitionVO(); - vo.setTopicName(partition.getTopicName()); - vo.setPartitionId(partition.getPartitionId()); - vo.setLatestMetrics(metrics); - vo.setLeaderBrokerId(partition.getLeaderBrokerId()); - vo.setAssignReplicas(partition.getAssignReplicaList()); - vo.setInSyncReplicas(partition.getInSyncReplicaList()); - return vo; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ZnodeConverter.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ZnodeConverter.java deleted file mode 100644 index b7f8e97c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/converter/ZnodeConverter.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.converter; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.Znode; -import com.xiaojukeji.know.streaming.km.common.utils.Tuple; -import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.ZookeeperUtils; -import org.apache.zookeeper.data.Stat; - -public class ZnodeConverter { - ZnodeConverter(){ - - } - - public static Znode convert2Znode(ClusterPhy clusterPhy, Tuple dataAndStat, String path) { - Znode znode = new Znode(); - znode.setStat(dataAndStat.getV2()); - znode.setData(dataAndStat.getV1() == null ? null : new String(dataAndStat.getV1())); - znode.setName(path.substring(path.lastIndexOf('/') + 1)); - znode.setNamespace(ZookeeperUtils.getNamespace(clusterPhy.getZookeeper())); - - return znode; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/AggTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/AggTypeEnum.java deleted file mode 100644 index 78cfaa45..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/AggTypeEnum.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums; - -import lombok.Getter; - -/** - * 聚合方式 - */ -@Getter -public enum AggTypeEnum { - AVG("avg"), - - MAX("max"), - - MIN("min"), - - SUM("sum"), - - ; - - private final String aggType; - - AggTypeEnum(String aggType) { - this.aggType = aggType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/KafkaConfigTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/KafkaConfigTypeEnum.java deleted file mode 100644 index c792768c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/KafkaConfigTypeEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums; - -import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum; -import kafka.server.ConfigType; -import lombok.Getter; - -@Getter -public enum KafkaConfigTypeEnum { - UNKNOWN(-1, "unknown"), - - TOPIC(0, ConfigType.Topic()), - - CLIENT(1, ConfigType.Client()), - - USER(2, ConfigType.User()), - - BROKER(3, ConfigType.Broker()), - - IP(4, ConfigType.Ip()), - - ; - - private final int configCode; - - private final String configName; - - KafkaConfigTypeEnum(int configCode, String configName) { - this.configCode = configCode; - this.configName = configName; - } - - public static ModuleEnum getByConfigName(String configName) { - if (TOPIC.configName.equals(configName)) { - return ModuleEnum.KAFKA_TOPIC_CONFIG; - } - - if (BROKER.configName.equals(configName)) { - return ModuleEnum.KAFKA_BROKER_CONFIG; - } - - if (USER.configName.equals(configName)) { - return ModuleEnum.KAFKA_USER; - } - - return ModuleEnum.UNKNOWN; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/OffsetTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/OffsetTypeEnum.java deleted file mode 100644 index 6bdc8b80..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/OffsetTypeEnum.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums; - -import lombok.Getter; - -/** - * offset类型 - * @author zengqiao - * @date 19/4/8 - */ -@Getter -public enum OffsetTypeEnum { - LATEST(0, "最新"), - - EARLIEST(1, "最旧"), - - PRECISE_TIMESTAMP(2, "指定时间"), - - PRECISE_OFFSET(3, "指定位置"), - - ; - - private final int resetType; - - private final String message; - - OffsetTypeEnum(int resetType, String message) { - this.resetType = resetType; - this.message = message; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/SortTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/SortTypeEnum.java deleted file mode 100644 index 920e4af7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/SortTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums; - -public enum SortTypeEnum { - ASC("asc"), - - DESC("desc"), - - ; - - private final String sortType; - - SortTypeEnum(String sortType) { - this.sortType = sortType; - } - - public String getSortType() { - return sortType; - } - - public static SortTypeEnum getByTypeName(String typeName) { - for (SortTypeEnum typeEnum: SortTypeEnum.values()) { - if (typeName.equals(typeEnum.getSortType())) { - return typeEnum; - } - } - - return null; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterAuthTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterAuthTypeEnum.java deleted file mode 100644 index 9c47cbec..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterAuthTypeEnum.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.cluster; - -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import lombok.Getter; - -/** - * 集群运行状态 - * @author zengqiao - * @date 22/03/08 - */ -@Getter -public enum ClusterAuthTypeEnum { - UNKNOWN(-1, "未知"), - - NO_AUTH(0, "无认证"), - - SASL(1000, "SASL"), - - SASL_GSSAPI(1100, "SASL-Gssapi"), - - SASL_PLAIN(1200, "SASL-PLAIN"), - - SASL_SCRAM(1300, "SASL-SCRAM"), - SASL_SCRAM_256(1301, "SASL-SCRAM-256"), - SASL_SCRAM_512(1302, "SASL-SCRAM-512"), - - SASL_OAUTH_BEARER(1400, "OAuth 2.0模式"), - - ; - - private final int authType; - - private final String authName; - - ClusterAuthTypeEnum(int authType, String authName) { - this.authType = authType; - this.authName = authName; - } - - public static ClusterAuthTypeEnum getAuthBySaslMechanism(String saslMechanismName) { - if (ValidateUtils.isBlank(saslMechanismName)) { - return NO_AUTH; - } - - if ("PLAIN".equals(saslMechanismName)) { - return SASL_PLAIN; - } - - if ("SCRAM-SHA-256".equals(saslMechanismName)) { - return SASL_SCRAM_256; - } - - if ("SCRAM-SHA-512".equals(saslMechanismName)) { - return SASL_SCRAM_512; - } - - return UNKNOWN; - } - - public static boolean enableAuth(Integer authType) { - return !(UNKNOWN.getAuthType() == authType || NO_AUTH.getAuthType() == authType); - } - - public static boolean isScram(Integer authType) { - if (authType == null) { - return false; - } - - return authType.equals(SASL_SCRAM.getAuthType()) - || authType.equals(SASL_SCRAM_256.getAuthType()) - || authType.equals(SASL_SCRAM_512.getAuthType()); - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterRunStateEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterRunStateEnum.java deleted file mode 100644 index 3fcdb89a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/cluster/ClusterRunStateEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.cluster; - -import lombok.Getter; - -/** - * 集群运行状态 - * @author zengqiao - * @date 22/03/08 - */ -@Getter -public enum ClusterRunStateEnum { - DEAD(0, "未监控"), - - RUN_ZK(1, "ZK模式"), - - RUN_ZK_BUT_IGNORE_ZK(11, "ZK模式,但忽略ZK"), - - RUN_RAFT(2, "Raft模式") - ; - - private final int runState; - - private final String message; - - ClusterRunStateEnum(int runState, String message) { - this.runState = runState; - this.message = message; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigDiffTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigDiffTypeEnum.java deleted file mode 100644 index 55400279..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigDiffTypeEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.config; - -/** - * 配置差异类型 - */ -public enum ConfigDiffTypeEnum { - UNKNOWN(-1, "未知"), - - EQUAL(0, "相同"), - - UN_EQUAL(1, "不同"), - - ALONE_POSSESS(2, "独有"), - - ; - - ConfigDiffTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public static ConfigDiffTypeEnum valueOf(Integer code) { - if (code == null) { - return ConfigDiffTypeEnum.UNKNOWN; - } - for (ConfigDiffTypeEnum state : ConfigDiffTypeEnum.values()) { - if (state.getCode() == code) { - return state; - } - } - - return ConfigDiffTypeEnum.UNKNOWN; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigGroupEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigGroupEnum.java deleted file mode 100644 index 4c9979f1..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigGroupEnum.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.config; - -/** - * 操作记录模块枚举 - * - * Created by d06679 on 2017/7/14. - */ -public enum ConfigGroupEnum { - /**集群*/ - CLUSTER(1, "集群"), - - TEMPLATE(2, "模板"), - - RESOURCE(3, "资源"), - - BROKER_SPEC(4, "集群规格"), - - CLUSTER_BALANCE_INTERVAL(5, "集群平衡区间"), - - HEALTH(10, "健康检查及健康分"), - - UNKNOWN(-1, "未知"); - - ConfigGroupEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public static ConfigGroupEnum valueOf(Integer code) { - if (code == null) { - return ConfigGroupEnum.UNKNOWN; - } - for (ConfigGroupEnum state : ConfigGroupEnum.values()) { - if (state.getCode() == code) { - return state; - } - } - - return ConfigGroupEnum.UNKNOWN; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigStatusEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigStatusEnum.java deleted file mode 100644 index 8ef407ce..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/config/ConfigStatusEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.config; - -/** - * 操作记录模块枚举 - * - * Created by d06679 on 2017/7/14. - */ -public enum ConfigStatusEnum { - /**正常*/ - NORMAL(1, "正常"), - - DISABLE(2, "禁用"), - - DELETED(-1, "删除"); - - ConfigStatusEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public static ConfigStatusEnum valueOf(Integer code) { - if (code == null) { - return null; - } - for (ConfigStatusEnum state : ConfigStatusEnum.values()) { - if (state.getCode() == code) { - return state; - } - } - - return null; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectActionEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectActionEnum.java deleted file mode 100644 index 83ee2505..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectActionEnum.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.connect; - -public enum ConnectActionEnum { - /** - * - */ - - STOP(2, "stop"), - - RESUME(3,"resume"), - - RESTART(4,"restart"), - - UNKNOWN(-1, "unknown"); - - ConnectActionEnum(int status, String value) { - this.status = status; - this.value = value; - } - - private final int status; - - private final String value; - - public int getStatus() { - return status; - } - - public String getValue() { - return value; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectorTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectorTypeEnum.java deleted file mode 100644 index ce275b62..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/connect/ConnectorTypeEnum.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.connect; - -/** - * @author wyb - * @date 2022/11/25 - */ -public enum ConnectorTypeEnum { - - - UNKNOWN(-1, "unknown"), - SOURCE(1, "source"), - SINK(2, "sink"); - - private final int code; - - private final String value; - - ConnectorTypeEnum(int code, String value) { - this.code = code; - this.value = value; - } - - public static ConnectorTypeEnum getByName(String name) { - for (ConnectorTypeEnum typeEnum : ConnectorTypeEnum.values()) { - if (typeEnum.name().equals(name)) { - return typeEnum; - } - } - return UNKNOWN; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupStateEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupStateEnum.java deleted file mode 100644 index f28843a9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupStateEnum.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.group; - -import lombok.Getter; -import org.apache.kafka.common.ConsumerGroupState; - -import java.util.Arrays; -import java.util.List; - -@Getter -public enum GroupStateEnum { - UNKNOWN(-1, "Unknown", Arrays.asList(ConsumerGroupState.UNKNOWN)), - - PREPARING_RE_BALANCE(0, "ReBalance", Arrays.asList(ConsumerGroupState.PREPARING_REBALANCE, ConsumerGroupState.COMPLETING_REBALANCE)), - - ACTIVE(1, "Active", Arrays.asList(ConsumerGroupState.STABLE)), - - DEAD(2, "Dead", Arrays.asList(ConsumerGroupState.DEAD)), - - EMPTY(3, "Empty", Arrays.asList(ConsumerGroupState.EMPTY)), - - ; - - private final Integer code; - - private final String state; - - private final List rawStatList; - - GroupStateEnum(Integer code, String state, List rawStatList) { - this.code = code; - this.state = state; - this.rawStatList = rawStatList; - } - - public static GroupStateEnum getByRawState(ConsumerGroupState rawGroupState) { - if (rawGroupState == null) { - return GroupStateEnum.UNKNOWN; - } - - for (GroupStateEnum groupStateEnum: GroupStateEnum.values()) { - if (groupStateEnum.rawStatList.contains(rawGroupState)) { - return groupStateEnum; - } - } - - return GroupStateEnum.UNKNOWN; - } - - public static GroupStateEnum getByState(String state) { - if (state == null) { - return GroupStateEnum.UNKNOWN; - } - - for (GroupStateEnum groupStateEnum: GroupStateEnum.values()) { - if (groupStateEnum.getState().contains(state)) { - return groupStateEnum; - } - } - - return GroupStateEnum.UNKNOWN; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupTypeEnum.java deleted file mode 100644 index e4909dae..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/group/GroupTypeEnum.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.group; - -import lombok.Getter; - - -/** - * @author wyb - * @date 2022/10/11 - */ -@Getter -public enum GroupTypeEnum { - - UNKNOWN(-1, "Unknown"), - - CONSUMER(0, "Consumer客户端的消费组"), - - CONNECTOR(1, "Connector的消费组"), - - CONNECT_CLUSTER(2, "Connect集群"); - - private final Integer code; - - private final String msg; - - public static final String CONNECTOR_PROTOCOL_TYPE = "consumer"; - - public static final String CONNECT_CLUSTER_PROTOCOL_TYPE = "connect"; - - GroupTypeEnum(Integer code, String msg) { - this.code = code; - this.msg = msg; - } - - public static GroupTypeEnum getTypeByCode(Integer code) { - if (code == null) return UNKNOWN; - for (GroupTypeEnum groupTypeEnum : GroupTypeEnum.values()) { - if (groupTypeEnum.code.equals(code)) { - return groupTypeEnum; - } - } - return UNKNOWN; - } - - public static GroupTypeEnum getTypeByProtocolType(String protocolType) { - if (protocolType == null) { - return UNKNOWN; - } - if (protocolType.isEmpty()) { - return CONSUMER; - } else if (CONNECTOR_PROTOCOL_TYPE.equals(protocolType)) { - return CONNECTOR; - } else if (CONNECT_CLUSTER_PROTOCOL_TYPE.equals(protocolType)) { - return CONNECT_CLUSTER; - } else { - return UNKNOWN; - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/ha/HaResTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/ha/HaResTypeEnum.java deleted file mode 100644 index 1821f7ab..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/ha/HaResTypeEnum.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.ha; - -import lombok.Getter; - -/** - * @author zengqiao - * @date 20/7/28 - */ -@Getter -public enum HaResTypeEnum { - CLUSTER(0, "Cluster"), - - MIRROR_TOPIC(1, "镜像Topic"), - - ; - - private final int code; - - private final String msg; - - HaResTypeEnum(int code, String msg) { - this.code = code; - this.msg = msg; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckDimensionEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckDimensionEnum.java deleted file mode 100644 index 5312f57a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckDimensionEnum.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.health; - -import lombok.Getter; - -/** - * @author zengqiao - * @date 22/03/01 - */ -@Getter -public enum HealthCheckDimensionEnum { - UNKNOWN(-1, "未知", "未知"), - - CLUSTER(0, "Cluster", "Cluster"), - - BROKER(1, "Broker", "Broker"), - - TOPIC(2, "Topic", "Topic"), - - GROUP(3, "Group", "Group"), - - ZOOKEEPER(4, "Zookeeper", "Zookeeper"), - - CONNECT_CLUSTER(5, "ConnectCluster", "Connect"), - - CONNECTOR(6, "Connector", "Connect"), - - MIRROR_MAKER(7,"MirrorMaker","MirrorMaker"), - - MAX_VAL(100, "所有的dimension的值需要小于MAX_VAL", "Ignore") - - ; - - private final int dimension; - - private final String message; - - private final String dimensionDisplayName; - - HealthCheckDimensionEnum(int dimension, String message, String dimensionDisplayName) { - this.dimension = dimension; - this.message = message; - this.dimensionDisplayName=dimensionDisplayName; - } - - public static HealthCheckDimensionEnum getByCode(Integer dimension) { - if (dimension == null) { - return UNKNOWN; - } - - for (HealthCheckDimensionEnum dimensionEnum: HealthCheckDimensionEnum.values()) { - if (dimensionEnum.getDimension() == dimension) { - return dimensionEnum; - } - } - - return UNKNOWN; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckNameEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckNameEnum.java deleted file mode 100644 index 20ddccc3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthCheckNameEnum.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.health; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.HealthAmountRatioConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.HealthCompareValueConfig; -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.HealthDetectedInLatestMinutesConfig; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -/** - * 健康检查-配置名枚举 - */ -@Getter -public enum HealthCheckNameEnum { - UNKNOWN( - HealthCheckDimensionEnum.UNKNOWN, - "未知", - Constant.HC_CONFIG_NAME_PREFIX + "UNKNOWN", - "未知", - BaseClusterHealthConfig.class, - false - ), - - CLUSTER_NO_CONTROLLER( - HealthCheckDimensionEnum.CLUSTER, - "Controller", - Constant.HC_CONFIG_NAME_PREFIX + "CLUSTER_NO_CONTROLLER", - "集群Controller数正常", - HealthCompareValueConfig.class, - true - ), - - BROKER_REQUEST_QUEUE_FULL( - HealthCheckDimensionEnum.BROKER, - "RequestQueueSize", - Constant.HC_CONFIG_NAME_PREFIX + "BROKER_REQUEST_QUEUE_FULL", - "Broker-RequestQueueSize指标", - HealthCompareValueConfig.class, - false - ), - - BROKER_NETWORK_PROCESSOR_AVG_IDLE_TOO_LOW( - HealthCheckDimensionEnum.BROKER, - "NetworkProcessorAvgIdlePercent", - Constant.HC_CONFIG_NAME_PREFIX + "BROKER_NETWORK_PROCESSOR_AVG_IDLE_TOO_LOW", - "Broker-NetworkProcessorAvgIdlePercent指标", - HealthCompareValueConfig.class, - false - ), - - GROUP_RE_BALANCE_TOO_FREQUENTLY( - HealthCheckDimensionEnum.GROUP, - "Group Re-Balance", - Constant.HC_CONFIG_NAME_PREFIX + "GROUP_RE_BALANCE_TOO_FREQUENTLY", - "Group re-balance频率", - HealthDetectedInLatestMinutesConfig.class, - false - ), - - TOPIC_NO_LEADER( - HealthCheckDimensionEnum.TOPIC, - "NoLeader", - Constant.HC_CONFIG_NAME_PREFIX + "TOPIC_NO_LEADER", - "Topic 无Leader数", - HealthCompareValueConfig.class, - false - ), - - TOPIC_UNDER_REPLICA_TOO_LONG( - HealthCheckDimensionEnum.TOPIC, - "UnderReplicaTooLong", - Constant.HC_CONFIG_NAME_PREFIX + "TOPIC_UNDER_REPLICA_TOO_LONG", - "Topic 未同步持续时间", - HealthDetectedInLatestMinutesConfig.class, - false - ), - - ZK_BRAIN_SPLIT( - HealthCheckDimensionEnum.ZOOKEEPER, - "BrainSplit", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_BRAIN_SPLIT", - "ZK 脑裂", - HealthCompareValueConfig.class, - true - ), - - ZK_OUTSTANDING_REQUESTS( - HealthCheckDimensionEnum.ZOOKEEPER, - "OutstandingRequests", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_OUTSTANDING_REQUESTS", - "ZK Outstanding 请求堆积数", - HealthAmountRatioConfig.class, - false - ), - - ZK_WATCH_COUNT( - HealthCheckDimensionEnum.ZOOKEEPER, - "WatchCount", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_WATCH_COUNT", - "ZK WatchCount 数", - HealthAmountRatioConfig.class, - false - ), - - ZK_ALIVE_CONNECTIONS( - HealthCheckDimensionEnum.ZOOKEEPER, - "AliveConnections", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_ALIVE_CONNECTIONS", - "ZK 连接数", - HealthAmountRatioConfig.class, - false - ), - - ZK_APPROXIMATE_DATA_SIZE( - HealthCheckDimensionEnum.ZOOKEEPER, - "ApproximateDataSize", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_APPROXIMATE_DATA_SIZE", - "ZK 数据大小(Byte)", - HealthAmountRatioConfig.class, - false - ), - - ZK_SENT_RATE( - HealthCheckDimensionEnum.ZOOKEEPER, - "SentRate", - Constant.HC_CONFIG_NAME_PREFIX + "ZK_SENT_RATE", - "ZK 发包数", - HealthAmountRatioConfig.class, - false - ), - - CONNECT_CLUSTER_TASK_STARTUP_FAILURE_PERCENTAGE( - HealthCheckDimensionEnum.CONNECT_CLUSTER, - "TaskStartupFailurePercentage", - Constant.HC_CONFIG_NAME_PREFIX+"CONNECT_CLUSTER_TASK_STARTUP_FAILURE_PERCENTAGE", - "Connect集群任务启动失败概率", - HealthCompareValueConfig.class, - false - ), - - CONNECTOR_FAILED_TASK_COUNT( - HealthCheckDimensionEnum.CONNECTOR, - "ConnectorFailedTaskCount", - Constant.HC_CONFIG_NAME_PREFIX+"CONNECTOR_FAILED_TASK_COUNT", - "Connector失败状态的任务数量", - HealthCompareValueConfig.class, - false - ), - - CONNECTOR_UNASSIGNED_TASK_COUNT( - HealthCheckDimensionEnum.CONNECTOR, - "ConnectorUnassignedTaskCount", - Constant.HC_CONFIG_NAME_PREFIX+"CONNECTOR_UNASSIGNED_TASK_COUNT", - "Connector未被分配的任务数量", - HealthCompareValueConfig.class, - false - ), - - MIRROR_MAKER_FAILED_TASK_COUNT( - HealthCheckDimensionEnum.MIRROR_MAKER, - "MirrorMakerFailedTaskCount", - Constant.HC_CONFIG_NAME_PREFIX+"MIRROR_MAKER_FAILED_TASK_COUNT", - "MirrorMaker失败状态的任务数量", - HealthCompareValueConfig.class, - false - ), - - MIRROR_MAKER_UNASSIGNED_TASK_COUNT( - HealthCheckDimensionEnum.MIRROR_MAKER, - "MirrorMakerUnassignedTaskCount", - Constant.HC_CONFIG_NAME_PREFIX+"MIRROR_MAKER_UNASSIGNED_TASK_COUNT", - "MirrorMaker未被分配的任务数量", - HealthCompareValueConfig.class, - false - ), - - MIRROR_MAKER_TOTAL_RECORD_ERRORS( - HealthCheckDimensionEnum.MIRROR_MAKER, - "TotalRecord-errors", - Constant.HC_CONFIG_NAME_PREFIX + "MIRROR_MAKER_TOTAL_RECORD_ERRORS", - "MirrorMaker消息处理错误的次数", - HealthCompareValueConfig.class, - false - ), - - MIRROR_MAKER_REPLICATION_LATENCY_MS_MAX( - HealthCheckDimensionEnum.MIRROR_MAKER, - "ReplicationLatencyMsMax", - Constant.HC_CONFIG_NAME_PREFIX + "MIRROR_MAKER_REPLICATION_LATENCY_MS_MAX", - "MirrorMaker消息复制最大延迟时间", - HealthCompareValueConfig.class, - false - ) - - - - - ; - - /** - * 配置维度 - */ - private final HealthCheckDimensionEnum dimensionEnum; - - /** - * 检查项 - */ - private final String configItem; - - /** - * 配置名 - */ - private final String configName; - - /** - * 配置说明 - */ - private final String configDesc; - - /** - * 配置类 - */ - private final Class configClazz; - - /** - * 是可用性检查? - */ - private final boolean availableChecker; - - HealthCheckNameEnum(HealthCheckDimensionEnum dimensionEnum, String configItem, String configName, String configDesc, Class configClazz, boolean availableChecker) { - this.dimensionEnum = dimensionEnum; - this.configItem = configItem; - this.configName = configName; - this.configDesc = configDesc; - this.configClazz = configClazz; - this.availableChecker = availableChecker; - } - - public static HealthCheckNameEnum getByName(String configName) { - for (HealthCheckNameEnum nameEnum: HealthCheckNameEnum.values()) { - if (nameEnum.configName.equals(configName)) { - return nameEnum; - } - } - - return UNKNOWN; - } - - public static List getByDimension(HealthCheckDimensionEnum dimensionEnum) { - List nameEnumList = new ArrayList<>(); - for (HealthCheckNameEnum nameEnum: HealthCheckNameEnum.values()) { - if (dimensionEnum == null || nameEnum.dimensionEnum.equals(dimensionEnum)) { - nameEnumList.add(nameEnum); - } - } - - return nameEnumList; - } - - public static List getByDimensionCode(Integer dimension) { - List nameEnumList = new ArrayList<>(); - for (HealthCheckNameEnum nameEnum: HealthCheckNameEnum.values()) { - if (dimension == null || nameEnum.dimensionEnum.getDimension() == dimension) { - nameEnumList.add(nameEnum); - } - } - - return nameEnumList; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthStateEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthStateEnum.java deleted file mode 100644 index 8bb533f9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/health/HealthStateEnum.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.health; - -import lombok.Getter; - - -/** - * 健康状态 - */ -@Getter -public enum HealthStateEnum { - UNKNOWN(-1, "未知"), - - GOOD(0, "好"), - - MEDIUM(1, "中"), - - POOR(2, "差"), - - DEAD(3, "Down"), - - ; - - private final int dimension; - - private final String message; - - HealthStateEnum(int dimension, String message) { - this.dimension = dimension; - this.message = message; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobActionEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobActionEnum.java deleted file mode 100644 index 8640e460..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobActionEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.job; - -public enum JobActionEnum { - /** - * - */ - START(1,"start"), - - STOP(2, "stop"), - - CANCEL(3,"cancel"), - - CONTINUE(4,"continue"), - - UNKNOWN(-1, "unknown"); - - JobActionEnum(int status, String value) { - this.status = status; - this.value = value; - } - - private final int status; - - private final String value; - - public int getStatus() { - return status; - } - - public String getValue() { - return value; - } - - public static JobActionEnum valueOfStatus(int status) { - for (JobActionEnum statusEnum : JobActionEnum.values()) { - if (status == statusEnum.getStatus()) { - return statusEnum; - } - } - - return JobActionEnum.UNKNOWN; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobHandleEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobHandleEnum.java deleted file mode 100644 index 22f4e7aa..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobHandleEnum.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.job; - -import com.xiaojukeji.know.streaming.km.common.constant.JobConstant; - -public enum JobHandleEnum { - UNKNOWN(-1, "unknown"), - - TOPIC_REPLICA_MOVE(0, JobConstant.TOPIC_REPLICA_MOVE), - - TOPIC_REPLICA_SCALA(1, JobConstant.TOPIC_REPLICA_SCALA), - - CLUSTER_BALANCE(2, JobConstant.CLUSTER_BALANCE), - - ; - - JobHandleEnum(Integer type, String message) { - this.type = type; - this.message = message; - } - - private final Integer type; - - private final String message; - - public Integer getType() { - return type; - } - - public String getMessage() { - return message; - } - - public static JobHandleEnum valueOfType(Integer type) { - if (type == null) { - return JobHandleEnum.UNKNOWN; - } - for (JobHandleEnum typeEnum : JobHandleEnum.values()) { - if (type.equals(typeEnum.getType())) { - return typeEnum; - } - } - - return JobHandleEnum.UNKNOWN; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobStatusEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobStatusEnum.java deleted file mode 100644 index 55cf1659..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobStatusEnum.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.job; - -public enum JobStatusEnum { - /**执行中*/ - RUNNING(1, "running"), - - WAITING(2, "waiting"), - - SUCCESS(3, "success"), - - FAILED(4, "failed"), - - CANCELED(5, "canceled"), - - UNKNOWN(-1, "unknown"); - - JobStatusEnum(int status, String value) { - this.status = status; - this.value = value; - } - - private final int status; - - private final String value; - - public int getStatus() { - return status; - } - - public String getValue() { - return value; - } - - public static JobStatusEnum valueOfStatus(int status) { - for (JobStatusEnum statusEnum : JobStatusEnum.values()) { - if (status == statusEnum.getStatus()) { - return statusEnum; - } - } - - return JobStatusEnum.UNKNOWN; - } - - public static JobStatusEnum getStatusBySubStatus(int totalJobNum, - int successJobNu, - int failedJobNu, - int runningJobNu){ - if (totalJobNum > 0 && (successJobNu + failedJobNu + runningJobNu == 0)) { - return WAITING; - } - - if(runningJobNu > 0) {return RUNNING;} - if(0 == runningJobNu && 0 == failedJobNu && successJobNu > 0){return SUCCESS;} - if(0 == runningJobNu && failedJobNu > 0){return FAILED;} - - return UNKNOWN; - } - - /** - * 当前的任务状态, 能否执行任务 - */ - public static boolean canExecuteJob(Integer jobStatus) { - // 只有waiting状态才可以执行任务 - return jobStatus != null && WAITING.status == jobStatus; - } - - /** - * 当前的任务状态, 不能删除任务 - */ - public static boolean canNotDeleteJob(Integer jobStatus) { - // 处于 running 的任务都不可以删除 - return jobStatus == null || RUNNING.status == jobStatus; - } - - /** - * 当前的任务状态, 能否取消任务 - */ - public static boolean canCancelJob(Integer jobStatus) { - // 只有waiting状态才可以取消任务 - return jobStatus != null && WAITING.status == jobStatus; - } - - public static boolean isRunning(Integer jobStatus) { - return jobStatus != null && RUNNING.status == jobStatus; - } - - public static boolean isWaiting(Integer jobStatus) { - return jobStatus != null && WAITING.status == jobStatus; - } - - public static boolean isFinished(Integer jobStatus) { - return jobStatus != null && (SUCCESS.status == jobStatus || FAILED.status == jobStatus || CANCELED.status == jobStatus); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobTypeEnum.java deleted file mode 100644 index 59760d88..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/job/JobTypeEnum.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.job; - -/** - * @author didi - */ -public enum JobTypeEnum { - UNKNOWN(-1, "unknown"), - - TOPIC_REPLICA_MOVE(0, "Topic迁移"), - - TOPIC_REPLICA_SCALA(1, "Topic扩缩副本"), - - CLUSTER_BALANCE(2, "集群均衡"), - - - ; - - JobTypeEnum(Integer type, String message) { - this.type = type; - this.message = message; - } - - private final Integer type; - - private final String message; - - public Integer getType() { - return type; - } - - public String getMessage() { - return message; - } - - public static JobTypeEnum valueOfType(Integer type) { - if (type == null) { - return JobTypeEnum.UNKNOWN; - } - for (JobTypeEnum typeEnum : JobTypeEnum.values()) { - if (type.equals(typeEnum.getType())) { - return typeEnum; - } - } - - return JobTypeEnum.UNKNOWN; - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/ModuleEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/ModuleEnum.java deleted file mode 100644 index e7fe82c4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/ModuleEnum.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.operaterecord; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.xiaojukeji.know.streaming.km.common.constant.Constant; - -import java.util.List; -import java.util.Map; - -/** - * 操作记录模块枚举 - * @author d06679 - * @date 2017/7/14 - */ -public enum ModuleEnum { - UNKNOWN(Constant.INVALID_CODE, "unknown"), - - KAFKA_CLUSTER(1, "Kafka集群"), - - KAFKA_BROKER(20, "KafkaBroker"), - KAFKA_BROKER_CONFIG(20, "KafkaBroker配置"), - - KAFKA_TOPIC(30, "KafkaTopic"), - KAFKA_TOPIC_CONFIG(31, "KafkaTopic配置"), - KAFKA_TOPIC_DATA(32, "KafkaTopic数据"), - KAFKA_TOPIC_REASSIGN(33, "KafkaTopic迁移"), - - KAFKA_USER(40, "KafkaUser"), - - KAFKA_ACL(50, "KafkaACL"), - - KAFKA_GROUP(60, "KafkaGroup"), - - KAFKA_CONTROLLER(70, "KafkaController"), - - KAFKA_CONNECT_CLUSTER(80, "KafkaConnectCluster"), - KAFKA_CONNECT_CONNECTOR(81, "KafkaConnectConnector"), - - PLATFORM_CONFIG(100, "平台配置"), - - JOB_KAFKA_REPLICA_REASSIGN(110, "Job-KafkaReplica迁移"), - - ; - - ModuleEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public Map toMap() { - Map map = Maps.newHashMap(); - map.put("code", code); - map.put("desc", desc); - return map; - } - - public static ModuleEnum valueOf(Integer code) { - if (code == null) { - return ModuleEnum.UNKNOWN; - } - for (ModuleEnum state : ModuleEnum.values()) { - if (state.getCode() == code) { - return state; - } - } - - return ModuleEnum.UNKNOWN; - } - - public static boolean validate(Integer code) { - if (code == null) { - return false; - } - for (ModuleEnum state : ModuleEnum.values()) { - if (state.getCode() == code) { - return true; - } - } - - return false; - } - - public static List> getAllAriusConfigs() { - List> objects = Lists.newArrayList(); - for (ModuleEnum moduleEnum : ModuleEnum.values()) { - if (moduleEnum.getCode() == -1) { - continue; - } - - objects.add(moduleEnum.toMap()); - } - - return objects; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/OperationEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/OperationEnum.java deleted file mode 100644 index 302cb38b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/OperationEnum.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.operaterecord; - -import com.xiaojukeji.know.streaming.km.common.constant.Constant; - -/** - * 操作枚举 - * @author d06679 - * @date 2017/7/14 - */ -public enum OperationEnum { - UNKNOWN(Constant.INVALID_CODE, "unknown"), - - ADD(1, "新增"), - - DELETE(2, "删除"), - - EDIT(3, "修改"), - - ENABLE(4, "启用"), - - DISABLE(5, "禁用"), - - EXE(6, "执行"), - - SWITCH(7, "切换"), - - REPLACE(8, "替换(无则新建, 有则修改)"), - - SEARCH(9, "读取"), - - CANCEL(10, "取消"), - - RESTART(11, "重启"), - - ; - - OperationEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public static OperationEnum valueOf(Integer code) { - if (code == null) { - return OperationEnum.UNKNOWN; - } - for (OperationEnum state : OperationEnum.values()) { - if (state.getCode() == code) { - return state; - } - } - - return OperationEnum.UNKNOWN; - } - - public static boolean validate(Integer code) { - if (code == null) { - return false; - } - for (OperationEnum state : OperationEnum.values()) { - if (state.getCode() == code) { - return true; - } - } - - return false; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/RecordResultEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/RecordResultEnum.java deleted file mode 100644 index 064a73cd..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/operaterecord/RecordResultEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.operaterecord; - -/** - * 需要记录的操作结果 - * @author d06679 - * @date 2017/7/14 - */ -public enum RecordResultEnum { - SUCCESS(1, "仅记录成功"), - - FAILED(2, "仅记录失败"), - - ALL(Integer.MAX_VALUE, "记录所有"), - - ; - - RecordResultEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - private final int code; - - private final String desc; - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public boolean needRecord(boolean success) { - return (success && (this.equals(ALL) || this.equals(SUCCESS))) || (!success && this.equals(FAILED)); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/topic/TopicTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/topic/TopicTypeEnum.java deleted file mode 100644 index 66efa7c9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/topic/TopicTypeEnum.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.topic; - -import com.xiaojukeji.know.streaming.km.common.constant.KafkaConstant; -import lombok.Getter; - -/** - * Topic类型 - */ -@Getter -public enum TopicTypeEnum { - UNKNOWN(-1, "未知"), - - NORMAL(0, "普通"), - - KAFKA_INTERNAL(1, "Kafka内部Topic"), - - ; - - private final Integer code; - - private final String msg; - - TopicTypeEnum(Integer code, String msg) { - this.code = code; - this.msg = msg; - } - - public static Integer getTopicTypeCode(String topicName) { - return KafkaConstant.KAFKA_INTERNAL_TOPICS.contains(topicName)? KAFKA_INTERNAL.getCode(): NORMAL.getCode(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/valid/ValidateKafkaAddressErrorEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/valid/ValidateKafkaAddressErrorEnum.java deleted file mode 100644 index 08cf4e53..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/valid/ValidateKafkaAddressErrorEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.valid; - -import lombok.Getter; - -@Getter -public enum ValidateKafkaAddressErrorEnum { - BS_ERROR(10, "服务地址错误"), - - ZK_ERROR(20, "ZK错误"), - - JMX_ERROR(31, "Jmx错误"), - - ; - - public static final String BS_CONNECT_FAILED = "连接服务地址失败,请检查服务地址及集群配置"; - - public static final String BS_CONNECT_SUCCESS_BUT_RUN_RAFT = "连接服务地址成功,但因无ZK配置导致版本信息获取失败"; - - public static final String BS_CONNECT_SUCCESS_BUT_API_NOT_SUPPORT = "连接服务地址成功,但因集群版本较低等原因,导致版本信息获取失败"; - - public static final String ZK_CONNECT_ERROR = "连接ZK地址失败"; - - public static final String ZK_CONNECT_SUCCESS_BUT_NODE_NOT_EXIST = "连接ZK地址成功,但ZK上的Kafka相关节点不存在"; - - public static final String JMX_WITHOUT_OPEN = "集群Jmx未配置或开启"; - - public static final String CONNECT_JMX_ERROR = "连接Jmx失败"; - - private final int code; - - private final String message; - - ValidateKafkaAddressErrorEnum(int code, String message) { - this.code = code; - this.message = message; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionEnum.java deleted file mode 100644 index 5c594848..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionEnum.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.version; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static com.xiaojukeji.know.streaming.km.common.utils.VersionUtil.normailze; - -public enum VersionEnum { - - /** - * 0.10.x.x - */ - V_0_10_0_0("0.10.0.0", normailze("0.10.0.0")), - V_0_10_0_1("0.10.0.1", normailze("0.10.0.1")), - - V_0_10_1_0("0.10.1.0", normailze("0.10.1.0")), - V_0_10_1_1("0.10.1.1", normailze("0.10.1.1")), - - V_0_10_2_0("0.10.2.0", normailze("0.10.2.0")), - V_0_10_2_1("0.10.2.1", normailze("0.10.2.1")), - V_0_10_2_2("0.10.2.2", normailze("0.10.2.2")), - - /** - * 0.11.x.x - */ - V_0_11_0_0("0.11.0.0", normailze("0.11.0.0")), - V_0_11_0_1("0.11.0.1", normailze("0.11.0.1")), - V_0_11_0_2("0.11.0.2", normailze("0.11.0.2")), - V_0_11_0_3("0.11.0.3", normailze("0.11.0.3")), - - /** - * 1.x.x - */ - V_1_0_0("1.0.0", normailze("1.0.0")), - V_1_0_1("1.0.1", normailze("1.0.1")), - V_1_0_2("1.0.2", normailze("1.0.2")), - V_1_1_0("1.1.0", normailze("1.1.0")), - V_1_1_1("1.1.1", normailze("1.1.1")), - - /** - * 2.x.x - */ - V_2_0_0("2.0.0", normailze("2.0.0")), - V_2_0_1("2.0.1", normailze("2.0.1")), - V_2_1_0("2.1.0", normailze("2.1.0")), - V_2_1_1("2.1.1", normailze("2.1.1")), - V_2_2_0("2.2.0", normailze("2.2.0")), - V_2_2_1("2.2.1", normailze("2.2.1")), - V_2_2_2("2.2.2", normailze("2.2.2")), - V_2_3_0("2.3.0", normailze("2.3.0")), - V_2_3_1("2.3.1", normailze("2.3.1")), - V_2_4_0("2.4.0", normailze("2.4.0")), - V_2_4_1("2.4.1", normailze("2.4.1")), - - V_2_5_0("2.5.0", normailze("2.5.0")), - V_2_5_0_D_300("2.5.0-d-300", normailze("2.5.0-d-300")), - V_2_5_0_D_MAX("2.5.0-d-999", normailze("2.5.0-d-999")), - - V_2_5_1("2.5.1", normailze("2.5.1")), - V_2_6_0("2.6.0", normailze("2.6.0")), - V_2_6_1("2.6.1", normailze("2.6.1")), - V_2_6_2("2.6.2", normailze("2.6.2")), - V_2_6_3("2.6.3", normailze("2.6.3")), - V_2_7_0("2.7.0", normailze("2.7.0")), - V_2_7_1("2.7.1", normailze("2.7.1")), - V_2_7_2("2.7.2", normailze("2.7.2")), - V_2_8_0("2.8.0", normailze("2.8.0")), - V_2_8_1("2.8.1", normailze("2.8.1")), - - /** - * 3.x.x - */ - V_3_0_0("3.0.0", normailze("3.0.0")), - V_3_1_0("3.1.0", normailze("3.1.0")), - V_3_2_0("3.2.0", normailze("3.2.0")), - V_3_3_0("3.3.0", normailze("3.3.0")), - - V_MAX("x.x.x.x", Long.MAX_VALUE), - - ; - - private final String version; - - private final Long versionL; - - VersionEnum(String version, Long versionL) { - this.version = version; - this.versionL = versionL; - } - - public String getVersion() { - return version; - } - - public Long getVersionL(){return versionL;} - - public static List allVersions(){ - List versions = new ArrayList<>(); - - for(VersionEnum v :VersionEnum.values()){ - versions.add(v.getVersion()); - } - - return versions; - } - - public static Map allVersionsWithOutMax(){ - Map versionMap = new HashMap<>(); - - for(VersionEnum v :VersionEnum.values()){ - if(V_MAX.versionL.longValue() == v.versionL.longValue()){continue;} - versionMap.put(v.getVersion(), v.getVersionL()); - } - - return versionMap; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionItemTypeEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionItemTypeEnum.java deleted file mode 100644 index 7bcf3234..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/version/VersionItemTypeEnum.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.version; - -public enum VersionItemTypeEnum { - /** - * 指标 - */ - METRIC_TOPIC(100, "TopicMetric"), - METRIC_CLUSTER(101, "ClusterMetric"), - METRIC_GROUP(102, "GroupMetric"), - METRIC_BROKER(103, "BrokerMetric"), - METRIC_PARTITION(104, "PartitionMetric"), - METRIC_REPLICATION(105, "ReplicaMetric"), - - METRIC_ZOOKEEPER(110, "ZookeeperMetric"), - - METRIC_CONNECT_CLUSTER(120, "ConnectClusterMetric"), - METRIC_CONNECT_CONNECTOR(121, "ConnectConnectorMetric"), - METRIC_CONNECT_MIRROR_MAKER(122, "ConnectMirrorMakerMetric"), - - /** - * 服务端查询 - */ - SERVICE_SEARCH_CONFIG(200, "service_config_search"), - SERVICE_SEARCH_BROKER(201, "service_broker_search"), - SERVICE_SEARCH_GROUP(202, "service_broker_search"), - - /** - * 服务端操作 - */ - SERVICE_OP_TOPIC(300, "service_topic_operation"), - SERVICE_OP_CONFIG(301, "service_config_operation"), - SERVICE_OP_ACL(302, "service_acl_operation"), - SERVICE_OP_KAFKA_USER(303, "service_kafka-acl_operation"), - - SERVICE_OP_TOPIC_CONFIG(310, "service_topic-config_operation"), - SERVICE_OP_BROKER_CONFIG(311, "service_broker-config_operation"), - - - SERVICE_OP_PARTITION(320, "service_partition_operation"), - SERVICE_OP_PARTITION_LEADER(321, "service_partition-leader_operation"), - - SERVICE_OP_REASSIGNMENT(330, "service_reassign_operation"), - - SERVICE_OP_CONNECT_CLUSTER(400, "service_connect_cluster_operation"), - SERVICE_OP_CONNECT_CONNECTOR(401, "service_connect_connector_operation"), - SERVICE_OP_CONNECT_PLUGIN(402, "service_connect_plugin_operation"), - - /** - * 前端操作 - */ - WEB_OP(901, "web_operation"), - ; - - private final Integer code; - - private final String message; - - VersionItemTypeEnum(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Integer getCode() { - return code; - } - - public String getMessage() { - return message; - } - - @Override - public String toString() { - return "VersionItemTypeEnum{" + - "code=" + code + - ", message='" + message + '\'' + - '}'; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/zookeeper/ZKRoleEnum.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/zookeeper/ZKRoleEnum.java deleted file mode 100644 index fd379dc8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/enums/zookeeper/ZKRoleEnum.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.enums.zookeeper; - -import lombok.Getter; - -@Getter -public enum ZKRoleEnum { - LEADER("leader"), - - FOLLOWER("follower"), - - OBSERVER("observer"), - - UNKNOWN("unknown"), - - ; - - private final String role; - - ZKRoleEnum(String role) { - this.role = role; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminOperateException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminOperateException.java deleted file mode 100644 index fd7b60d7..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminOperateException.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class AdminOperateException extends BaseException { - - public AdminOperateException(String message) { - super(message, ResultStatus.OPERATION_FAILED); - } - - public AdminOperateException(String message, Throwable cause) { - super(message, cause, ResultStatus.OPERATION_FAILED); - } - - public AdminOperateException(String message, ResultStatus resultStatus) { - super(message, resultStatus); - } - - public AdminOperateException(String message, Throwable cause, ResultStatus resultStatus) { - super(message, cause, resultStatus); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminRunTimeException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminRunTimeException.java deleted file mode 100644 index a9cce815..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminRunTimeException.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * 平台错误基类 - * - * @author d06679 - * @date 2019/3/13 - */ -public class AdminRunTimeException extends RuntimeException { - - private final ResultStatus resultType; - - public AdminRunTimeException(String message, Throwable cause, ResultStatus resultType) { - super(message, cause); - this.resultType = resultType; - } - - public AdminRunTimeException(String message, ResultStatus resultType) { - super(message); - this.resultType = resultType; - } - - public ResultStatus getResultStatus() { - return resultType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskCodeException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskCodeException.java deleted file mode 100644 index cd399d53..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskCodeException.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class AdminTaskCodeException extends AdminRunTimeException { - - public AdminTaskCodeException(String message) { - super(message, ResultStatus.FAIL); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskException.java deleted file mode 100644 index caa74443..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/AdminTaskException.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class AdminTaskException extends AdminRunTimeException { - - public AdminTaskException(String message) { - super(message, ResultStatus.ADMIN_TASK_ERROR); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/BaseException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/BaseException.java deleted file mode 100644 index c3017705..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/BaseException.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * 平台错误基类 - * - * @author d06679 - * @date 2019/3/13 - */ -public class BaseException extends Exception { - - private final ResultStatus resultType; - - public BaseException(String message, Throwable cause, ResultStatus resultType) { - super(message, cause); - this.resultType = resultType; - } - - public BaseException(String message, ResultStatus resultType) { - super(message); - this.resultType = resultType; - } - - public ResultStatus getResultStatus() { - return resultType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ConfigException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ConfigException.java deleted file mode 100644 index 3ee4b52b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ConfigException.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -/** - * @author limeng - * @date 2017/12/22 - */ -public class ConfigException extends Exception { - - private static final long serialVersionUID = -3670649722021947735L; - - public ConfigException(Throwable cause) { - super(cause); - } - - public ConfigException(String message, Throwable cause) { - super(message, cause); - } - - public ConfigException(String message) { - super(message); - } - - public ConfigException() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/DuplicateException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/DuplicateException.java deleted file mode 100644 index 2ca8e947..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/DuplicateException.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * 已存在异常 - * @author d06679 - */ -public class DuplicateException extends BaseException { - - public DuplicateException(String message) { - super(message, ResultStatus.DUPLICATION); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESOperateException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESOperateException.java deleted file mode 100644 index 33fd70ba..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESOperateException.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class ESOperateException extends AdminOperateException { - - public ESOperateException(String message, Throwable cause) { - super(message, cause, ResultStatus.ES_OPERATE_ERROR); - } - - public ESOperateException(String message) { - super(message, ResultStatus.ES_OPERATE_ERROR); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESRunTimeException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESRunTimeException.java deleted file mode 100644 index ea6947d5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ESRunTimeException.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * ES错误基类 - * - * @author d06679 - * @date 2019/3/13 - */ -public class ESRunTimeException extends RuntimeException { - - private ResultStatus resultType; - - public ESRunTimeException(String message, Throwable cause, ResultStatus resultType) { - super(message, cause); - this.resultType = resultType; - } - - public ESRunTimeException(String message, Throwable cause) { - super(message, cause); - } - - public ESRunTimeException(String message, ResultStatus resultType) { - super(message); - this.resultType = resultType; - } - - public ESRunTimeException(String message) { - super(message); - } - - public ResultStatus getResultStatus() { - return resultType; - } - - public void setResultStatus(ResultStatus resultType) { - this.resultType = resultType; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotExistException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotExistException.java deleted file mode 100644 index 2b9f7fd6..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotExistException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * 不存在异常 - * @author d06679 - */ -public class NotExistException extends BaseException { - public NotExistException(String message) { - super(message, ResultStatus.NOT_EXIST); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotFindSubclassException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotFindSubclassException.java deleted file mode 100644 index 95821e82..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/NotFindSubclassException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * @author linyunan - * @date 2021-04-25 - */ -public class NotFindSubclassException extends AdminRunTimeException { - - public NotFindSubclassException(String message) { - super(message, ResultStatus.NO_FIND_SUB_CLASS); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/OperateForbiddenException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/OperateForbiddenException.java deleted file mode 100644 index 897d699b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/OperateForbiddenException.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class OperateForbiddenException extends AdminRunTimeException { - - public OperateForbiddenException(String message) { - super(message, ResultStatus.OPERATION_FORBIDDEN); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ParamErrorException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ParamErrorException.java deleted file mode 100644 index fc81b719..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ParamErrorException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * 不存在异常 - * @author d06679 - */ -public class ParamErrorException extends BaseException { - public ParamErrorException(String message) { - super(message, ResultStatus.PARAM_ILLEGAL); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ThirdPartRemoteException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ThirdPartRemoteException.java deleted file mode 100644 index e3db4fc5..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/ThirdPartRemoteException.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * @author d06679 - * @date 2019/3/18 - */ -public class ThirdPartRemoteException extends AdminRunTimeException { - - public ThirdPartRemoteException(String message, Throwable cause, ResultStatus resultType) { - super(message, cause, resultType); - } - - public ThirdPartRemoteException(String message, ResultStatus resultType) { - super(message, resultType); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/VCHandlerNotExistException.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/VCHandlerNotExistException.java deleted file mode 100644 index a4231d8a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/exception/VCHandlerNotExistException.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.exception; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; - -/** - * - * - * @author d06679 - * @date 2019/2/21 - */ -public class VCHandlerNotExistException extends AdminOperateException { - - public VCHandlerNotExistException(String message, Throwable cause) { - super(message, cause, ResultStatus.NO_FIND_METHOD); - } - - public VCHandlerNotExistException(String message) { - super(message, ResultStatus.NO_FIND_METHOD); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxAttribute.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxAttribute.java deleted file mode 100644 index 3043b90f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxAttribute.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.jmx; - -/** - * @author zhongyuankai - * @date 20/4/13 - */ -public class JmxAttribute { - - public static final String RATE_MIN_1 = "OneMinuteRate"; - - public static final String RATE_MIN_5 = "FiveMinuteRate"; - - public static final String RATE_MIN_15 = "FifteenMinuteRate"; - - public static final String PERCENTILE_50 = "50thPercentile"; - - public static final String PERCENTILE_75 = "75thPercentile"; - - public static final String PERCENTILE_95 = "95thPercentile"; - - public static final String PERCENTILE_98 = "98thPercentile"; - - public static final String PERCENTILE_99 = "99thPercentile"; - - public static final String MAX = "Max"; - - public static final String MEAN = "Mean"; - - public static final String MIN = "Min"; - - public static final String VALUE = "Value"; - - public static final String CONNECTION_COUNT = "connection-count"; - - public static final String VERSION = "Version"; - - /*********************************************************** connect cluster***********************************************************/ - public static final String TASK_COUNT = "task-count"; - - public static final String CONNECTOR_STARTUP_ATTEMPTS_TOTAL = "connector-startup-attempts-total"; - - public static final String CONNECTOR_STARTUP_FAILURE_PERCENTAGE = "connector-startup-failure-percentage"; - - public static final String CONNECTOR_STARTUP_FAILURE_TOTAL = "connector-startup-failure-total"; - - public static final String CONNECTOR_STARTUP_SUCCESS_PERCENTAGE = "connector-startup-success-percentage"; - - public static final String CONNECTOR_STARTUP_SUCCESS_TOTAL = "connector-startup-success-total"; - - public static final String TASK_STARTUP_ATTEMPTS_TOTAL = "task-startup-attempts-total"; - - public static final String TASK_STARTUP_FAILURE_PERCENTAGE = "task-startup-failure-percentage"; - - public static final String TASK_STARTUP_FAILURE_TOTAL = "task-startup-failure-total"; - - public static final String TASK_STARTUP_SUCCESS_PERCENTAGE = "task-startup-success-percentage"; - - public static final String TASK_STARTUP_SUCCESS_TOTAL = "task-startup-success-total"; - - /*********************************************************** connect ***********************************************************/ - public static final String CONNECTOR_TOTAL_TASK_COUNT = "connector-total-task-count"; - - public static final String CONNECTOR_RUNNING_TASK_COUNT = "connector-running-task-count"; - - public static final String CONNECTOR_PAUSED_TASK_COUNT = "connector-paused-task-count"; - - public static final String CONNECTOR_FAILED_TASK_COUNT = "connector-failed-task-count"; - - public static final String CONNECTOR_UNASSIGNED_TASK_COUNT = "connector-unassigned-task-count"; - - public static final String BATCH_SIZE_AVG = "batch-size-avg"; - - public static final String BATCH_SIZE_MAX = "batch-size-max"; - - public static final String OFFSET_COMMIT_AVG_TIME_MS = "offset-commit-avg-time-ms"; - - public static final String OFFSET_COMMIT_MAX_TIME_MS = "offset-commit-max-time-ms"; - - public static final String OFFSET_COMMIT_FAILURE_PERCENTAGE = "offset-commit-failure-percentage"; - - public static final String OFFSET_COMMIT_SUCCESS_PERCENTAGE = "offset-commit-success-percentage"; - - public static final String POLL_BATCH_AVG_TIME_MS = "poll-batch-avg-time-ms"; - - public static final String POLL_BATCH_MAX_TIME_MS = "poll-batch-max-time-ms"; - - public static final String SOURCE_RECORD_ACTIVE_COUNT = "source-record-active-count"; - - public static final String SOURCE_RECORD_ACTIVE_COUNT_AVG = "source-record-active-count-avg"; - - public static final String SOURCE_RECORD_ACTIVE_COUNT_MAX = "source-record-active-count-max"; - - public static final String SOURCE_RECORD_POLL_RATE = "source-record-poll-rate"; - - public static final String SOURCE_RECORD_POLL_TOTAL = "source-record-poll-total"; - - public static final String SOURCE_RECORD_WRITE_RATE = "source-record-write-rate"; - - public static final String SOURCE_RECORD_WRITE_TOTAL = "source-record-write-total"; - - public static final String OFFSET_COMMIT_COMPLETION_RATE = "offset-commit-completion-rate"; - - public static final String OFFSET_COMMIT_COMPLETION_TOTAL = "offset-commit-completion-total"; - - public static final String OFFSET_COMMIT_SKIP_RATE = "offset-commit-skip-rate"; - - public static final String OFFSET_COMMIT_SKIP_TOTAL = "offset-commit-skip-total"; - - public static final String PARTITION_COUNT = "partition-count"; - - public static final String PUT_BATCH_AVG_TIME_MS = "put-batch-avg-time-ms"; - - public static final String PUT_BATCH_MAX_TIME_MS = "put-batch-max-time-ms"; - - public static final String SINK_RECORD_ACTIVE_COUNT = "sink-record-active-count"; - - public static final String SINK_RECORD_ACTIVE_COUNT_AVG = "sink-record-active-count-avg"; - - public static final String SINK_RECORD_ACTIVE_COUNT_MAX = "sink-record-active-count-max"; - - public static final String SINK_RECORD_LAG_MAX = "sink-record-lag-max"; - - public static final String SINK_RECORD_READ_RATE = "sink-record-read-rate"; - - public static final String SINK_RECORD_READ_TOTAL = "sink-record-read-total"; - - public static final String SINK_RECORD_SEND_RATE = "sink-record-send-rate"; - - public static final String SINK_RECORD_SEND_TOTAL = "sink-record-send-total"; - - public static final String DEADLETTERQUEUE_PRODUCE_FAILURES = "deadletterqueue-produce-failures"; - - public static final String DEADLETTERQUEUE_PRODUCE_REQUESTS = "deadletterqueue-produce-requests"; - - public static final String LAST_ERROR_TIMESTAMP = "last-error-timestamp"; - - public static final String TOTAL_ERRORS_LOGGED = "total-errors-logged"; - - public static final String TOTAL_RECORD_ERRORS = "total-record-errors"; - - public static final String TOTAL_RECORD_FAILURES = "total-record-failures"; - - public static final String TOTAL_RECORDS_SKIPPED = "total-records-skipped"; - - public static final String TOTAL_RETRIES = "total-retries"; - - /*********************************************************** mm2 ***********************************************************/ - - public static final String BYTE_COUNT = "byte-count"; - - public static final String BYTE_RATE = "byte-rate"; - - public static final String RECORD_AGE_MS = "record-age-ms"; - - public static final String RECORD_AGE_MS_AVG = "record-age-ms-avg"; - - public static final String RECORD_AGE_MS_MAX = "record-age-ms-max"; - - public static final String RECORD_AGE_MS_MIN = "record-age-ms-min"; - - public static final String RECORD_COUNT = "record-count"; - - public static final String RECORD_RATE = "record-rate"; - - public static final String REPLICATION_LATENCY_MS = "replication-latency-ms"; - - public static final String REPLICATION_LATENCY_MS_AVG = "replication-latency-ms-avg"; - - public static final String REPLICATION_LATENCY_MS_MAX = "replication-latency-ms-max"; - - public static final String REPLICATION_LATENCY_MS_MIN = "replication-latency-ms-min"; - - private JmxAttribute() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxConnectorWrap.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxConnectorWrap.java deleted file mode 100644 index d9cfb082..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxConnectorWrap.java +++ /dev/null @@ -1,226 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.jmx; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig; -import com.xiaojukeji.know.streaming.km.common.utils.BackoffUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.management.*; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.management.remote.rmi.RMIConnectorServer; -import javax.naming.Context; -import javax.rmi.ssl.SslRMIClientSocketFactory; -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * JMXConnector包装类 - * @author tukun - * @date 2015/11/9. - */ -public class JmxConnectorWrap { - private static final Logger LOGGER = LoggerFactory.getLogger(JmxConnectorWrap.class); - - //jmx打印日志时的附带信息 - private final String clientLogIdent; - - private final Long brokerStartupTime; - - private final String host; - - private final Integer port; - - private JMXConnector jmxConnector; - - private final AtomicInteger atomicInteger; - - private JmxConfig jmxConfig; - - public JmxConnectorWrap(String clientLogIdent, Long brokerStartupTime, String host, Integer port, JmxConfig jmxConfig) { - this.clientLogIdent=clientLogIdent; - this.brokerStartupTime = brokerStartupTime; - this.host = host; - - if (port == null || port == -1 && jmxConfig.getJmxPort() != null) { - this.port = jmxConfig.getJmxPort(); - } else { - this.port = port; - } - - this.jmxConfig = jmxConfig; - if (ValidateUtils.isNull(this.jmxConfig)) { - this.jmxConfig = new JmxConfig(); - } - if (ValidateUtils.isNullOrLessThanZero(this.jmxConfig.getMaxConn())) { - this.jmxConfig.setMaxConn(1000); - } - this.atomicInteger = new AtomicInteger(this.jmxConfig.getMaxConn()); - } - - public boolean checkJmxConnectionAndInitIfNeed() { - if (jmxConnector != null) { - return true; - } - if (port == null || port == -1) { - return false; - } - return createJmxConnector(); - } - - public boolean brokerChanged(Long startTime) { - if (this.brokerStartupTime == null || !this.brokerStartupTime.equals(startTime)) { - return true; - } - - return false; - } - - public synchronized void close() { - if (jmxConnector == null) { - return; - } - try { - jmxConnector.close(); - - jmxConnector = null; - } catch (IOException e) { - LOGGER.warn("close JmxConnector exception, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port, e); - } - } - - public Object getAttribute(ObjectName name, String attribute) throws - MBeanException, - AttributeNotFoundException, - InstanceNotFoundException, - ReflectionException, - IOException { - try { - acquire(); - MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection(); - return mBeanServerConnection.getAttribute(name, attribute); - } catch (IOException ioe) { - // 如果是因为连接断开,则进行重新连接,并抛出异常 - reInitDueIOException(); - - throw ioe; - } finally { - atomicInteger.incrementAndGet(); - } - } - - public AttributeList getAttributes(ObjectName name, String[] attributes) throws - MBeanException, - AttributeNotFoundException, - InstanceNotFoundException, - ReflectionException, - IOException { - try { - acquire(); - MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection(); - return mBeanServerConnection.getAttributes(name, attributes); - } catch (IOException ioe) { - // 如果是因为连接断开,则进行重新连接,并抛出异常 - reInitDueIOException(); - - throw ioe; - } finally { - atomicInteger.incrementAndGet(); - } - } - - public Set queryNames(ObjectName name, QueryExp query) - throws IOException { - try { - acquire(); - MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection(); - return mBeanServerConnection.queryNames(name, query); - } catch (IOException ioe) { - // 如果是因为连接断开,则进行重新连接,并抛出异常 - reInitDueIOException(); - - throw ioe; - } finally { - atomicInteger.incrementAndGet(); - } - } - - - /**************************************************** private method ****************************************************/ - - - private synchronized boolean createJmxConnector() { - if (jmxConnector != null) { - return true; - } - String jmxUrl = String.format("service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi", host, port); - try { - Map environment = new HashMap(); - if (!ValidateUtils.isBlank(this.jmxConfig.getUsername()) && !ValidateUtils.isBlank(this.jmxConfig.getToken())) { - // fixed by riyuetianmu - environment.put(JMXConnector.CREDENTIALS, new String[]{this.jmxConfig.getUsername(), this.jmxConfig.getToken()}); - } - if (jmxConfig.getOpenSSL() != null && this.jmxConfig.getOpenSSL()) { - environment.put(Context.SECURITY_PROTOCOL, "ssl"); - SslRMIClientSocketFactory clientSocketFactory = new SslRMIClientSocketFactory(); - environment.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, clientSocketFactory); - environment.put("com.sun.jndi.rmi.factory.socket", clientSocketFactory); - } - - jmxConnector = JMXConnectorFactory.connect(new JMXServiceURL(jmxUrl), environment); - LOGGER.info("JMX connect success, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port); - return true; - } catch (MalformedURLException e) { - LOGGER.error("JMX url exception, clientLogIdent:{} host:{} port:{} jmxUrl:{}", clientLogIdent, host, port, jmxUrl, e); - } catch (Exception e) { - LOGGER.error("JMX connect exception, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port, e); - } - return false; - } - - private void acquire() { - long now = System.currentTimeMillis(); - while (true) { - try { - int num = atomicInteger.get(); - if (num <= 0) { - BackoffUtils.backoff(2); - } - - if (atomicInteger.compareAndSet(num, num - 1) || System.currentTimeMillis() - now > 6000) { - break; - } - } catch (Exception e) { - // ignore - } - } - } - - private synchronized void reInitDueIOException() { - try { - if (jmxConnector == null) { - return; - } - - // 检查是否正常 - jmxConnector.getConnectionId(); - - // 如果正常则直接返回 - return; - } catch (Exception e) { - // ignore - } - - // 关闭旧的 - this.close(); - - // 重新创建 - this.checkJmxConnectionAndInitIfNeed(); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxName.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxName.java deleted file mode 100644 index 39217986..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/jmx/JmxName.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.jmx; - -public class JmxName { - - /*********************************************************** server ***********************************************************/ - public static final String JMX_SERVER_BROKER_BYTE_IN = "kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec"; - - public static final String JMX_SERVER_BROKER_REASSIGNMENT_BYTE_IN = "kafka.server:type=BrokerTopicMetrics,name=ReassignmentBytesInPerSec"; - - public static final String JMX_SERVER_BROKER_BYTE_OUT = "kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec"; - - public static final String JMX_SERVER_BROKER_REASSIGNMENT_BYTE_OUT = "kafka.server:type=BrokerTopicMetrics,name=ReassignmentBytesOutPerSec"; - - public static final String JMX_SERVER_BROKER_MESSAGES_IN = "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec"; - - public static final String JMX_SERVER_BROKER_PRODUCES_REQUEST = "kafka.server:type=BrokerTopicMetrics,name=TotalProduceRequestsPerSec"; - - public static final String JMX_SERVER_BROKER_BYTES_REJECTED = "kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec"; - - public static final String JMX_SERVER_BROKER_FAILED_FETCH_REQUEST = "kafka.server:type=BrokerTopicMetrics,name=FailedFetchRequestsPerSec"; - - public static final String JMX_SERVER_BROKER_FAILED_PRODUCE_REQUEST = "kafka.server:type=BrokerTopicMetrics,name=FailedProduceRequestsPerSec"; - - public static final String JMX_SERVER_BROKER_REPLICATION_BYTES_IN = "kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesInPerSec"; - - public static final String JMX_SERVER_BROKER_REPLICATION_BYTES_OUT = "kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesOutPerSec"; - - public static final String JMX_SERVER_SOCKET_CONNECTIONS = "kafka.server:type=socket-server-metrics"; - - public static final String JMX_SERVER_REQUEST_AVG_IDLE = "kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent"; - - public static final String JMX_SERVER_UNDER_REP_PARTITIONS = "kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions"; - - public static final String JMX_SERVER_AT_MIN_ISR_PARTITIONS = "kafka.server:type=ReplicaManager,name=AtMinIsrPartitionCount"; - - public static final String JMX_SERVER_UNDER_MIN_ISR_PARTITIONS = "kafka.server:type=ReplicaManager,name=UnderMinIsrPartitionCount"; - - public static final String JMX_SERVER_PARTITIONS = "kafka.server:type=ReplicaManager,name=PartitionCount"; - - public static final String JMX_SERVER_LEADERS = "kafka.server:type=ReplicaManager,name=LeaderCount"; - - public static final String JMX_SERVER_APP_INFO ="kafka.server:type=app-info"; - - public static final String JMX_SERVER_TOPIC_MIRROR ="kafka.server:type=FetcherLagMetrics,name=ConsumerLag,clientId=*,topic=%s,partition=*"; - - /*********************************************************** controller ***********************************************************/ - public static final String JMX_CONTROLLER_ACTIVE_COUNT = "kafka.controller:type=KafkaController,name=ActiveControllerCount"; - - public static final String JMX_CONTROLLER_EVENT_QUEUE_SIZE = "kafka.controller:type=ControllerEventManager,name=EventQueueSize"; - - /*********************************************************** log ***********************************************************/ - public static final String JMX_LOG_LOG_END_OFFSET = "kafka.log:type=Log,name=LogEndOffset"; - - public static final String JMX_LOG_LOG_START_OFFSET = "kafka.log:type=Log,name=LogStartOffset"; - - public static final String JMX_LOG_LOG_SIZE = "kafka.log:type=Log,name=Size"; - - /*********************************************************** network ***********************************************************/ - public static final String JMX_NETWORK_REQUEST_QUEUE = "kafka.network:type=RequestChannel,name=RequestQueueSize"; - - public static final String JMX_NETWORK_RESPONSE_QUEUE = "kafka.network:type=RequestChannel,name=ResponseQueueSize"; - - public static final String JMX_NETWORK_PROCESSOR_AVG_IDLE = "kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent"; - - /*********************************************************** cluster ***********************************************************/ - public static final String JMX_CLUSTER_PARTITION_UNDER_REPLICATED = "kafka.cluster:type=Partition,name=UnderReplicated"; - - /*********************************************************** zookeeper ***********************************************************/ - - public static final String JMX_ZK_REQUEST_LATENCY_MS = "kafka.server:type=ZooKeeperClientMetrics,name=ZooKeeperRequestLatencyMs"; - public static final String JMX_ZK_SYNC_CONNECTS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec"; - public static final String JMX_ZK_DISCONNECTORS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperDisconnectsPerSec"; - - /*********************************************************** connect ***********************************************************/ - public static final String JMX_CONNECT_WORKER_METRIC = "kafka.connect:type=connect-worker-metrics"; - - public static final String JMX_CONNECT_WORKER_CONNECTOR_METRIC = "kafka.connect:type=connect-worker-metrics,connector=%s"; - - public static final String JMX_CONNECTOR_TASK_CONNECTOR_METRIC = "kafka.connect:type=connector-task-metrics,connector=%s,task=%s"; - - public static final String JMX_CONNECTOR_SOURCE_TASK_METRICS = "kafka.connect:type=source-task-metrics,connector=%s,task=%s"; - - public static final String JMX_CONNECTOR_SINK_TASK_METRICS = "kafka.connect:type=sink-task-metrics,connector=%s,task=%s"; - - public static final String JMX_CONNECTOR_TASK_ERROR_METRICS = "kafka.connect:type=task-error-metrics,connector=%s,task=%s"; - - /*********************************************************** mm2 ***********************************************************/ - - public static final String JMX_MIRROR_MAKER_SOURCE = "kafka.connect.mirror:type=MirrorSourceConnector,target=%s,topic=%s,partition=%s"; - - - private JmxName() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/AESUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/AESUtils.java deleted file mode 100644 index d9d4f6ff..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/AESUtils.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.crypto.Cipher; -import javax.crypto.spec.SecretKeySpec; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -/** - * kafka-user Token的加解密传输 - */ -public class AESUtils { - private static final Logger logger = LoggerFactory.getLogger(AESUtils.class); - - private static final String ALGORITHM = "AES"; - - private static final String AES_KEY = "KnowStreamingKM$"; - - public static String encrypt(String sSrc) { - try { - byte[] raw = AES_KEY.getBytes(StandardCharsets.UTF_8); - - SecretKeySpec skeySpec = new SecretKeySpec(raw, ALGORITHM); - - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); //"算法/模式/补码方式" - - cipher.init(Cipher.ENCRYPT_MODE, skeySpec); - - byte[] encrypted = cipher.doFinal(sSrc.getBytes(StandardCharsets.UTF_8)); - - return Base64.getEncoder().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。 - } catch (Exception e) { - logger.error("encrypt failed, sSrc:{}.", sSrc, e); - } - - return null; - } - - public static String decrypt(String sSrc) { - try { - byte[] raw = AES_KEY.getBytes(StandardCharsets.UTF_8); - SecretKeySpec skeySpec = new SecretKeySpec(raw, ALGORITHM); - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, skeySpec); - byte[] encrypted1 = Base64.getDecoder().decode(sSrc.getBytes(StandardCharsets.UTF_8));//先用base64解密 - - return new String(cipher.doFinal(encrypted1), StandardCharsets.UTF_8); - } catch (Exception e) { - logger.error("encrypt failed, sSrc:{}.", sSrc, e); - } - - return null; - } - - public static void main(String[] args) { - // 需要加密的字串 - String cSrc = "admin"; - System.out.println(cSrc); - - // 加密 - String enString = AESUtils.encrypt(cSrc); - System.out.println("加密后的字串是:" + enString); - - // 解密 - String DeString = AESUtils.decrypt(enString); - System.out.println("解密后的字串是:" + DeString); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BackoffUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BackoffUtils.java deleted file mode 100644 index b8d0a4ad..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BackoffUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -public class BackoffUtils { - private BackoffUtils() { - } - - public static void backoff(long timeUnitMs) { - if (timeUnitMs <= 0) { - return; - } - - try { - Thread.sleep(timeUnitMs); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } catch (Exception e) { - // ignore - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BeanUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BeanUtil.java deleted file mode 100644 index dfbd3d66..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/BeanUtil.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -/** - * @author didi - */ -public class BeanUtil { - - public static List listBeanFields(Class c){ - List fieldNames = new ArrayList<>(); - - Field[] fields = c.getDeclaredFields(); - if(null == fields || fields.length == 0){ - return fieldNames; - } - - for(Field field : fields){ - fieldNames.add(field.getName()); - } - - return fieldNames; - } - - private BeanUtil() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/CommonUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/CommonUtils.java deleted file mode 100644 index 48601795..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/CommonUtils.java +++ /dev/null @@ -1,280 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import org.springframework.util.StringUtils; -import org.springframework.web.multipart.MultipartFile; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.net.URI; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author: D10865 - * @description: - * @date: Create on 2019/1/18 上午11:48 - * @modified By D10865 - */ -public class CommonUtils { - - private static final ILog LOGGER = LogFactory.getLog(CommonUtils.class); - - private static final String REGEX = ","; - - private CommonUtils() {} - - /** - * 获取MD5值 - * - * @param str - * @return - */ - public static String getMD5(String str) { - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] bytes = md.digest(str.getBytes( StandardCharsets.UTF_8)); - return toHex(bytes); - } catch (Exception e) { - return ""; - } - } - - /** - * 获取文件的md5 - * @param file - * @return - */ - public static String getMD5(MultipartFile file) { - try { - //获取文件的byte信息 - byte[] uploadBytes = file.getBytes(); - // 拿到一个MD5转换器 - MessageDigest md5 = MessageDigest.getInstance("MD5"); - byte[] digest = md5.digest(uploadBytes); - //转换为16进制 - return new BigInteger(1, digest).toString(16); - } catch (Exception e) { - LOGGER.error("method=getMD5||msg=获取文件的md5失败:{}", e.getMessage()); - } - return null; - } - - /** - * 保留指定的小数位 四舍五入 - * @param data 需要转换的数据 - * @param decimal 保留小数的位数 默认是2 - * @return - */ - public static double formatDouble(double data, int decimal) { - if (decimal < 0){decimal = 2;} - - BigDecimal b = BigDecimal.valueOf(data); - return b.setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue(); - } - - public static String toHex(byte[] bytes) { - - final char[] hexDigits = "0123456789ABCDEF".toCharArray(); - StringBuilder ret = new StringBuilder(bytes.length * 2); - for (int i = 0; i < bytes.length; i++) { - ret.append(hexDigits[(bytes[i] >> 4) & 0x0f]); - ret.append(hexDigits[bytes[i] & 0x0f]); - } - return ret.toString(); - } - - public static String strList2String(List strList) { - if (strList == null || strList.isEmpty()) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (String elem: strList) { - if (!StringUtils.hasText(elem)) { - continue; - } - sb.append(elem).append(REGEX); - } - return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : sb.toString(); - } - - public static String intList2String(List intList) { - if (intList == null || intList.isEmpty()) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (Integer elem: intList) { - if (elem == null) { - continue; - } - sb.append(elem).append(REGEX); - } - return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : sb.toString(); - } - - public static String longList2String(List longList) { - if (longList == null || longList.isEmpty()) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (Long elem: longList) { - if (elem == null) { - continue; - } - sb.append(elem).append(REGEX); - } - return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : sb.toString(); - } - - public static String intSet2String(Set intSet) { - if (intSet == null || intSet.isEmpty()) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (Integer elem: intSet) { - if (elem == null) { - continue; - } - sb.append(elem).append(REGEX); - } - return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : sb.toString(); - } - - public static List string2StrList(String str) { - if (!StringUtils.hasText(str)) { - return new ArrayList<>(); - } - List strList = new ArrayList<>(); - for (String elem: str.split(REGEX)) { - if (!StringUtils.hasText(elem)) { - continue; - } - strList.add(elem); - } - return strList; - } - - public static Long monitorTimestamp2min(Long timestamp){ - return timestamp - timestamp % 60000; - } - - /** - * 字符串追加 - * - * @param items - * @return - */ - public static String strConcat(List items) { - StringBuilder stringBuilder = new StringBuilder(128); - boolean isFirstItem = true; - - for (String item : items) { - if (isFirstItem) { - stringBuilder.append( String.format("\"%s\"", item)); - isFirstItem = false; - } else { - stringBuilder.append(",").append( String.format("\"%s\"", item)); - } - } - - return stringBuilder.toString(); - } - /** - * 判断是否为合法IP - * @return the ip - */ - public static boolean checkIp(String addr) { - if (addr.length() < 7 || addr.length() > 15 || "".equals(addr)) { - return false; - } - - String rexp1 = "^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\\."; - String rexp2 = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\\."; - String rexp3 = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"; - - Pattern pat = Pattern.compile(rexp1 + rexp2 + rexp2 + rexp3); - Matcher mat = pat.matcher(addr); - - return mat.find(); - - } - - /** - * 生成固定长度的随机字符串 - */ - public static String randomString(int length) { - char[] value = new char[length]; - for (int i = 0; i < length; i++) { - value[i] = randomWritableChar(); - } - return new String(value); - } - - /** - * 随机生成单个随机字符 - */ - public static char randomWritableChar() { - Random random = new Random(); - return (char) (33 + random.nextInt(94)); - } - - public static List string2IntList(String str) { - if (!StringUtils.hasText(str)) { - return new ArrayList<>(); - } - List intList = new ArrayList<>(); - for (String elem :str.split(REGEX)) { - if (!StringUtils.hasText(elem)) { - continue; - } - intList.add(Integer.valueOf(elem)); - } - return intList; - } - - public static boolean isNumeric(String str){ - for (int i = 0; i < str.length(); i++){ - if (!Character.isDigit(str.charAt(i))){ - return false; - } - } - - return true; - } - - public static String getWorkerId(String url){ - try { - URI uri = new URI(url); - return uri.getHost() + ":" + uri.getPort(); - } catch (Exception e) { - return null; - } - } - - - /** - * 校验两个list的第一个元素是否相等,以","分隔元素。 - * @param str1 - * @param str2 - * @return - */ - public static boolean checkFirstElementIsEquals(String str1, String str2) { - if (ValidateUtils.anyBlank(str1, str2)) { - return false; - } - Integer targetLeader = CommonUtils.string2IntList(str1).get(0); - Integer originalLeader = CommonUtils.string2IntList(str2).get(0); - return originalLeader.equals(targetLeader); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ConvertUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ConvertUtil.java deleted file mode 100644 index 10e87ca8..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ConvertUtil.java +++ /dev/null @@ -1,404 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.google.common.collect.*; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.BeanUtils; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.lang.reflect.Type; -import java.util.*; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Consumer; -import java.util.function.Function; - -public class ConvertUtil { - private ConvertUtil(){} - - private static final ILog LOGGER = LogFactory.getLog(ConvertUtil.class); - - public static T toObj(String json, Type resultType) { - if (resultType instanceof Class) { - Class clazz = (Class) resultType; - return str2ObjByJson(json, clazz); - } - - return JSON.parseObject(json, resultType); - } - - public static T str2ObjByJson(String srcStr, Class tgtClass) { - return JSON.parseObject(srcStr, tgtClass); - } - - public static T str2ObjByJson(String srcStr, TypeReference tt) { - return JSON.parseObject(srcStr, tt); - } - - public static String obj2Json(Object srcObj) { - if (srcObj == null) { - return null; - } - if (srcObj instanceof String) { - return (String) srcObj; - } else { - return JSON.toJSONString(srcObj); - } - } - - public static String obj2JsonWithIgnoreCircularReferenceDetect(Object srcObj) { - return JSON.toJSONString(srcObj, SerializerFeature.DisableCircularReferenceDetect); - } - - public static List str2ObjArrayByJson(String srcStr, Class tgtClass) { - return JSON.parseArray(srcStr, tgtClass); - } - - public static T obj2ObjByJSON(Object srcObj, Class tgtClass) { - return JSON.parseObject( JSON.toJSONString(srcObj), tgtClass); - } - - public static String list2String(List list, String separator) { - if (list == null || list.isEmpty()) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (Object item : list) { - sb.append(item).append(separator); - } - return sb.deleteCharAt(sb.length() - 1).toString(); - } - - public static Map list2Map(List list, Function mapper) { - Map map = Maps.newHashMap(); - if (CollectionUtils.isNotEmpty(list)) { - for (V v : list) { - map.put(mapper.apply(v), v); - } - } - return map; - } - - public static Map list2MapParallel(List list, Function mapper) { - Map map = new ConcurrentHashMap<>(); - if (CollectionUtils.isNotEmpty(list)) { - list.parallelStream().forEach(v -> map.put(mapper.apply(v), v)); - } - return map; - } - - public static Map list2Map(List list, Function keyMapper, - Function valueMapper) { - Map map = Maps.newHashMap(); - if (CollectionUtils.isNotEmpty(list)) { - for (O o : list) { - map.put(keyMapper.apply(o), valueMapper.apply(o)); - } - } - return map; - } - - public static Multimap list2MulMap(List list, Function mapper) { - Multimap multimap = ArrayListMultimap.create(); - if (CollectionUtils.isNotEmpty(list)) { - for (V v : list) { - multimap.put(mapper.apply(v), v); - } - } - return multimap; - } - - public static Multimap list2MulMap(List list, Function keyMapper, - Function valueMapper) { - Multimap multimap = ArrayListMultimap.create(); - if (CollectionUtils.isNotEmpty(list)) { - for (O o : list) { - multimap.put(keyMapper.apply(o), valueMapper.apply(o)); - } - } - return multimap; - } - - public static Map> list2MapOfList(List list, Function keyMapper, - Function valueMapper) { - ArrayListMultimap multimap = ArrayListMultimap.create(); - if (CollectionUtils.isNotEmpty(list)) { - for (O o : list) { - multimap.put(keyMapper.apply(o), valueMapper.apply(o)); - } - } - - return Multimaps.asMap(multimap); - } - - public static Set list2Set(List list, Function mapper) { - Set set = Sets.newHashSet(); - if (CollectionUtils.isNotEmpty(list)) { - for (V v : list) { - set.add(mapper.apply(v)); - } - } - return set; - } - - public static Set set2Set(Set set, Class tClass) { - if (CollectionUtils.isEmpty(set)) { - return new HashSet<>(); - } - - Set result = new HashSet<>(); - - for (Object o : set) { - T t = obj2Obj(o, tClass); - if (t != null) { - result.add(t); - } - } - - return result; - } - - public static List list2List(List list, Class tClass) { - return list2List(list, tClass, (t) -> { - }); - } - - public static List list2List(List list, Class tClass, Consumer consumer) { - if (CollectionUtils.isEmpty(list)) { - return Lists.newArrayList(); - } - - List result = Lists.newArrayList(); - - for (Object object : list) { - T t = obj2Obj(object, tClass, consumer); - if (t != null) { - result.add(t); - } - } - - return result; - } - - /** - * 对象转换工具 - * @param srcObj 元对象 - * @param tgtClass 目标对象类 - * @param 泛型 - * @return 目标对象 - */ - public static T obj2Obj(final Object srcObj, Class tgtClass) { - return obj2Obj(srcObj, tgtClass, (t) -> { - }); - } - - public static T obj2Obj(final Object srcObj, Class tgtClass, Consumer consumer) { - if (srcObj == null) { - return null; - } - - T tgt = null; - try { - tgt = tgtClass.newInstance(); - BeanUtils.copyProperties(srcObj, tgt); - consumer.accept(tgt); - } catch (Exception e) { - LOGGER.warn("method=obj2Obj||msg={}", e.getMessage()); - } - - return tgt; - } - - public static Map mergeMapList(List> mapList) { - Map result = Maps.newHashMap(); - for (Map map : mapList) { - result.putAll(map); - } - return result; - } - - public static Map Obj2Map(Object obj) { - if (null == obj) { - return null; - } - - Map map = new HashMap<>(); - Field[] fields = obj.getClass().getDeclaredFields(); - for (Field field : fields) { - field.setAccessible(true); - try { - map.put(field.getName(), field.get(obj)); - } catch (IllegalAccessException e) { - LOGGER.warn("method=Obj2Map||msg={}", e.getMessage(), e); - } - } - return map; - } - - public static Object map2Obj(Map map, Class clz) { - Object obj = null; - try { - obj = clz.newInstance(); - Field[] declaredFields = obj.getClass().getDeclaredFields(); - for (Field field : declaredFields) { - int mod = field.getModifiers(); - if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { - continue; - } - field.setAccessible(true); - field.set(obj, map.get(field.getName())); - } - } catch (Exception e) { - LOGGER.warn("method=map2Obj||msg={}", e.getMessage(), e); - } - - return obj; - } - - public static Map sortMapByValue(Map map) { - List> data = new ArrayList<>(map.entrySet()); - data.sort((o1, o2) -> { - if ((o2.getValue() - o1.getValue()) > 0) { - return 1; - } else if ((o2.getValue() - o1.getValue()) == 0) { - return 0; - } else { - return -1; - } - }); - - Map result = Maps.newLinkedHashMap(); - - for (Entry next : data) { - result.put(next.getKey(), next.getValue()); - } - return result; - } - - public static Map directFlatObject(JSONObject obj) { - Map ret = new HashMap<>(); - - if(obj==null) { - return ret; - } - - for (Map.Entry entry : obj.entrySet()) { - String key = entry.getKey(); - Object o = entry.getValue(); - - if (o instanceof JSONObject) { - Map m = directFlatObject((JSONObject) o); - for (Map.Entry e : m.entrySet()) { - ret.put(key + "." + e.getKey(), e.getValue()); - } - } else { - ret.put(key, o); - } - } - - return ret; - } - - public static Long string2Long(String s) { - if (ValidateUtils.isNull(s)) { - return null; - } - try { - return Long.parseLong(s); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Float string2Float(String s) { - if (ValidateUtils.isNull(s)) { - return null; - } - try { - return Float.parseFloat(s); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static String float2String(Float f) { - if (ValidateUtils.isNull(f)) { - return null; - } - try { - return String.valueOf(f); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Integer string2Integer(String s) { - if (null == s) { - return null; - } - try { - return Integer.parseInt(s); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Double string2Double(String s) { - if (null == s) { - return null; - } - try { - return Double.parseDouble(s); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Long double2Long(Double d) { - if (null == d) { - return null; - } - try { - return d.longValue(); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Long Float2Long(Float f) { - if (null == f) { - return null; - } - try { - return f.longValue(); - } catch (Exception e) { - // ignore exception - } - return null; - } - - public static Integer float2Integer(Float f) { - if (null == f) { - return null; - } - try { - return f.intValue(); - } catch (Exception e) { - // ignore exception - } - return null; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/DateUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/DateUtils.java deleted file mode 100644 index f32d5ff3..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/DateUtils.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import org.apache.commons.lang3.StringUtils; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; -import java.util.Calendar; -import java.util.Date; - -/** - * - * - * @author d06679 - * @date 2017/7/26 - */ -public class DateUtils { - - private static final String REGEX = "\\d{4}-\\d{2}-\\d{2}"; - private static final String PATTERN_1 = "yyyy-MM-dd"; - private static final String PATTERN_2 = "yyyy-MM-dd HH:mm:ss.SSS Z"; - private static final String PATTERN_3 = "yyyy-MM-dd HH:mm:ss"; - private DateUtils(){} - - public static Long date2Long(Date time, String formatStr) { - - if (time == null) { - return null; - } - - String format; - if (formatStr == null) { - format = "yyyyMMddHHmmss"; - } else { - format = formatStr; - } - - String timeStr = new SimpleDateFormat(format).format(time); - - return Long.valueOf(timeStr); - } - - public static Date getYesterday(Date time) { - return getBeforeDays(time, 1); - } - - public static Date getYesterday() { - return getBeforeDays(new Date(), 1); - } - - public static Date getTodayBegin() { - Calendar c = Calendar.getInstance(); - c.set( Calendar.HOUR_OF_DAY, 0); - c.set( Calendar.MINUTE, 0); - c.set( Calendar.SECOND, 0); - c.set( Calendar.MILLISECOND, 0); - return c.getTime(); - } - - public static Date getBeforeDays(Date time, int before) { - - if (time == null) { - return null; - } - - Calendar c = Calendar.getInstance(); - c.setTime(time); - c.set( Calendar.DATE, c.get( Calendar.DATE) - before); - - return c.getTime(); - } - - public static Date getBeforeSeconds(Date time, int before) { - - if (time == null) { - return null; - } - - Calendar c = Calendar.getInstance(); - c.setTime(time); - c.set( Calendar.SECOND, c.get( Calendar.SECOND) - before); - - return c.getTime(); - } - - public static Date getBeforeMonths(Date time, int before) { - if (time == null) { - return null; - } - - Calendar c = Calendar.getInstance(); - c.setTime(time); - c.set( Calendar.MONTH, c.get( Calendar.MONTH) - before); - - return c.getTime(); - } - - /** - * 获取当前月的最后一天的 - * @param time 时间 - * @return - */ - public static Date getLastDayOfTheMonth(Date time) { - if (time == null) { - return null; - } - - Calendar c = Calendar.getInstance(); - c.setTime(time); - c.set( Calendar.MONTH, c.get( Calendar.MONTH) + 1); - c.set( Calendar.DATE, 0); - - return c.getTime(); - } - - public static Date getAfterDays(Date time, int after) { - - if (time == null) { - return null; - } - - Calendar c = Calendar.getInstance(); - c.setTime(time); - c.set( Calendar.DATE, c.get( Calendar.DATE) + after); - - return c.getTime(); - } - - public static int getWeekInfo(Date time) { - Calendar c = Calendar.getInstance(); - c.setTime(time); - return c.get( Calendar.DAY_OF_WEEK); - } - - public static int getDayInfo(Date time) { - Calendar c = Calendar.getInstance(); - c.setTime(time); - return c.get( Calendar.DAY_OF_MONTH); - } - - public static int getMonthInfo(Date time) { - Calendar c = Calendar.getInstance(); - c.setTime(time); - return c.get( Calendar.MONTH); - } - - public static int getHourInfo(Date time) { - Calendar c = Calendar.getInstance(); - c.setTime(time); - return c.get( Calendar.HOUR_OF_DAY); - } - - public static int getYearInfo(Date time) { - Calendar c = Calendar.getInstance(); - c.setTime(time); - return c.get( Calendar.YEAR); - } - - public static Integer date2int(Date time) { - - if (time == null) { - return null; - } - - String timeStr = new SimpleDateFormat("yyyyMMddHH").format(time); - - return Integer.valueOf(timeStr); - } - - public static Integer date2int(Date time, String format) { - - if (time == null) { - return null; - } - - if (StringUtils.isBlank(format)) { - format = "yyyyMMddHH"; - } - - String timeStr = new SimpleDateFormat(format).format(time); - - return Integer.valueOf(timeStr); - } - - public static Date int2date(int time, String format) { - - if (format == null) { - return null; - } - - String timeStr = String.valueOf(time); - Date result = null; - try { - result = new SimpleDateFormat(format).parse(timeStr); - } catch (ParseException e) { - return null; - } - - return result; - } - - public static String date2Str(Date date, String newFormatStr) { - - if (date == null) { - return null; - } else { - String newformat; - if (StringUtils.isBlank(newFormatStr)) { - newformat = PATTERN_3; - } else { - newformat = newFormatStr; - } - - SimpleDateFormat format = new SimpleDateFormat(newformat); - return format.format(date); - } - } - - public static String getDateTimeStr(long time) { - SimpleDateFormat sdf = new SimpleDateFormat( PATTERN_3 ); - return sdf.format(new Date(time)); - } - - public static Date str2Date(String str, String newFormatStr) { - if (str == null) { - return null; - } else { - String newformat; - if (StringUtils.isBlank(newFormatStr)) { - newformat = PATTERN_3; - } else { - newformat = newFormatStr; - } - - SimpleDateFormat format = new SimpleDateFormat(newformat); - try { - return format.parse(str); - } catch (ParseException e) { - return null; - } - } - } - - public static Date getZeroDate() { - return getZeroDate(new Date()); - } - - public static Date getZeroDate(Date time) { - if (time == null) { - return null; - } - - time = org.apache.commons.lang3.time.DateUtils.setHours(time, 0); - time = org.apache.commons.lang3.time.DateUtils.setMinutes(time, 0); - time = org.apache.commons.lang3.time.DateUtils.setSeconds(time, 0); - time = org.apache.commons.lang3.time.DateUtils.setMilliseconds(time, 0); - return time; - } - - public static int getBeforeDayCount(Date before) { - Date todayZero = getZeroDate(); - long timestamp = todayZero.getTime() - before.getTime(); - if (timestamp < 0) { - return 0; - } - - Double result = Math.ceil(timestamp * 1.0 / 1000 / 60 / 60 / 24); - return result.intValue(); - } - - public static boolean isLastOfMonth(Date date) { - - Date tomorrow = DateUtils.getAfterDays(date, 1); - int tomorrowMonth = getMonthInfo(tomorrow); - int todayMonth = getMonthInfo(date); - - return todayMonth != tomorrowMonth; - } - - public static int getThisMonthRemainDay() { - Date today = new Date(); - int todayMonth = getMonthInfo(today); - int i = 1; - while (getMonthInfo(getAfterDays(today, i)) == todayMonth) { - i++; - } - return i; - } - - /** - * 获取指定偏移日期的格式化结果 - * - * @param offset - * @return - */ - public static String getFormatDayByOffset(int offset) { - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(PATTERN_1); - return dateTimeFormatter.format( ZonedDateTime.now().minus(offset, ChronoUnit.DAYS)); - } - - public static String getFormatMonthByOffset(int offset) { - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); - return dateTimeFormatter.format(ZonedDateTime.now().minus(offset, ChronoUnit.DAYS)); - } - - public static Long getTimeEpochMilli(String date) { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN_3); - try { - return simpleDateFormat.parse(date).getTime(); - } catch (ParseException e) { - } - return 0L; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/EnvUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/EnvUtil.java deleted file mode 100644 index d98de986..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/EnvUtil.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -public class EnvUtil { - - private static EnvType type = EnvType.TEST; - - public static boolean isOnline() { - return type == EnvType.ONLINECN; - } - - public static boolean isPre() { - return type == EnvType.PRECN; - } - - public static boolean isDev() { - return type == EnvType.DEV; - } - - public static boolean isPressure() { - return type == EnvType.PRESSURE; - } - - public static boolean isTest() { - return type == EnvType.TEST; - } - - public static boolean isStable() { - return type == EnvType.STABLE; - } - - public static String getStr() { - return type.getStr(); - } - - /** - * 设置加载的活跃的profile文件 - */ - public static void setLoadActiveProfiles(String[] activeProfiles) { - if (activeProfiles == null || activeProfiles.length == 0) { - return; - } - - for (String profile : activeProfiles) { - if (profile.contains("dev") || profile.contains("integration")) { - type = EnvType.DEV; - } else if (profile.contains("test")) { - type = EnvType.TEST; - } else if (profile.contains("stable")) { - type = EnvType.STABLE; - } else if (profile.contains("pressure")) { - type = EnvType.PRESSURE; - } else if (profile.contains("pre")) { - type = EnvType.PRECN; - }else if (profile.contains("online")) { - type = EnvType.ONLINECN; - } - } - } - - /** - * 根据环境信息获取写入索引名称 - * - * @param indexName - * @return - */ - public static String getWriteIndexNameByEnv(String indexName) { - if (isPre()) { - return "pre_".concat(indexName); - } - - return indexName; - } - - public enum EnvType { - DEV("dev"), - TEST("test"), - STABLE("stable"), - PRECN("pre"), - PRESSURE("pressure"), - ONLINECN("online"); - - private String str; - - private EnvType(String str) { - this.str = str; - } - - public String getStr() { - return str; - } - - public static EnvType getByStr(String str) { - for (EnvType type : EnvType.values()) { - if (type.str.equalsIgnoreCase(str)) { - return type; - } - } - - return null; - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureNoWaitUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureNoWaitUtil.java deleted file mode 100644 index 5e7ca714..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureNoWaitUtil.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.common.FutureTaskDelayQueueData; - -import java.util.concurrent.*; - -/** - * Future 提交任务后,无需等待结果的非工具类 - * 会有一个移步线程周期检查任务 - * @param - */ -public class FutureNoWaitUtil { - private static final ILog LOGGER = LogFactory.getLog(FutureNoWaitUtil.class); - - private ThreadPoolExecutor executor; - - private DelayQueue> delayQueueData; - - private Thread checkDelayQueueThread; - - private FutureNoWaitUtil() { - } - - public static FutureNoWaitUtil init(String threadPoolName, int corePoolSize, int maxPoolSize, int queueSize) { - FutureNoWaitUtil futureUtil = new FutureNoWaitUtil<>(); - - // 创建任务线程池 - futureUtil.executor = new ThreadPoolExecutor( - corePoolSize, - maxPoolSize, - 300, - TimeUnit.SECONDS, - new LinkedBlockingDeque<>(queueSize), - new NamedThreadFactory(threadPoolName), - new ThreadPoolExecutor.DiscardOldestPolicy() //对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。 - ); - futureUtil.executor.allowCoreThreadTimeOut(true); - - futureUtil.delayQueueData = new DelayQueue<>(); - - // 创建检查延迟队列的线程并启动 - futureUtil.checkDelayQueueThread = new Thread(() -> futureUtil.runCheck(), threadPoolName + "-CheckTaskTimeout"); - futureUtil.checkDelayQueueThread.setDaemon(true); - futureUtil.checkDelayQueueThread.start(); - - return futureUtil; - } - - public FutureNoWaitUtil runnableTask(String taskName, Integer timeoutUnisMs, Callable callable) { - this.delayQueueData.put(new FutureTaskDelayQueueData<>(taskName, executor.submit(callable), timeoutUnisMs + System.currentTimeMillis())); - - return this; - } - - public FutureNoWaitUtil runnableTask(String taskName, Integer timeoutUnisMs, Runnable runnable) { - this.delayQueueData.put(new FutureTaskDelayQueueData(taskName, (Future) executor.submit(runnable), timeoutUnisMs + System.currentTimeMillis())); - - return this; - } - - private void runCheck() { - while (true) { - FutureTaskDelayQueueData data = null; - try { - LOGGER.debug("method=runCheck||delayQueueSize={}", delayQueueData.size()); - - while (true) { - data = delayQueueData.take(); - - if (data.getFutureTask().isDone()) { - // 当前任务已完成 - continue; - } - - data.getFutureTask().cancel(true); - break; - } - - // 停1000ms - Thread.sleep(1000); - } catch (Exception e) { - LOGGER.error("method=runCheck||taskName={}||errMsg=exception!", data == null? "": data.getTaskName(), e); - } - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureUtil.java deleted file mode 100644 index ed68939f..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureUtil.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import java.util.concurrent.*; - -/** - * Future工具类 - * @param - */ -public class FutureUtil { - private ThreadPoolExecutor executor; - - public static final FutureUtil quickStartupFutureUtil = FutureUtil.init("QuickStartupTP", 8, 8, 10240); - - private FutureUtil() { - } - - public static FutureUtil init(String threadPoolName, int corePoolSize, int maxPoolSize, int queueSize) { - FutureUtil futureUtil = new FutureUtil<>(); - - futureUtil.executor = new ThreadPoolExecutor( - corePoolSize, - maxPoolSize, - 300, - TimeUnit.SECONDS, - new LinkedBlockingDeque<>(queueSize), - new NamedThreadFactory(threadPoolName), - new ThreadPoolExecutor.DiscardOldestPolicy() //对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。 - ); - futureUtil.executor.allowCoreThreadTimeOut(true); - - return futureUtil; - } - - public FutureUtil submitTask(Runnable runnable) { - executor.submit(runnable); - return this; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureWaitUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureWaitUtil.java deleted file mode 100644 index 28388358..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/FutureWaitUtil.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.common.FutureTaskDelayQueueData; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.*; - -/** - * Future工具类,提交任务后需等待结果 - * @param - */ -public class FutureWaitUtil { - private static final ILog LOGGER = LogFactory.getLog(FutureWaitUtil.class); - - private ThreadPoolExecutor executor; - - private Map>> futuresMap; - - private FutureWaitUtil() { - } - - public static FutureWaitUtil init(String threadPoolName, int corePoolSize, int maxPoolSize, int queueSize) { - FutureWaitUtil futureUtil = new FutureWaitUtil<>(); - - futureUtil.executor = new ThreadPoolExecutor( - corePoolSize, - maxPoolSize, - 300, - TimeUnit.SECONDS, - new LinkedBlockingDeque<>(queueSize), - new NamedThreadFactory(threadPoolName), - new ThreadPoolExecutor.DiscardOldestPolicy() //对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。 - ); - futureUtil.executor.allowCoreThreadTimeOut(true); - - futureUtil.futuresMap = new ConcurrentHashMap<>(); - return futureUtil; - } - - /** - * 必须配合 waitExecute使用 否则容易会撑爆内存 - */ - public FutureWaitUtil runnableTask(String taskName, Integer timeoutUnisMs, Callable callable) { - Long currentThreadId = Thread.currentThread().getId(); - - futuresMap.putIfAbsent(currentThreadId, new DelayQueue<>()); - - DelayQueue> delayQueueData = futuresMap.get(currentThreadId); - - delayQueueData.put(new FutureTaskDelayQueueData<>(taskName, executor.submit(callable), timeoutUnisMs + System.currentTimeMillis())); - - return this; - } - - public FutureWaitUtil runnableTask(String taskName, Integer timeoutUnisMs, Runnable runnable) { - Long currentThreadId = Thread.currentThread().getId(); - - futuresMap.putIfAbsent(currentThreadId, new DelayQueue<>()); - - DelayQueue> delayQueueData = futuresMap.get(currentThreadId); - - delayQueueData.put(new FutureTaskDelayQueueData(taskName, (Future) executor.submit(runnable), timeoutUnisMs + System.currentTimeMillis())); - - return this; - } - - public void waitExecute() { - this.waitResult(); - } - - public void waitExecute(Integer stepWaitTimeUnitMs) { - this.waitResult(stepWaitTimeUnitMs); - } - - public List waitResult() { - return waitResult(null); - } - - /** - * 等待结果 - * @param stepWaitTimeUnitMs 超时时间达到后,没有完成时,继续等待的时间 - */ - public List waitResult(Integer stepWaitTimeUnitMs) { - Long currentThreadId = Thread.currentThread().getId(); - - DelayQueue> delayQueueData = futuresMap.remove(currentThreadId); - if(delayQueueData == null || delayQueueData.isEmpty()) { - return new ArrayList<>(); - } - - List resultList = new ArrayList<>(); - while (!delayQueueData.isEmpty()) { - try { - // 不进行阻塞,直接获取第一个任务 - FutureTaskDelayQueueData queueData = delayQueueData.peek(); - if (queueData.getFutureTask().isDone()) { - // 如果第一个已经完成了,则移除掉第一个,然后获取其result - delayQueueData.remove(queueData); - resultList.add(queueData.getFutureTask().get()); - continue; - } - - // 如果第一个未完成,则阻塞10ms,判断是否达到超时时间了。 - // 这里的10ms不建议设置较大,因为任务可能在这段时间内完成了,此时如果设置的较大,会导致迟迟不能返回,从而影响接口调用的性能 - queueData = delayQueueData.poll(10, TimeUnit.MILLISECONDS); - if (queueData == null) { - continue; - } - - // 在到达超时时间后,任务没有完成,但是没有完成的原因可能是因为任务一直处于等待状态导致的。 - // 因此这里再给一段补充时间,看这段时间内是否可以完成任务。 - stepWaitResult(queueData, stepWaitTimeUnitMs); - - // 达到超时时间 - if (queueData.getFutureTask().isDone()) { - // 任务已经完成 - resultList.add(queueData.getFutureTask().get()); - continue; - } - - // 达到超时时间,但是任务未完成,则打印日志并强制取消 - LOGGER.error("method=waitExecute||taskName={}||msg=cancel task", queueData.getTaskName()); - - queueData.getFutureTask().cancel(true); - } catch (Exception e) { - LOGGER.error("method=waitExecute||msg=exception", e); - } - } - - return resultList; - } - - public void purgeExecutor() { - executor.purge(); - } - - public Integer getExecutorQueueSize() { - return executor.getQueue().size(); - } - - public void shutdownNow() { - executor.shutdownNow(); - } - - private T stepWaitResult(FutureTaskDelayQueueData queueData, Integer stepWaitTimeUnitMs) { - if (stepWaitTimeUnitMs == null) { - return null; - } - - try { - return queueData.getFutureTask().get(stepWaitTimeUnitMs, TimeUnit.MILLISECONDS); - } catch (Exception e) { - // 达到超时时间,但是任务未完成,则打印日志并强制取消 - LOGGER.error("method=stepWaitResult||taskName={}||errMsg=exception", queueData.getTaskName(), e); - } - - return null; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/GitPropUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/GitPropUtil.java deleted file mode 100644 index 3dffc2e9..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/GitPropUtil.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Properties; - -public class GitPropUtil { - private static final ILog log = LogFactory.getLog(GitPropUtil.class); - - private static Properties props = null; - - public static final String VERSION_FIELD_NAME = "git.build.version"; - - public static final String COMMIT_ID_FIELD_NAME = "git.commit.id.abbrev"; - - public static String getProps(String fieldName) { - if (props == null) { - props = ConvertUtil.toObj(readGitPropertiesInJarFile(), Properties.class); - } - - return props.getProperty(fieldName); - } - - public static Properties getProps() { - if (props == null) { - props = ConvertUtil.toObj(readGitPropertiesInJarFile(), Properties.class); - } - - return props; - } - - private static String readGitPropertiesInJarFile() { - InputStream inputStream = null; - try { - inputStream = GitPropUtil.class.getClassLoader().getResourceAsStream("git.properties"); - - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - String line = null; - - StringBuilder sb = new StringBuilder(); - while ((line = bufferedReader.readLine()) != null) { - sb.append(line).append("\n"); - } - return sb.toString(); - } catch (Exception e) { - log.warn("method=readGitPropertiesInJarFile||errMsg=exception."); - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - } catch (Exception e) { - log.warn("method=readGitPropertiesInJarFile||msg=close failed||errMsg=exception."); - } - } - - return "{}"; - } - - private GitPropUtil() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/IndexNameUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/IndexNameUtils.java deleted file mode 100644 index 20b76f18..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/IndexNameUtils.java +++ /dev/null @@ -1,398 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.google.common.collect.Lists; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.List; - -public class IndexNameUtils { - - private IndexNameUtils(){} - - private static final String VERSION_TAG = "_v"; - - private static final Long ONE_DAY = 24 * 60 * 60 * 1000L; - - public static String removeVersion(String indexName) { - if (indexName == null || indexName.length() < VERSION_TAG.length()) { - return indexName; - } - - int i = indexName.lastIndexOf(VERSION_TAG); - if (i < 0) { - return indexName; - } - - - String numStr = indexName.substring(i + VERSION_TAG.length()); - try { - if (numStr.startsWith("+") || numStr.startsWith("-")) { - return indexName; - } - - Long.valueOf(numStr); - } catch (Exception t) { - return indexName; - } - - return indexName.substring(0, i); - } - - public static String genCurrentDailyIndexName(String templateName){ - return templateName + "_" + DateUtils.getFormatDayByOffset(0); - } - - public static String genCurrentMonthlyIndexName(String templateName){ - return templateName + "_" + DateUtils.getFormatMonthByOffset(0); - } - - public static String genIndexNameWithVersion(String indexName, Integer version) { - if(version == null || version <= 0) { - return indexName; - } - return indexName + "_v" + version; - } - - public static String genDailyIndexNameWithVersion(String templateName, int offsetDay, Integer version){ - return genIndexNameWithVersion(genDailyIndexName(templateName, offsetDay), version); - } - - public static String genCurrentMonthlyIndexNameWithVersion(String templateName, Integer version){ - return genIndexNameWithVersion(genCurrentMonthlyIndexName(templateName), version); - } - - public static String genDailyIndexName(String templateName, int offsetDay){ - return templateName + "_" + DateUtils.getFormatDayByOffset(offsetDay); - } - - //startDate、endDate 毫秒 - public static String genDailyIndexName(String templateName, Long startDate, Long endDate){ - if(startDate > endDate){ - return templateName + "_" + DateUtils.getFormatDayByOffset(0); - } - - long currentDate = System.currentTimeMillis(); - long offsetFromStart = (currentDate - startDate)/ONE_DAY + 1; - long offsetFromEnd = (currentDate - endDate)/ONE_DAY; - - List indexList = new ArrayList<>(); - for(; offsetFromStart >= offsetFromEnd; offsetFromStart--){ - indexList.add(templateName + "_" + DateUtils.getFormatDayByOffset((int)offsetFromStart)); - } - - return StringUtils.join(indexList, ","); - } - - public static boolean indexExpMatch(String index, String exp) { - - if (StringUtils.isBlank(index)) { - return false; - } - - if (StringUtils.isBlank(exp)) { - return false; - } - - int indexPointer = 0; - int expPointer = 0; - - while (expPointer < exp.length()) { - char expC = exp.charAt(expPointer); - - if (expC == '*') { - expPointer++; - boolean expPointerEnd = true; - while (expPointer < exp.length()) { - expC = exp.charAt(expPointer); - if (expC != '*') { - expPointerEnd = false; - break; - } - - expPointer++; - } - - // * is the last char in exp - if (expPointerEnd) { - return true; - } - - int nextStar = exp.indexOf('*', expPointer); - String expInter = null; - if (nextStar < 0) { - expInter = exp.substring(expPointer); - } else { - expInter = exp.substring(expPointer, nextStar); - } - - int indexPos = index.indexOf(expInter, indexPointer); - if (indexPos <= 0) { - return false; - } - - expPointer = expPointer + expInter.length(); - indexPointer = indexPos + expInter.length(); - - } else if (indexPointer < index.length()) { - char indexC = index.charAt(indexPointer); - if (indexC != expC) { - // not the same, failed - return false; - } - - indexPointer++; - expPointer++; - } else { - return false; - } - } - - if (indexPointer < index.length()) { - // index has chars left - return false; - } else { - // index also to end - return true; - } - } - - /** - * 查询的索引名称是否匹配到索引模板 - * - * @param searchIndexName - * @param templateExp - * @return - */ - public static boolean isIndexNameMatchTemplateExp(final String searchIndexName, final String templateExp) { - - if (StringUtils.isBlank(searchIndexName) || StringUtils.isBlank(templateExp)) { - return false; - } - - String tmpTemplateExp = templateExp; - - // 索引表达式不是以*结尾,单个索引没有分区 - if (!tmpTemplateExp.endsWith("*")) { - return isSearchIndexNameMatchNoExpTemplate(searchIndexName, tmpTemplateExp); - } - - // 1. 去除索引模板表达式中的结尾* - tmpTemplateExp = StringUtils.removeEnd(tmpTemplateExp , "*"); - // 2. 用*来切分查询使用的索引名称 - String[] indexSplits = StringUtils.split(searchIndexName , "*"); - - if (indexSplits == null || indexSplits.length == 0) { - return false; - } - - // 查询使用的索引名称不包含* - if (!searchIndexName.endsWith("*") && indexSplits.length <= 1) { - - String trimSearchIndexName = StringUtils.removeEnd(searchIndexName , "*"); - // 去掉_vx版本号信息 - String lastStr = removeIndexNameVersionIfHas(trimSearchIndexName); - - // 去掉查询索引中的索引表达式部分 - String leftStr = lastStr.replace(tmpTemplateExp, ""); - if (StringUtils.isBlank(leftStr)) { - return true; - } - - // 剩余的为时间 - if (isNumbericOrSpecialChar(leftStr)) { - return true; - } - - // 去掉_vx版本号信息 - tmpTemplateExp = removeIndexNameVersionIfHas(tmpTemplateExp); - return lastStr.equals(tmpTemplateExp); - - // 查询使用的索引名称含有*,例如btb_b2b.crius*hna*_2019-03-07 - } else { - String lastStr = indexSplits[indexSplits.length - 1]; - // 去掉_vx版本号信息 - lastStr = removeIndexNameVersionIfHas(lastStr); - indexSplits[indexSplits.length - 1] = lastStr; - - // lastStr是日期,除掉最后一个进行匹配 - if (isNumbericOrSpecialChar(lastStr) - && isMatchIndexPartPositiveSequence(tmpTemplateExp, indexSplits, indexSplits.length - 1)) { - return true; - } - - // 去掉lastStr日期部分 - lastStr = removeIndexNameDateIfHas(lastStr); - if (StringUtils.isBlank(lastStr)) { - - return isMatchIndexPartPositiveSequence(tmpTemplateExp, indexSplits, indexSplits.length - 1); - } else { - indexSplits[indexSplits.length - 1] = lastStr; - - return isMatchIndexPartPositiveSequence(tmpTemplateExp, indexSplits, indexSplits.length); - } - } - } - - /** - * 部分索引切片匹配索引模板是否为正序 - * - * 例如templateExp为ABCDEFG,partIndexName为AB,DE,FG。则匹配 - * - * @param templateExp - * @param partIndexName - * @return - */ - public static boolean isMatchIndexPartPositiveSequence(String templateExp, String[] partIndexName, int compareCount) { - // 存在子字符串序号 - List indexList = Lists.newArrayList(); - - for (int i = 0; i < partIndexName.length && i < compareCount; ++i) { - indexList.add(templateExp.indexOf(partIndexName[i])); - } - - Integer lastIndex = null; - for (int i = 0; i < indexList.size(); ++i) { - // 不包含其中一个子串,则整体不匹配 - if (indexList.get(i) < 0) { - return false; - } - if (lastIndex == null) { - lastIndex = indexList.get(i); - } else { - if (indexList.get(i) >= lastIndex) { - lastIndex = indexList.get(i); - } else { - // 后一个的序号小于前一个,则整体不匹配 - return false; - } - } - } - - // 如果只有一个序号, 匹配部分为索引表达式中间 - if (indexList.size() == 1 && indexList.get(0) > 0) { - return false; - } - - return true; - } - - /** - * 如果有版本号信息,则移除版本号字符串 - * - * @param lastIndexNamePart - * @return - */ - public static String removeIndexNameVersionIfHas(String lastIndexNamePart) { - // 是否含有_vx版本号数据 - int index = lastIndexNamePart.lastIndexOf("_v"); - if (index > 0) { - // 去掉_v - String endStr = lastIndexNamePart.substring(index + 2); - // _v之后是不是数字 - if (StringUtils.isNumeric(endStr)) { - // 是数字,去掉版本号 - return lastIndexNamePart.substring(0, index); - } - } - - return lastIndexNamePart; - } - - /** - * 是否是数字或者特殊字符 - * - * @param lastIndexNamePart - * @return - */ - public static boolean isNumbericOrSpecialChar(String lastIndexNamePart) { - for (int i = 0; i < lastIndexNamePart.length(); ++i) { - char c = lastIndexNamePart.charAt(i); - // 是数字或者-,_ - if (Character.isDigit(c) || c == '-' || c == '_') { - continue; - } else { - return false; - } - } - - return true; - } - - /** - * 如果有日期信息,则移除日期 - * - * @param lastIndexNamePart - * @return - */ - public static String removeIndexNameDateIfHas(String lastIndexNamePart) { - - int index = lastIndexNamePart.lastIndexOf("_"); - if (index >= 0) { - String endStr = lastIndexNamePart.substring(index + 1); - // 剩余部分是日期,则移除 - if (isNumbericOrSpecialChar(endStr)) { - return lastIndexNamePart.substring(0, index); - } - } else { - if (isNumbericOrSpecialChar(lastIndexNamePart)) { - return ""; - } - } - - return lastIndexNamePart; - } - - /** - * 查询索引是否匹配没有时间分区的索引模板表达式 - * - * @param searchIndexName - * @param templateExp 索引表达式不带* - * @return - */ - public static boolean isSearchIndexNameMatchNoExpTemplate(final String searchIndexName, final String templateExp) { - - if (StringUtils.isBlank(searchIndexName) || StringUtils.isBlank(templateExp)) { - return false; - } - - // 1. 用*来切分查询使用的索引名称 - String[] indexSplits = StringUtils.split(searchIndexName , "*"); - - if (indexSplits == null || indexSplits.length == 0) { - return false; - } - - // 查询使用的索引名称不包含* - if (!searchIndexName.endsWith("*") && indexSplits.length <= 1) { - String trimSearchIndexName = StringUtils.removeEnd(searchIndexName , "*"); - // 如果查询索引名称和索引表达式相同,例如arius.dsl.template -> arius.dsl.template - return trimSearchIndexName.equals(templateExp); - } else { - // 查看*分隔之后最后一个分段 - - // 去掉_vx版本号信息 - String lastStr = removeIndexNameVersionIfHas(indexSplits[indexSplits.length - 1]); - indexSplits[indexSplits.length - 1] = lastStr; - - // *之后为空串 - if (StringUtils.isBlank(lastStr)) { - // 各个分段进行匹配 - return isMatchIndexPartPositiveSequence(templateExp, indexSplits, indexSplits.length - 1); - } - - // 如果lastStr包含_,而索引表达式不包含_ - if (lastStr.contains("_") && !templateExp.contains("_")) { - return false; - } - - // lastStr是日期 - if (isNumbericOrSpecialChar(lastStr)) { - return false; - } - - // 各个分段进行匹配 - return isMatchIndexPartPositiveSequence(templateExp, indexSplits, indexSplits.length); - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/KafkaConsumerFactory.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/KafkaConsumerFactory.java deleted file mode 100644 index d0764f4a..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/KafkaConsumerFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy; -import org.apache.commons.pool2.BasePooledObjectFactory; -import org.apache.commons.pool2.PooledObject; -import org.apache.commons.pool2.impl.DefaultPooledObject; -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.apache.kafka.clients.consumer.KafkaConsumer; - -import java.util.Properties; - -/** - * KafkaConsumer工厂 - * @author zengqiao - * @date 20/8/24 - */ -public class KafkaConsumerFactory extends BasePooledObjectFactory> { - private final ClusterPhy clusterPhy; - - public KafkaConsumerFactory(ClusterPhy clusterPhy) { - this.clusterPhy = clusterPhy; - } - - @Override - public KafkaConsumer create() { - return new KafkaConsumer<>(createClientProperties(clusterPhy)); - } - - @Override - public PooledObject> wrap(KafkaConsumer obj) { - return new DefaultPooledObject<>(obj); - } - - @Override - public void destroyObject(final PooledObject> p) throws Exception { - KafkaConsumer kafkaConsumer = p.getObject(); - if (ValidateUtils.isNull(kafkaConsumer)) { - return; - } - - kafkaConsumer.close(); - } - - private static Properties createClientProperties(ClusterPhy clusterPhy) { - Properties properties = new Properties(); - properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, clusterPhy.getBootstrapServers()); - properties.setProperty( - ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, - "org.apache.kafka.common.serialization.StringDeserializer"); - properties.setProperty( - ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, - "org.apache.kafka.common.serialization.StringDeserializer"); - properties.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 10000); - properties.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, 15000); - properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); - if (ValidateUtils.isBlank(clusterPhy.getClientProperties())) { - return properties; - } - - properties.putAll(ConvertUtil.str2ObjByJson(clusterPhy.getClientProperties(), Properties.class)); - return properties; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/LoggerUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/LoggerUtil.java deleted file mode 100644 index d8de462e..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/LoggerUtil.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; - -public class LoggerUtil { - private static final ILog MetricCollectedLogger = LogFactory.getLog("METRIC_COLLECTED_LOGGER"); - - private static final ILog ESLogger = LogFactory.getLog("ES_LOGGER"); - - public static ILog getMetricCollectedLogger() { - return MetricCollectedLogger; - } - - public static ILog getESLogger() { - return ESLogger; - } - - private LoggerUtil() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MetricsUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MetricsUtils.java deleted file mode 100644 index 88c514ab..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MetricsUtils.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.google.common.collect.Lists; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -/** - * Created by linyunan on 2021-08-05 - */ -public class MetricsUtils { - private static final long ONE_HOUR = 60 * 60 * 1000L; - private static final long THREE_HOUR = 3 * 60 * 60 * 1000L; - private static final long SIX_HOUR = 6 * 60 * 60 * 1000L; - private static final long ONE_DAY = 24 * 60 * 60 * 1000L; - private static final long SEVEN_DAY = 7 * 24 * 60 * 60 * 1000L; - private static final char COLON = ':'; - private static final char SPACE = ' '; - - public static String getInterval(Long intervalTime) { - if (intervalTime > 0 && intervalTime <= SIX_HOUR) { - return Interval.ONE_MIN.getStr(); - } else if (intervalTime > SIX_HOUR && intervalTime <= ONE_DAY) { - return Interval.TEN_MIN.getStr(); - } else if (intervalTime > ONE_DAY && intervalTime <= SEVEN_DAY) { - return Interval.ONE_HOUR.getStr(); - } else if (intervalTime > SEVEN_DAY) { - return Interval.ONE_HOUR.getStr(); - } else { - return Interval.ONE_HOUR.getStr(); - } - } - - /** - * 获取时间点对应聚合时间段 - * @param intervalTime - * @param timePoint - * @return - */ - public static Tuple getSortInterval(Long intervalTime, long timePoint) { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(timePoint); - cal.set( Calendar.SECOND, 0); - cal.set( Calendar.MILLISECOND, 0); - if (intervalTime > 0 && intervalTime <= ONE_HOUR) { - long tuple1 = cal.getTimeInMillis(); - return new Tuple<>(tuple1 - 60 * 1000, tuple1); - } else if (intervalTime > ONE_HOUR && intervalTime <= ONE_DAY) { - int minute = cal.get( Calendar.MINUTE); - int start = 0; - int end = 20; - if (minute > 20 && minute <= 40) { - start = 20; - end = 40; - } else if (minute > 40 && minute <= 60){ - start = 40; - end = 60; - } - cal.set( Calendar.MINUTE, start); - long tuple1 = cal.getTimeInMillis(); - cal.set( Calendar.MINUTE, end); - long tuple2 = cal.getTimeInMillis(); - return new Tuple<>(tuple1, tuple2); - } else { - cal.set( Calendar.MINUTE, 0); - long tuple1 = cal.getTimeInMillis(); - return new Tuple<>(tuple1, tuple1 + 60 * 60 * 1000); - } - } - - /** - * 获取时刻所属的聚合区间, 如按20m间隔, 则聚合区间在0 ~ 20 , 20 ~ 40 , 40 ~ 60 - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param delayTime 针对分钟级别间隔的延迟时间 20分钟和小时级别不做延迟 - * @return - */ - public static Tuple getSortInterval(Long startTime, Long endTime, Long delayTime) { - String dateTimeStr = DateUtils.getDateTimeStr(endTime); - String[] dateTimeArr = StringUtils.split(dateTimeStr, SPACE); - String date = null; - String startHourStr = null; - String endHourStr; - String startMinuteStr = null; - String endMinuteStr = null; - if (dateTimeArr.length > 0) { - date = dateTimeArr[0]; - String time = dateTimeArr[1]; - String[] timeArr = StringUtils.split(time, COLON); - if (timeArr.length > 1) { - startHourStr = timeArr[0]; - startMinuteStr = timeArr[1]; - } - } - - String interval = getInterval(endTime - startTime); - if (Interval.ONE_MIN.getStr().equals(interval)) { - endHourStr = startHourStr; - endMinuteStr = String.valueOf( Integer.valueOf(startMinuteStr) + 1); - return buildIntervalTuple(date, startHourStr, endHourStr, startMinuteStr, endMinuteStr, delayTime); - } else if (Interval.TWENTY_MIN.getStr().equals(interval)) { - int startMinute = Integer.valueOf(startMinuteStr); - endHourStr = startHourStr; - if (0 <= startMinute && startMinute <= 20) { - startMinuteStr = "00"; - endMinuteStr = "20"; - } else if (20 < startMinute && startMinute <= 40) { - startMinuteStr = "20"; - endMinuteStr = "40"; - } else if (40 < startMinute && startMinute <= 59) { - startMinuteStr = "40"; - endMinuteStr = "60"; - } - return buildIntervalTuple(date, startHourStr, endHourStr, startMinuteStr, endMinuteStr,null); - } else if (Interval.ONE_HOUR.getStr().equals(interval)) { - endHourStr = String.valueOf( Integer.valueOf(startHourStr) + 1); - startMinuteStr = "00"; - endMinuteStr = "00"; - return buildIntervalTuple(date, startHourStr, endHourStr, startMinuteStr, endMinuteStr,null); - } else { - return new Tuple<>(); - } - } - - public static Tuple buildIntervalTuple(String date, String startHourStr, String endHourStr, - String startMinuteStr, String endMinuteStr, Long delayTime) { - Tuple t = new Tuple<>(); - StringBuilder startDateSb = new StringBuilder(); - StringBuilder endDateSb = new StringBuilder(); - - startDateSb.append(date).append(" ").append(startHourStr).append(":").append(startMinuteStr).append(":").append("00"); - endDateSb.append(date).append(" ").append(endHourStr).append(":").append(endMinuteStr).append(":").append("00"); - Long startTime = DateUtils.getTimeEpochMilli(startDateSb.toString()); - Long endTime = DateUtils.getTimeEpochMilli(endDateSb.toString()); - - if(null != delayTime) { - startTime = startTime - delayTime; - endTime = endTime - delayTime; - } - - t.setV1(startTime); - t.setV2(endTime); - return t; - } - - public static Double getDoubleValuePerMin(String interval, String value) { - if (Interval.ONE_MIN.getStr().equals(interval)) { - return Double.valueOf(value); - } else if (Interval.TWENTY_MIN.getStr().equals(interval)) { - return Double.valueOf(value) / 20.00; - } else if (Interval.ONE_HOUR.getStr().equals(interval)) { - return Double.valueOf(value) / 60.00; - } - return Double.valueOf(value); - } - - /** - * 计算一段时间内,时间分片 - * @param startTime - * @param endTime - * @param interval - * @param dateUnit Calendar.MINUTE||Calendar.SECOND||Calendar.HOUR - * @return - */ - public static List timeRange(long startTime, long endTime, long interval, int dateUnit) { - long step = interval * 1000 * 60; - if (dateUnit == Calendar.HOUR) { - step = interval * 1000 * 60 * 60; - } else if (dateUnit == Calendar.SECOND) { - step = interval * 1000; - } - startTime = startTime / 1000 * 1000; - endTime = endTime / 1000 * 1000; - if (endTime < startTime) { - return new ArrayList<>(0); - } - - List list = Lists.newArrayList(); - while (endTime >= startTime) { - list.add(endTime); - endTime -= step; - } - - return list; - } - - public enum MetricsTimeType { - - MINUTE("minute"), TWENTY_MINUTES("twentyMinutes"), HOUR("hour"); - - private String str; - - private MetricsTimeType(String str) { - this.str = str; - } - - public String getStr() { - return str; - } - - public static MetricsUtils.MetricsTimeType getByStr(String str) { - for (MetricsUtils.MetricsTimeType type : MetricsUtils.MetricsTimeType.values()) { - if (type.str.equalsIgnoreCase(str)) { - return type; - } - } - - return null; - } - } - - public enum Interval { - - ONE_MIN("1m"), TEN_MIN("10m"), TWENTY_MIN("20m"), ONE_HOUR("1h"); - - private String str; - - private Interval(String str) { - this.str = str; - } - - public String getStr() { - return str; - } - - public static MetricsUtils.Interval getByStr(String str) { - for (MetricsUtils.Interval type : MetricsUtils.Interval.values()) { - if (type.str.equalsIgnoreCase(str)) { - return type; - } - } - - return null; - } - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MirrorMakerUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MirrorMakerUtil.java deleted file mode 100644 index d8145832..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/MirrorMakerUtil.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -public class MirrorMakerUtil { - public static String genCheckpointName(String sourceName) { - return sourceName == null? "-checkpoint": sourceName + "-checkpoint"; - } - - public static String genHeartbeatName(String sourceName) { - return sourceName == null? "-heartbeat": sourceName + "-heartbeat"; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NamedThreadFactory.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NamedThreadFactory.java deleted file mode 100644 index 5008d7f4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NamedThreadFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import java.util.Locale; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * A default {@link ThreadFactory} implementation that accepts the name prefix - * of the created threads as a constructor argument. Otherwise, this factory - * yields the same semantics as the thread factory returned by - * {@link Executors#defaultThreadFactory()}. - */ -public class NamedThreadFactory implements ThreadFactory { - private static final AtomicInteger threadPoolNumber = new AtomicInteger(1); - private final ThreadGroup group; - private final AtomicInteger threadNumber = new AtomicInteger(1); - private static final String NAME_PATTERN = "%s-%d-thread"; - private final String threadNamePrefix; - - /** - * Creates a new {@link NamedThreadFactory} instance - * - * @param threadNamePrefix the name prefix assigned to each thread created. - */ - public NamedThreadFactory(String threadNamePrefix) { - final SecurityManager s = System.getSecurityManager(); - group = (s != null) ? s.getThreadGroup() : Thread.currentThread() - .getThreadGroup(); - this.threadNamePrefix = String.format(Locale.ROOT, NAME_PATTERN, - checkPrefix(threadNamePrefix), threadPoolNumber.getAndIncrement()); - } - - private static String checkPrefix(String prefix) { - return prefix == null || prefix.length() == 0 ? "Lucene" : prefix; - } - - /** - * Creates a new {@link Thread} - * - * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable) - */ - @Override - public Thread newThread(Runnable r) { - final Thread t = new Thread(group, r, String.format(Locale.ROOT, "%s-%d", - this.threadNamePrefix, threadNumber.getAndIncrement()), 0); - t.setDaemon(false); - t.setPriority(Thread.NORM_PRIORITY); - return t; - } - -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NetUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NetUtils.java deleted file mode 100644 index b601dc43..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/NetUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import java.net.Inet4Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.util.Enumeration; - -/** - * @author zengqiao - * @date 20/6/8 - */ -public class NetUtils { - private static String ipCache = null; - private static String hostCache = null; - private static String macCache = null; - - public static String localMac() { - if (!ValidateUtils.isBlank(macCache)) { - return macCache; - } - - initLocalCache(); - return macCache; - } - - public static String localIp() { - if (!ValidateUtils.isBlank(ipCache)) { - return ipCache; - } - - initLocalCache(); - return ipCache; - } - - public static String localHost() { - if (!ValidateUtils.isNull(hostCache)) { - return hostCache; - } - - initLocalCache(); - return hostCache; - } - - public static Boolean hostLegal(String hostname) { - if (ValidateUtils.isExistBlank(hostname)) { - return false; - } - - hostname = hostname.trim(); - try { - InetAddress.getByName(hostname); - } catch (Exception e) { - return false; - } - return true; - } - - private static void initLocalCache() { - try { - InetAddress inetAddress = getInetAddress(); - if (inetAddress == null) { - return; - } - - hostCache = inetAddress.getHostName(); - ipCache = inetAddress.getHostAddress(); - - //获取网卡,获取地址 - byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress(); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < mac.length; i++) { - if (i != 0) { - sb.append("-"); - } - - //字节转换为整数 - int temp = mac[i] & 0xff; - String str = Integer.toHexString(temp); - if (str.length() == 1) { - sb.append("0" + str); - } else { - sb.append(str); - } - } - - macCache = sb.toString(); - } catch (Exception e) { - // ignore - } - } - - private static InetAddress getInetAddress() { - try { - Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); - while (allNetInterfaces.hasMoreElements()) { - NetworkInterface netInterface = allNetInterfaces.nextElement(); - Enumeration addresses = netInterface.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress ip = addresses.nextElement(); - if (ip != null - && ip instanceof Inet4Address - && !ip.isLoopbackAddress() //loopback地址即本机地址,IPv4的loopback范围是127.0.0.0 ~ 127.255.255.255 - && ip.getHostAddress().indexOf(":") == -1) { - return ip; - } - } - } - } catch (Exception e) { - // ignore - } - return null; - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationMetricsUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationMetricsUtil.java deleted file mode 100644 index 430ea9c4..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationMetricsUtil.java +++ /dev/null @@ -1,350 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationPreciseFilterFieldDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationRangeFilterFieldDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import org.apache.commons.lang.reflect.FieldUtils; - -import java.lang.reflect.Field; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 分页工具 - * @author zengqiao - * @date 21/08/25 - */ -public class PaginationMetricsUtil { - private static final ILog log = LogFactory.getLog(PaginationMetricsUtil.class); - - private PaginationMetricsUtil() { - } - - public static List preciseFilterMetrics(List allDataList, List preciseFilterFieldDTOList) { - return preciseFilterMetricList(allDataList, preciseFilterFieldDTOList); - } - - public static List rangeFilterMetrics(List allDataList, List rangeFilterDTOList) { - return rangeFilterMetricList(allDataList, rangeFilterDTOList); - } - - public static List sortMetrics(List allDataList, String metricField, String metricName, String defaultSortField, String sortType) { - sortMetricList(allDataList, metricField, metricName, defaultSortField, sortType); - - return allDataList; - } - - //比较metricNameList中第一个不为空的metric值。 - public static void sortMetrics(List allDataList, String metricField, List metricNameList, String defaultSortField, String sortType) { - sortMetricList(allDataList, metricField, metricNameList, defaultSortField, sortType); - } - - public static List sortMetrics(List allDataList, String metricName, String defaultSortField, String sortType) { - sortMetricList(allDataList, metricName, defaultSortField, sortType); - - return allDataList; - } - - - /**************************************************** private method ****************************************************/ - - - private static List preciseFilterMetricList(List allDataList, List preciseFilterDTOList) { - if (ValidateUtils.isEmptyList(allDataList) || ValidateUtils.isEmptyList(preciseFilterDTOList)) { - return allDataList; - } - - for (PaginationPreciseFilterFieldDTO preciseFilterFieldDTO: preciseFilterDTOList) { - if (ValidateUtils.isEmptyList(preciseFilterFieldDTO.getFieldValueList())) { - continue; - } - - if (!checkMetricNameExist(allDataList, preciseFilterFieldDTO.getFieldName())) { - continue; - } - - List floatList = preciseFilterFieldDTO.getFieldValueList().stream().map(elem -> ConvertUtil.string2Float(elem)).filter(data -> data != null).collect(Collectors.toList()); - if (floatList == null || floatList.isEmpty()) { - continue; - } - - allDataList = allDataList.stream().filter(elem -> { - Float metricValue = elem.getMetric(preciseFilterFieldDTO.getFieldName()); - if (metricValue == null) { - return false; - } - - return floatList.contains(metricValue); - }).collect(Collectors.toList()); - } - - return allDataList; - } - - - private static List rangeFilterMetricList(List allDataList, List rangeFilterDTOList) { - if (ValidateUtils.isEmptyList(allDataList) || ValidateUtils.isEmptyList(rangeFilterDTOList)) { - return allDataList; - } - - for (PaginationRangeFilterFieldDTO rangeFilterFieldDTO: rangeFilterDTOList) { - if (!checkMetricNameExist(allDataList, rangeFilterFieldDTO.getFieldName())) { - continue; - } - - Float fieldMinValue = ConvertUtil.string2Float(rangeFilterFieldDTO.getFieldMinValue()); - Float fieldMaxValue = ConvertUtil.string2Float(rangeFilterFieldDTO.getFieldMaxValue()); - if (fieldMinValue == null || fieldMaxValue == null) { - // 值不存在或者非法,则直接忽略 - continue; - } - - allDataList = allDataList.stream().filter(elem -> { - Float metricValue = elem.getMetric(rangeFilterFieldDTO.getFieldName()); - if (metricValue != null && fieldMinValue <= metricValue && metricValue <= fieldMaxValue) { - // 满足范围要求 - return true; - } - - return false; - }).collect(Collectors.toList()); - } - - return allDataList; - } - - private static List sortMetricList(List allDataList, String metricFieldName, String metricName, String defaultFieldName, String sortType) { - if (ValidateUtils.anyBlank(metricName, defaultFieldName, sortType) || ValidateUtils.isEmptyList(allDataList)) { - return allDataList; - } - - try { - Field metricField = FieldUtils.getField(allDataList.get(0).getClass(), metricFieldName, true); - Field defaultField = FieldUtils.getField(allDataList.get(0).getClass(), defaultFieldName, true); - if(ValidateUtils.anyNull(defaultField, metricField)) { - log.debug("method=sortMetrics||className={}||metricFieldName={}||metricName={}||defaultFieldName={}||metricSortType={}||msg=field not exist.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricName, defaultFieldName, sortType); - - // 字段不存在,则排序失效,直接返回 - return allDataList; - } - - Collections.sort(allDataList, (a1, a2) -> { - try { - Object m1 = FieldUtils.readField(a1, metricField.getName(), true); - Object m2 = FieldUtils.readField(a2, metricField.getName(), true); - - return sortMetricsObject((BaseMetrics)m1, (BaseMetrics)m2, metricName, defaultField); - } catch (Exception e) { - log.error("method=sortMetrics||className={}||metricFieldName={}||metricName={}||defaultFieldName={}||metricSortType={}||errMsg=exception.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricName, defaultFieldName, sortType, e); - } - - return 0; - }); - } catch (Exception e) { - log.error("method=sortMetrics||className={}||metricFieldName={}||metricName={}||defaultFieldName={}||metricSortType={}||errMsg=exception.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricName, defaultFieldName, sortType, e); - } - - if (!SortTypeEnum.DESC.getSortType().equals(sortType)) { - Collections.reverse(allDataList); - } - return allDataList; - } - - private static List sortMetricList(List allDataList, String metricFieldName, List metricNameList, String defaultFieldName, String sortType) { - if (ValidateUtils.anyBlank(defaultFieldName, sortType) || ValidateUtils.isEmptyList(allDataList)||ValidateUtils.isEmptyList(metricNameList)) { - return allDataList; - } - - try { - Field metricField = FieldUtils.getField(allDataList.get(0).getClass(), metricFieldName, true); - Field defaultField = FieldUtils.getField(allDataList.get(0).getClass(), defaultFieldName, true); - if(ValidateUtils.anyNull(defaultField, metricField)) { - log.debug("method=sortMetrics||className={}||metricFieldName={}||metricNameList={}||defaultFieldName={}||metricSortType={}||msg=field not exist.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricNameList, defaultFieldName, sortType); - - // 字段不存在,则排序失效,直接返回 - return allDataList; - } - - Collections.sort(allDataList, (a1, a2) -> { - try { - Object m1 = FieldUtils.readField(a1, metricField.getName(), true); - Object m2 = FieldUtils.readField(a2, metricField.getName(), true); - - return compareFirstNotNullMetricValue((BaseMetrics)m1, (BaseMetrics)m2, metricNameList, defaultField); - } catch (Exception e) { - log.error("method=sortMetrics||className={}||metricFieldName={}||metricNameList={}||defaultFieldName={}||metricSortType={}||errMsg=exception.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricNameList, defaultFieldName, sortType, e); - } - - return 0; - }); - } catch (Exception e) { - log.error("method=sortMetrics||className={}||metricFieldName={}||metricNameList={}||defaultFieldName={}||metricSortType={}||errMsg=exception.", - allDataList.get(0).getClass().getSimpleName(), metricFieldName, metricNameList, defaultFieldName, sortType, e); - } - - if (!SortTypeEnum.DESC.getSortType().equals(sortType)) { - Collections.reverse(allDataList); - } - return allDataList; - } - - private static int compareFirstNotNullMetricValue(BaseMetrics a1, BaseMetrics a2, List metricNameList, Field defaultField) { - try { - // 指标数据排序 - Float m1 = null; - Float m2 = null; - - //获取第一个非空指标 - for (String metric : metricNameList) { - m1 = a1.getMetric(metric); - if (m1 != null) { - break; - } - } - for (String metric : metricNameList) { - m2 = a2.getMetric(metric); - if (m2 != null) { - break; - } - } - - if (m1 != null && m2 == null) { - return -1; - } else if (m1 == null && m2 != null) { - return 1; - } else if (m1 != null && m2 != null) { - // 两个都不为空,则进行大小比较 - int val = compareObject(m2, m1); - if (val != 0) { - return val; - } - } - - // 默认字段排序 - Object f1 = FieldUtils.readField(a1, defaultField.getName(), true); - Object f2 = FieldUtils.readField(a2, defaultField.getName(), true); - if (f1 != null && f2 != null) { - // 两个都不为空,则进行大小比较 - return compareObject(f2, f1); - } - if (f1 != null) { - return -1; - } else if (f2 != null) { - return 1; - } - - return 0; - } catch (Exception e) { - log.debug("method=sortMetricsObject||metricsA={}||metricsB={}||metricNameList={}||defaultFieldName={}||errMsg=exception.", - a1, a2, metricNameList, defaultField.getName(), e); - } - - return 0; - } - - - - private static List sortMetricList(List allDataList, String metricName, String defaultSortField, String sortType) { - if (ValidateUtils.anyBlank(metricName, defaultSortField, sortType) || ValidateUtils.isEmptyList(allDataList)) { - return allDataList; - } - - if (!checkMetricNameExist(allDataList, metricName)) { - return allDataList; - } - - try { - Field defaultField = FieldUtils.getField(allDataList.get(0).getClass(), defaultSortField, true); - if(ValidateUtils.anyNull(defaultField)) { - log.debug("method=sortMetrics||className={}||metricName={}||defaultFieldName={}||metricSortType={}||msg=default field not exist.", - allDataList.get(0).getClass().getSimpleName(), metricName, defaultSortField, sortType); - - // 字段不存在,则排序失效,直接返回 - return allDataList; - } - - Collections.sort(allDataList, (a1, a2) -> sortMetricsObject(a1, a2, metricName, defaultField)); - } catch (Exception e) { - log.debug("method=sortMetrics||className={}||metricName={}||defaultFieldName={}||metricSortType={}||errMsg=exception.", - allDataList.get(0).getClass().getSimpleName(), metricName, defaultSortField, sortType, e); - } - - if (!SortTypeEnum.DESC.getSortType().equals(sortType)) { - Collections.reverse(allDataList); - } - return allDataList; - } - - private static int sortMetricsObject(BaseMetrics a1, BaseMetrics a2, String metricName, Field defaultField) { - try { - // 指标数据排序 - Float m1 = a1.getMetric(metricName); - Float m2 = a2.getMetric(metricName); - if (m1 != null && m2 == null) { - return -1; - } else if (m1 == null && m2 != null) { - return 1; - } else if (m1 != null && m2 != null) { - // 两个都不为空,则进行大小比较 - int val = compareObject(m2, m1); - if (val != 0) { - return val; - } - } - - // 默认字段排序 - Object f1 = FieldUtils.readField(a1, defaultField.getName(), true); - Object f2 = FieldUtils.readField(a2, defaultField.getName(), true); - if (f1 != null && f2 != null) { - // 两个都不为空,则进行大小比较 - return compareObject(f2, f1); - } - if (f1 != null) { - return -1; - } else if (f2 != null) { - return 1; - } - - return 0; - } catch (Exception e) { - log.debug("method=sortMetricsObject||metricsA={}||metricsB={}||metricName={}||defaultFieldName={}||errMsg=exception.", - a1, a2, metricName, defaultField.getName(), e); - } - - return 0; - } - - private static int compareObject(Object v1, Object v2) { - if (v1 instanceof Integer) { - return (((Integer) v1).compareTo((Integer) v2)); - } - if (v1 instanceof Long) { - return (((Long) v1).compareTo((Long) v2)); - } - if (v1 instanceof Date) { - return ((Date) v1).compareTo((Date) v2); - } - if (v1 instanceof Float) { - return (((Float) v1).compareTo((Float) v2)); - } - if (v1 instanceof Double) { - return (((Double) v1).compareTo((Double) v2)); - } - if (v1 instanceof String) { - return ((String) v1).compareTo((String) v2); - } - return 0; - } - - private static boolean checkMetricNameExist(List baseMetrics, String metricName) { - return baseMetrics.stream().anyMatch(elem -> elem.getMetric(metricName) != null); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationUtil.java deleted file mode 100644 index 9e776317..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/PaginationUtil.java +++ /dev/null @@ -1,315 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO; -import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.field.PaginationPreciseFilterFieldDTO; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult; -import com.xiaojukeji.know.streaming.km.common.enums.SortTypeEnum; -import org.apache.commons.lang.reflect.FieldUtils; - -import java.lang.reflect.Field; -import java.util.*; - -/** - * 分页工具 - * @author zengqiao - * @date 21/08/25 - */ -public class PaginationUtil { - private static final ILog log = LogFactory.getLog(PaginationUtil.class); - - private PaginationUtil() { - } - - /** - * 分页 - */ - public static PaginationResult pageBySubData(List allDataList, PaginationBaseDTO dto) { - return directSubList(allDataList, dto); - } - - public static List directSubList(List allDataList, Integer pageNo, Integer pageSize) { - if (ValidateUtils.isNull(allDataList)) { - allDataList = Collections.emptyList(); - } - - int startIdx = Math.min((pageNo - 1) * pageSize, allDataList.size()); - int endIdx = Math.min(startIdx + pageSize, allDataList.size()); - - return allDataList.subList(startIdx, endIdx); - } - - - /** - * 模糊搜索 - */ - public static List pageByFuzzyFilter(List allDataList, String searchKeywords, List fuzzySearchFields) { - List newAllDataList = fuzzyFilter(allDataList, fuzzySearchFields, searchKeywords); - if (newAllDataList == null) { - return Collections.emptyList(); - } - - return newAllDataList; - } - - - /** - * 排序 - */ - public static List pageBySort(List allDataList, String firstSortField, String firstSortType) { - if (ValidateUtils.anyBlank(firstSortField, firstSortType)) { - return allDataList; - } - - sort(allDataList, firstSortField, firstSortType, firstSortField, firstSortType); - - return allDataList; - } - - public static List pageBySort(List allDataList, String firstSortField, String firstSortType, String defaultSortField, String defaultSortType) { - if (ValidateUtils.anyBlank(firstSortField, firstSortType, defaultSortField, defaultSortType)) { - return allDataList; - } - - sort(allDataList, firstSortField, firstSortType, defaultSortField, defaultSortType); - - return allDataList; - } - - - /** - * 精确过滤 - */ - public static List pageByPreciseFilter(List allDataList, List dtoList) { - if (ValidateUtils.isEmptyList(allDataList)) { - return new ArrayList<>(); - } - - // 精确搜索 - List newAllDataList = preciseFilter(allDataList, dtoList); - if (newAllDataList == null) { - return new ArrayList<>(); - } - - return newAllDataList; - } - - public static List pageByPreciseFilter(List allDataList, String fieldName, List fieldValueList) { - if (ValidateUtils.isEmptyList(allDataList)) { - return new ArrayList<>(); - } - - PaginationPreciseFilterFieldDTO dto = new PaginationPreciseFilterFieldDTO(); - dto.setFieldName(fieldName); - dto.setFieldValueList(fieldValueList); - - // 精确搜索 - List newAllDataList = preciseFilter(allDataList, Arrays.asList(dto)); - if (newAllDataList == null) { - return new ArrayList<>(); - } - - return newAllDataList; - } - - - - - ////////// - // - // --------数据操作子类------------------ - // - ///////// - - private static List fuzzyFilter(List allDataList, List fuzzySearchFieldList, String searchKeywords) { - if (ValidateUtils.isEmptyList(allDataList) || ValidateUtils.isEmptyList(fuzzySearchFieldList) || ValidateUtils.isBlank(searchKeywords)) { - return allDataList; - } - - List fieldList = new ArrayList<>(); - - for (String fuzzySearchField: fuzzySearchFieldList) { - // step1 获取field - Field field = FieldUtils.getField(allDataList.get(0).getClass(), fuzzySearchField, true); - if(ValidateUtils.anyNull(field)) { - log.debug("fuzzy filter failed, field not exist, className:{} fieldName:{}.", allDataList.get(0).getClass().getSimpleName(), fuzzySearchField); - continue; - } - fieldList.add(field); - } - - if (fieldList.isEmpty()) { - return allDataList; - } - - List filteredDataList = new ArrayList<>(); - for (T elem: allDataList) { - if (fuzzyFilter(elem, fieldList, searchKeywords)) { - filteredDataList.add(elem); - } - } - - return filteredDataList; - } - - private static boolean fuzzyFilter(T data, List fieldList, String searchKeywords) { - for (Field field: fieldList) { - Object fieldValue = null; - try { - fieldValue = FieldUtils.readField(data, field.getName(), true); - } catch (Exception e) { - log.debug("fuzzy filter failed, className:{} fieldName:{}.", data.getClass().getSimpleName(), field.getName(), e); - } - - if (null == fieldValue) { - continue; - } - - if (String.valueOf(fieldValue).contains(searchKeywords)) { - return true; - } - } - return false; - } - - private static List preciseFilter(List allDataList, List filterFieldDTOList) { - if (null == filterFieldDTOList) { - return allDataList; - } - - List filteredDataList = allDataList; - for (PaginationPreciseFilterFieldDTO dto: filterFieldDTOList) { - // step1 获取field - Field field = FieldUtils.getField(allDataList.get(0).getClass(), dto.getFieldName(), true); - if(ValidateUtils.anyNull(field)) { - log.debug("precise filter failed, field not exist, className:{} fieldName:{}.", allDataList.get(0).getClass().getSimpleName(), dto.getFieldName()); - continue; - } - - filteredDataList = preciseFilter(filteredDataList, field, dto.getFieldValueList()); - if (filteredDataList.isEmpty()) { - return filteredDataList; - } - } - return filteredDataList; - } - - private static List preciseFilter(List allDataList, Field field, List filterFieldValueList) { - if (ValidateUtils.isEmptyList(filterFieldValueList)) { - return allDataList; - } - - List filteredDataList = new ArrayList<>(); - for (T elem: allDataList) { - Object fieldValue = null; - try { - fieldValue = FieldUtils.readField(elem, field.getName(), true); - } catch (Exception e) { - log.debug("precise filter failed, className:{} fieldName:{}.", allDataList.get(0).getClass().getSimpleName(), field.getName(), e); - } - - if (null == fieldValue) { - continue; - } - - for (String filterFieldValue: filterFieldValueList) { - if (String.valueOf(fieldValue).equals(filterFieldValue)) { - filteredDataList.add(elem); - break; - } - } - - } - return filteredDataList; - } - - private static PaginationResult directSubList(List allDataList, PaginationBaseDTO dto) { - if (ValidateUtils.isNull(allDataList)) { - allDataList = Collections.emptyList(); - } - - int startIdx = Math.min((dto.getPageNo() - 1) * dto.getPageSize(), allDataList.size()); - int endIdx = Math.min(startIdx + dto.getPageSize(), allDataList.size()); - - return PaginationResult.buildSuc(allDataList.subList(startIdx, endIdx), allDataList.size(), dto.getPageNo(), dto.getPageSize()); - } - - private static List sort(List allDataList, String sortField, String sortType, String defaultSortField, String defaultSortType) { - if (allDataList == null || allDataList.isEmpty()) { - return new ArrayList<>(); - } - - try { - if (sortField == null) { - // 如果排序字段不存在,则使用默认的排序字段,及默认的排序规则 - sortField = defaultSortField; - sortType = defaultSortType; - } - - Field firstField = FieldUtils.getField(allDataList.get(0).getClass(), sortField, true); - Field secondField = FieldUtils.getField(allDataList.get(0).getClass(), defaultSortField, true); - if(ValidateUtils.anyNull(firstField, secondField)) { - log.debug("sort failed, field not exist, className:{} firstFieldName:{} secondFieldName:{}.", allDataList.get(0).getClass().getSimpleName(), sortField, defaultSortField); - - // 字段不存在,则排序失效,直接返回 - return allDataList; - } - - Collections.sort(allDataList, (a1, a2) -> sortFuncNotCheckArgsDefaultDesc(a1, a2, firstField, secondField, false)); - } catch (Exception e) { - log.debug("sort failed, className:{} firstFieldName:{} secondFieldName:{}.", allDataList.get(0).getClass().getSimpleName(), sortField, defaultSortField, e); - } - - if (!SortTypeEnum.DESC.getSortType().equals(sortType)) { - Collections.reverse(allDataList); - } - return allDataList; - } - - private static int sortFuncNotCheckArgsDefaultDesc(Object a1, Object a2, Field firstField, Field secondField, boolean end) { - try { - Object v1 = FieldUtils.readField(a1, firstField.getName(), true); - - Object v2 = FieldUtils.readField(a2, firstField.getName(), true); - - if (v1 != null && v2 != null) { - // 两个都不为空,则进行大小比较 - return compareObject(v2, v1); - } - - if (v1 != null) { - return -1; - } else if (v2 != null) { - return 1; - } - - return end? 0: sortFuncNotCheckArgsDefaultDesc(a1, a2, secondField, firstField, true); - } catch (Exception e) { - log.debug("sort failed, className:{} firstFieldName:{} secondFieldName:{}.", a1.getClass().getSimpleName(), firstField.getName(), secondField.getName(), e); - } - return 0; - } - - private static int compareObject(Object v1, Object v2) { - if (v1 instanceof Integer) { - return (((Integer) v1).compareTo((Integer) v2)); - } - if (v1 instanceof Long) { - return (((Long) v1).compareTo((Long) v2)); - } - if (v1 instanceof Date) { - return ((Date) v1).compareTo((Date) v2); - } - if (v1 instanceof Float) { - return (((Float) v1).compareTo((Float) v2)); - } - if (v1 instanceof Double) { - return (((Double) v1).compareTo((Double) v2)); - } - if (v1 instanceof String) { - return ((String) v1).compareTo((String) v2); - } - return 0; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/RetryExecutor.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/RetryExecutor.java deleted file mode 100644 index 8b68a460..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/RetryExecutor.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.exception.BaseException; - -public class RetryExecutor { - private static final ILog LOGGER = LogFactory.getLog(RetryExecutor.class); - - /** - * 最多的重试次数 - */ - private static final int RETRY_MAX = 10; - /** - * 操作名字 - */ - private String name = ""; - /** - * es操作内容 - */ - private Handler handler; - - /** - * 重试次数 - */ - private Integer retryCount = 0; - - /** - * es操作 - * Created by d06679 on 2017/8/24. - */ - - public interface Handler { - /** - * 处理方法 - * @return - * @throws Throwable - */ - boolean process() throws BaseException; - - /*** - * 是否重试 - * @param e 异常 - * @return - */ - default boolean needRetry(Exception e) { - return true; - } - - /** - * 重试Sleep时间间隔 - * @param retryTimes 重试次数 - * @return - */ - default int retrySleepTime(int retryTimes) {return 0;} - } - - public static RetryExecutor builder() { - return new RetryExecutor(); - } - - public RetryExecutor name(String name) { - this.name = name; - return this; - } - - public RetryExecutor handler(Handler handler) { - this.handler = handler; - return this; - } - - public RetryExecutor retryCount(Integer retryCount) { - this.retryCount = (retryCount > RETRY_MAX) ? RETRY_MAX : retryCount; - return this; - } - - /** - * 重试操作,要么handler执行成功有返回值,要么报异常 - * @throws Exception 操作的异常 - */ - public boolean execute() throws Exception { - boolean succ = false; - int tryCount = 0; - do { - try { - int retrySleepTime = handler.retrySleepTime(tryCount); - if(retrySleepTime > 0){ - Thread.sleep(retrySleepTime); - } - - succ = handler.process(); - if (succ) { - return succ; - } - } catch (Exception e) { - if (!handler.needRetry(e) || tryCount == retryCount) { - LOGGER.warn("method=execute||errMsg={}||handlerName={}||tryCount={}", - e.getMessage(), name, tryCount, e); - throw e; - } - - LOGGER.warn("method=execute||errMsg={}||handlerName={}||tryCount={}||maxTryCount={}", - e.getMessage(), name, tryCount,retryCount); - } - } while (tryCount++ < retryCount); - - return succ; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Triple.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Triple.java deleted file mode 100644 index 00d84ce0..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Triple.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -public class Triple { - private T v1; - private V v2; - private U v3; - - public Triple(){} - - public Triple(T v1, V v2, U v3) { - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - - public T v1() { - return v1; - } - - public Triple setV1(T v1) { - this.v1 = v1; - return this; - } - - public V v2() { - return v2; - } - - public Triple setV2(V v2) { - this.v2 = v2; - return this; - } - - public U v3() { - return v3; - } - - public Triple setV3(U v3) { - this.v3 = v3; - return this; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Triple triple = (Triple) o; - - if (v1 != null ? !v1.equals(triple.v1) : triple.v1 != null) {return false;} - if (v2 != null ? !v2.equals(triple.v2) : triple.v2 != null) {return false;} - return v3 != null ? v3.equals(triple.v3) : triple.v3 == null; - } - - @Override - public int hashCode() { - int result = (v1 != null) ? v1.hashCode() : 0; - result = 63 * result + 31 * (v2 != null ? v2.hashCode() : 0) + (v2 != null ? v2.hashCode() : 0); - return result; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Tuple.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Tuple.java deleted file mode 100644 index c4984604..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/Tuple.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import lombok.Data; - -/** - * @Author: D10865 - * @Description: - * @Date: Create on 2018/5/29 下午4:08 - * @Modified By - */ -@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" }) -@Data -public class Tuple { - private T v1; - private V v2; - - public Tuple(){} - - public Tuple(T v1, V v2) { - this.v1 = v1; - this.v2 = v2; - } - - public T v1() { - return v1; - } - - public Tuple setV1(T v1) { - this.v1 = v1; - return this; - } - - public V v2() { - return v2; - } - - public Tuple setV2(V v2) { - this.v2 = v2; - return this; - } - - @Override - public boolean equals(Object o) { - if (this == o) {return true;} - if (o == null || getClass() != o.getClass()) {return false;} - - Tuple tuple = (Tuple) o; - - if (v1 != null ? !v1.equals(tuple.v1) : tuple.v1 != null) {return false;} - return v2 != null ? v2.equals(tuple.v2) : tuple.v2 == null; - } - - @Override - public int hashCode() { - int result = v1 != null ? v1.hashCode() : 0; - result = 31 * result + (v2 != null ? v2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Tuple{" + - "v1=" + v1 + - ", v2=" + v2 + - '}'; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ValidateUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ValidateUtils.java deleted file mode 100644 index fbe94674..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/ValidateUtils.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import org.apache.commons.lang.StringUtils; - -import java.lang.reflect.Array; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * @author zengqiao - * @date 20/4/16 - */ -public class ValidateUtils { - /** - * 任意一个为空, 则返回true - */ - public static boolean anyNull(Object... objects) { - return Arrays.stream(objects).anyMatch(ValidateUtils::isNull); - } - - /** - * 是空字符串或者空 - */ - public static boolean anyBlank(String... strings) { - return Arrays.stream(strings).anyMatch(StringUtils::isBlank); - } - - /** - * 为空 - */ - public static boolean isNull(Object object) { - return object == null; - } - - /** - * 是空字符串或者空 - */ - public static boolean isBlank(String str) { - return StringUtils.isBlank(str); - } - - /** - * 存在空 - */ - public static boolean isExistBlank(String str) { - int strLen; - if (str == null || (strLen = str.length()) == 0) { - return true; - } - for (int i = 0; i < strLen; i++) { - if ((Character.isWhitespace(str.charAt(i)))) { - return true; - } - } - return false; - } - - public static boolean isNotEmpty(T[] array) { - return !isEmpty(array); - } - - public static boolean isEmpty(Object[] array) { - return getLength(array) == 0; - } - - public static int getLength(Object array) { - return array == null ? 0 : Array.getLength(array); - } - - /** - * 是空字符串 - */ - public static boolean equalList(List seq1, List seq2) { - if (isNull(seq1) && isNull(seq2)) { - return true; - } else if (isNull(seq1) || isNull(seq2) || seq1.size() != seq2.size()) { - return false; - } - for (Object elem : seq1) { - if (!seq2.contains(elem)) { - return false; - } - } - return true; - } - - public static boolean isEmptyList(List seq) { - return isNull(seq) || seq.isEmpty(); - } - - public static boolean isEmptySet(Set seq) { - return isNull(seq) || seq.isEmpty(); - } - - public static boolean isEmptyMap(Map seq) { - return isNull(seq) || seq.isEmpty(); - } - - public static boolean isNullOrLessThanZero(Long value) { - return value == null || value < 0; - } - - public static boolean isNullOrLessThanZero(Integer value) { - return value == null || value < 0; - } - - public static boolean isNullOrLessThanZero(Double value) { - return value == null || value < 0; - } - - public static boolean isNullOrLessThanZero(Float value) { - return value == null || value < 0; - } - - private ValidateUtils() { - } -} \ No newline at end of file diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/VersionUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/VersionUtil.java deleted file mode 100644 index 5eeb0a9b..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/VersionUtil.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils; - -import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum; -import org.apache.commons.lang.StringUtils; - - -public class VersionUtil { - /** - * apache的kafka相关的版本信息 - */ - private static final long BASE_VAL = 10000L; - private static final long APACHE_STEP_VAL = 100L; - public static final long APACHE_MAX_VAL = 100000000L; - - private static final int MIN_VERSION_SECTIONS_3 = 3; - private static final int MIN_VERSION_SECTIONS_4 = 4; - private static final String VERSION_FORMAT_3 = "%d.%d.%d"; - private static final String VERSION_FORMAT_4 = "%d.%d.%d.%d"; - - /** - * XiaoJu的kafka相关的版本信息 - */ - private static final String XIAO_JU_VERSION_FEATURE = "-d-"; - private static final String XIAO_JU_VERSION_FORMAT_4 = "%d.%d.%d-d-%d"; - - - /** - * 版本号归一化 - * 先考虑标准的kafka版本号,0.7.x\0.10.0.x\1.0.x\2.2.x.x - * @param version - * @return - */ - public static long normailze(String version) { - if(StringUtils.isBlank(version)) { - return -1; - } - - if (version.contains(XIAO_JU_VERSION_FEATURE)) { - // XiaoJu的kafka - return normalizeXiaoJuVersion(version); - } - - // 检查是否合法 - String[] vers = version.split("\\."); - if(vers.length < MIN_VERSION_SECTIONS_3) { - return -1; - } - for(String ver : vers){ - if(!ver.chars().allMatch(Character::isDigit)){ - return -1; - } - } - - // 转为数字 - long val = -1; - if(MIN_VERSION_SECTIONS_3 == vers.length) { - val = Long.parseLong(vers[0]) * APACHE_STEP_VAL * APACHE_STEP_VAL * APACHE_STEP_VAL + Long.parseLong(vers[1]) * APACHE_STEP_VAL * APACHE_STEP_VAL + Long.parseLong(vers[2]) * APACHE_STEP_VAL; - } else if(MIN_VERSION_SECTIONS_4 == vers.length) { - val = Long.parseLong(vers[0]) * APACHE_STEP_VAL * APACHE_STEP_VAL * APACHE_STEP_VAL + Long.parseLong(vers[1]) * APACHE_STEP_VAL * APACHE_STEP_VAL + Long.parseLong(vers[2]) * APACHE_STEP_VAL + Long.parseLong(vers[3]); - } - - return val == -1? val: val * BASE_VAL; - } - - public static long normalizeXiaoJuVersion(String version) { - if(StringUtils.isBlank(version)) { - return -1; - } - - if (!version.contains(XIAO_JU_VERSION_FEATURE)) { - // 非XiaoJu的kafka - return normailze(version); - } - - String[] vers = version.split(XIAO_JU_VERSION_FEATURE); - if (vers.length < 2) { - return -1; - } - - long apacheVal = normailze(vers[0]); - if (apacheVal == -1) { - return apacheVal; - } - - Long xiaoJuVal = ConvertUtil.string2Long(vers[1]); - if (xiaoJuVal == null) { - return apacheVal; - } - - return apacheVal + xiaoJuVal; - } - - /** - * 版本号反归一化 - * @param version - * @return - */ - public static String dNormailze(long version) { - long version4 = (version / BASE_VAL) % APACHE_STEP_VAL; - long version3 = (version / BASE_VAL / APACHE_STEP_VAL) % APACHE_STEP_VAL; - long version2 = (version / BASE_VAL / APACHE_STEP_VAL / APACHE_STEP_VAL) % APACHE_STEP_VAL; - long version1 = (version / BASE_VAL / APACHE_STEP_VAL / APACHE_STEP_VAL / APACHE_STEP_VAL) % APACHE_STEP_VAL; - - if (version % BASE_VAL != 0) { - return String.format(XIAO_JU_VERSION_FORMAT_4, version1, version2, version3, version % BASE_VAL); - } else if (0 == version4) { - return String.format(VERSION_FORMAT_3, version1, version2, version3); - } else { - return String.format(VERSION_FORMAT_4, version1, version2, version3, version4); - } - } - - public static void main(String[] args){ - long n1 = VersionUtil.normailze(VersionEnum.V_0_10_0_0.getVersion()); - String v1 = VersionUtil.dNormailze(n1); - System.out.println(VersionEnum.V_0_10_0_0.getVersion() + "\t:\t" + n1 + "\t:\t" + v1); - - long n2 = VersionUtil.normailze(VersionEnum.V_0_10_0_1.getVersion()); - String v2 = VersionUtil.dNormailze(n2); - System.out.println(VersionEnum.V_0_10_0_1.getVersion() + "\t:\t" + n2 + "\t:\t" + v2); - - long n3 = VersionUtil.normailze(VersionEnum.V_0_11_0_3.getVersion()); - String v3 = VersionUtil.dNormailze(n3); - System.out.println(VersionEnum.V_0_11_0_3.getVersion() + "\t:\t" + n3 + "\t:\t" + v3); - - long n4 = VersionUtil.normailze(VersionEnum.V_2_5_0.getVersion()); - String v4 = VersionUtil.dNormailze(n4); - System.out.println(VersionEnum.V_2_5_0.getVersion() + "\t:\t" + n4 + "\t:\t" + v4); - - long n5 = VersionUtil.normailze(VersionEnum.V_2_5_0_D_300.getVersion()); - String v5 = VersionUtil.dNormailze(n5); - System.out.println(VersionEnum.V_2_5_0_D_300.getVersion() + "\t:\t" + n4 + "\t:\t" + v5); - - System.out.println(Long.MAX_VALUE); - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KSPartialKafkaAdminClient.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KSPartialKafkaAdminClient.java deleted file mode 100644 index f985fb01..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KSPartialKafkaAdminClient.java +++ /dev/null @@ -1,1539 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils.kafka; - -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.xiaojukeji.know.streaming.km.common.annotations.KafkaSource; -import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.*; -import org.apache.kafka.clients.ApiVersions; -import org.apache.kafka.clients.ClientDnsLookup; -import org.apache.kafka.clients.ClientRequest; -import org.apache.kafka.clients.ClientResponse; -import org.apache.kafka.clients.ClientUtils; -import org.apache.kafka.clients.CommonClientConfigs; -import org.apache.kafka.clients.KafkaClient; -import org.apache.kafka.clients.NetworkClient; -import org.apache.kafka.clients.StaleMetadataException; -import org.apache.kafka.clients.admin.*; -import org.apache.kafka.clients.admin.internals.AdminMetadataManager; -import org.apache.kafka.clients.admin.internals.ConsumerGroupOperationContext; -import org.apache.kafka.clients.consumer.ConsumerPartitionAssignor.Assignment; -import org.apache.kafka.clients.consumer.internals.ConsumerProtocol; -import org.apache.kafka.common.*; -import org.apache.kafka.common.acl.AclOperation; -import org.apache.kafka.common.config.ConfigException; -import org.apache.kafka.common.errors.AuthenticationException; -import org.apache.kafka.common.errors.DisconnectException; -import org.apache.kafka.common.errors.InvalidGroupIdException; -import org.apache.kafka.common.errors.RetriableException; -import org.apache.kafka.common.errors.TimeoutException; -import org.apache.kafka.common.errors.UnsupportedVersionException; -import org.apache.kafka.common.internals.KafkaFutureImpl; -import org.apache.kafka.common.message.DescribeGroupsRequestData; -import org.apache.kafka.common.message.DescribeGroupsResponseData.DescribedGroup; -import org.apache.kafka.common.message.DescribeGroupsResponseData.DescribedGroupMember; -import org.apache.kafka.common.message.FindCoordinatorRequestData; -import org.apache.kafka.common.message.ListGroupsRequestData; -import org.apache.kafka.common.message.ListGroupsResponseData; -import org.apache.kafka.common.message.MetadataRequestData; -import org.apache.kafka.common.metrics.JmxReporter; -import org.apache.kafka.common.metrics.KafkaMetricsContext; -import org.apache.kafka.common.metrics.MetricConfig; -import org.apache.kafka.common.metrics.Metrics; -import org.apache.kafka.common.metrics.MetricsContext; -import org.apache.kafka.common.metrics.MetricsReporter; -import org.apache.kafka.common.metrics.Sensor; -import org.apache.kafka.common.network.ChannelBuilder; -import org.apache.kafka.common.network.Selector; -import org.apache.kafka.common.protocol.Errors; -import org.apache.kafka.common.requests.AbstractRequest; -import org.apache.kafka.common.requests.AbstractResponse; -import org.apache.kafka.common.requests.ApiError; -import org.apache.kafka.common.requests.DescribeGroupsRequest; -import org.apache.kafka.common.requests.DescribeGroupsResponse; -import org.apache.kafka.common.requests.FindCoordinatorRequest; -import org.apache.kafka.common.requests.FindCoordinatorRequest.CoordinatorType; -import org.apache.kafka.common.requests.FindCoordinatorResponse; -import org.apache.kafka.common.requests.ListGroupsRequest; -import org.apache.kafka.common.requests.ListGroupsResponse; -import org.apache.kafka.common.requests.MetadataRequest; -import org.apache.kafka.common.requests.MetadataResponse; -import org.apache.kafka.common.utils.AppInfoParser; -import org.apache.kafka.common.utils.KafkaThread; -import org.apache.kafka.common.utils.LogContext; -import org.apache.kafka.common.utils.Time; -import org.apache.kafka.common.utils.Utils; -import org.apache.kafka.connect.runtime.distributed.ConnectProtocol; -import org.slf4j.Logger; - -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.time.Duration; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -import static org.apache.kafka.common.utils.Utils.closeQuietly; - -/** - * The default implementation of {@link Admin}. An instance of this class is created by invoking one of the - * {@code create()} methods in {@code AdminClient}. Users should not refer to this class directly. - * - *

- * This class is thread-safe. - *

- * The API of this class is evolving, see {@link Admin} for details. - */ -@KafkaSource(modified = 1) -public class KSPartialKafkaAdminClient { - - /** - * The next integer to use to name a KafkaAdminClient which the user hasn't specified an explicit name for. - */ - private static final AtomicInteger ADMIN_CLIENT_ID_SEQUENCE = new AtomicInteger(1); - - /** - * The prefix to use for the JMX metrics for this class - */ - private static final String JMX_PREFIX = "ks-kafka.admin.client"; - - /** - * An invalid shutdown time which indicates that a shutdown has not yet been performed. - */ - private static final long INVALID_SHUTDOWN_TIME = -1; - - /** - * Thread name prefix for admin client network thread - */ - static final String NETWORK_THREAD_PREFIX = "ks-kafka-admin-client-thread"; - - private final Logger log; - - /** - * The default timeout to use for an operation. - */ - private final int defaultApiTimeoutMs; - - /** - * The timeout to use for a single request. - */ - private final int requestTimeoutMs; - - /** - * The name of this AdminClient instance. - */ - private final String clientId; - - /** - * Provides the time. - */ - private final Time time; - - /** - * The cluster metadata manager used by the KafkaClient. - */ - private final AdminMetadataManager metadataManager; - - /** - * The metrics for this KafkaAdminClient. - */ - private final Metrics metrics; - - /** - * The network client to use. - */ - private final KafkaClient client; - - /** - * The runnable used in the service thread for this admin client. - */ - private final AdminClientRunnable runnable; - - /** - * The network service thread for this admin client. - */ - private final Thread thread; - - /** - * During a close operation, this is the time at which we will time out all pending operations - * and force the RPC thread to exit. If the admin client is not closing, this will be 0. - */ - private final AtomicLong hardShutdownTimeMs = new AtomicLong(INVALID_SHUTDOWN_TIME); - - /** - * A factory which creates TimeoutProcessors for the RPC thread. - */ - private final TimeoutProcessorFactory timeoutProcessorFactory; - - private final int maxRetries; - - private final long retryBackoffMs; - - /** - * Get or create a list value from a map. - * - * @param map The map to get or create the element from. - * @param key The key. - * @param The key type. - * @param The value type. - * @return The list value. - */ - static List getOrCreateListValue(Map> map, K key) { - return map.computeIfAbsent(key, k -> new LinkedList<>()); - } - - /** - * Get the current time remaining before a deadline as an integer. - * - * @param now The current time in milliseconds. - * @param deadlineMs The deadline time in milliseconds. - * @return The time delta in milliseconds. - */ - static int calcTimeoutMsRemainingAsInt(long now, long deadlineMs) { - long deltaMs = deadlineMs - now; - if (deltaMs > Integer.MAX_VALUE) - deltaMs = Integer.MAX_VALUE; - else if (deltaMs < Integer.MIN_VALUE) - deltaMs = Integer.MIN_VALUE; - return (int) deltaMs; - } - - /** - * Generate the client id based on the configuration. - * - * @param config The configuration - * - * @return The client id - */ - static String generateClientId(AdminClientConfig config) { - String clientId = config.getString(AdminClientConfig.CLIENT_ID_CONFIG); - if (!clientId.isEmpty()) - return clientId; - return "adminclient-" + ADMIN_CLIENT_ID_SEQUENCE.getAndIncrement(); - } - - /** - * Get the deadline for a particular call. - * - * @param now The current time in milliseconds. - * @param optionTimeoutMs The timeout option given by the user. - * - * @return The deadline in milliseconds. - */ - private long calcDeadlineMs(long now, Integer optionTimeoutMs) { - if (optionTimeoutMs != null) - return now + Math.max(0, optionTimeoutMs); - return now + defaultApiTimeoutMs; - } - - /** - * Pretty-print an exception. - * - * @param throwable The exception. - * - * @return A compact human-readable string. - */ - static String prettyPrintException(Throwable throwable) { - if (throwable == null) - return "Null exception."; - if (throwable.getMessage() != null) { - return throwable.getClass().getSimpleName() + ": " + throwable.getMessage(); - } - return throwable.getClass().getSimpleName(); - } - - public static KSPartialKafkaAdminClient create(Properties props) { - return KSPartialKafkaAdminClient.createInternal(new AdminClientConfig(props), null); - } - - static KSPartialKafkaAdminClient createInternal(AdminClientConfig config, TimeoutProcessorFactory timeoutProcessorFactory) { - Metrics metrics = null; - NetworkClient networkClient = null; - Time time = Time.SYSTEM; - String clientId = generateClientId(config); - ChannelBuilder channelBuilder = null; - Selector selector = null; - ApiVersions apiVersions = new ApiVersions(); - LogContext logContext = createLogContext(clientId); - - try { - // Since we only request node information, it's safe to pass true for allowAutoTopicCreation (and it - // simplifies communication with older brokers) - AdminMetadataManager metadataManager = new AdminMetadataManager(logContext, - config.getLong(AdminClientConfig.RETRY_BACKOFF_MS_CONFIG), - config.getLong(AdminClientConfig.METADATA_MAX_AGE_CONFIG)); - List addresses = ClientUtils.parseAndValidateAddresses( - config.getList(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG), - config.getString(AdminClientConfig.CLIENT_DNS_LOOKUP_CONFIG)); - metadataManager.update(Cluster.bootstrap(addresses), time.milliseconds()); - List reporters = config.getConfiguredInstances(AdminClientConfig.METRIC_REPORTER_CLASSES_CONFIG, - MetricsReporter.class, - Collections.singletonMap(AdminClientConfig.CLIENT_ID_CONFIG, clientId)); - Map metricTags = Collections.singletonMap("client-id", clientId); - MetricConfig metricConfig = new MetricConfig().samples(config.getInt(AdminClientConfig.METRICS_NUM_SAMPLES_CONFIG)) - .timeWindow(config.getLong(AdminClientConfig.METRICS_SAMPLE_WINDOW_MS_CONFIG), TimeUnit.MILLISECONDS) - .recordLevel(Sensor.RecordingLevel.forName(config.getString(AdminClientConfig.METRICS_RECORDING_LEVEL_CONFIG))) - .tags(metricTags); - JmxReporter jmxReporter = new JmxReporter(); - jmxReporter.configure(config.originals()); - reporters.add(jmxReporter); - MetricsContext metricsContext = new KafkaMetricsContext(JMX_PREFIX, - config.originalsWithPrefix(CommonClientConfigs.METRICS_CONTEXT_PREFIX)); - metrics = new Metrics(metricConfig, reporters, time, metricsContext); - String metricGrpPrefix = "admin-client"; - channelBuilder = ClientUtils.createChannelBuilder(config, time, logContext); - selector = new Selector(config.getLong(AdminClientConfig.CONNECTIONS_MAX_IDLE_MS_CONFIG), - metrics, time, metricGrpPrefix, channelBuilder, logContext); - networkClient = new NetworkClient( - selector, - metadataManager.updater(), - clientId, - 1, - config.getLong(AdminClientConfig.RECONNECT_BACKOFF_MS_CONFIG), - config.getLong(AdminClientConfig.RECONNECT_BACKOFF_MAX_MS_CONFIG), - config.getInt(AdminClientConfig.SEND_BUFFER_CONFIG), - config.getInt(AdminClientConfig.RECEIVE_BUFFER_CONFIG), - (int) TimeUnit.HOURS.toMillis(1), - config.getLong(AdminClientConfig.SOCKET_CONNECTION_SETUP_TIMEOUT_MS_CONFIG), - config.getLong(AdminClientConfig.SOCKET_CONNECTION_SETUP_TIMEOUT_MAX_MS_CONFIG), - ClientDnsLookup.forConfig(config.getString(AdminClientConfig.CLIENT_DNS_LOOKUP_CONFIG)), - time, - true, - apiVersions, - logContext); - return new KSPartialKafkaAdminClient(config, clientId, time, metadataManager, metrics, networkClient, - timeoutProcessorFactory, logContext); - } catch (Throwable exc) { - closeQuietly(metrics, "Metrics"); - closeQuietly(networkClient, "NetworkClient"); - closeQuietly(selector, "Selector"); - closeQuietly(channelBuilder, "ChannelBuilder"); - throw new KafkaException("Failed to create new KafkaAdminClient", exc); - } - } - - static LogContext createLogContext(String clientId) { - return new LogContext("[AdminClient clientId=" + clientId + "] "); - } - - private KSPartialKafkaAdminClient(AdminClientConfig config, - String clientId, - Time time, - AdminMetadataManager metadataManager, - Metrics metrics, - KafkaClient client, - TimeoutProcessorFactory timeoutProcessorFactory, - LogContext logContext) { - this.clientId = clientId; - this.log = logContext.logger(KafkaAdminClient.class); - this.requestTimeoutMs = config.getInt(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG); - this.defaultApiTimeoutMs = configureDefaultApiTimeoutMs(config); - this.time = time; - this.metadataManager = metadataManager; - this.metrics = metrics; - this.client = client; - this.runnable = new AdminClientRunnable(); - String threadName = NETWORK_THREAD_PREFIX + " | " + clientId; - this.thread = new KafkaThread(threadName, runnable, true); - this.timeoutProcessorFactory = (timeoutProcessorFactory == null) ? - new TimeoutProcessorFactory() : timeoutProcessorFactory; - this.maxRetries = config.getInt(AdminClientConfig.RETRIES_CONFIG); - this.retryBackoffMs = config.getLong(AdminClientConfig.RETRY_BACKOFF_MS_CONFIG); - config.logUnused(); - AppInfoParser.registerAppInfo(JMX_PREFIX, clientId, metrics, time.milliseconds()); - log.debug("Kafka admin client initialized"); - thread.start(); - } - - /** - * If a default.api.timeout.ms has been explicitly specified, raise an error if it conflicts with request.timeout.ms. - * If no default.api.timeout.ms has been configured, then set its value as the max of the default and request.timeout.ms. Also we should probably log a warning. - * Otherwise, use the provided values for both configurations. - * - * @param config The configuration - */ - private int configureDefaultApiTimeoutMs(AdminClientConfig config) { - int requestTimeoutMs = config.getInt(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG); - int defaultApiTimeoutMs = config.getInt(AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG); - - if (defaultApiTimeoutMs < requestTimeoutMs) { - if (config.originals().containsKey(AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG)) { - throw new ConfigException("The specified value of " + AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG + - " must be no smaller than the value of " + AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG + "."); - } else { - log.warn("Overriding the default value for {} ({}) with the explicitly configured request timeout {}", - AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG, this.defaultApiTimeoutMs, - requestTimeoutMs); - return requestTimeoutMs; - } - } - return defaultApiTimeoutMs; - } - - public void close(Duration timeout) { - long waitTimeMs = timeout.toMillis(); - if (waitTimeMs < 0) - throw new IllegalArgumentException("The timeout cannot be negative."); - waitTimeMs = Math.min(TimeUnit.DAYS.toMillis(365), waitTimeMs); // Limit the timeout to a year. - long now = time.milliseconds(); - long newHardShutdownTimeMs = now + waitTimeMs; - long prev = INVALID_SHUTDOWN_TIME; - while (true) { - if (hardShutdownTimeMs.compareAndSet(prev, newHardShutdownTimeMs)) { - if (prev == INVALID_SHUTDOWN_TIME) { - log.debug("Initiating close operation."); - } else { - log.debug("Moving hard shutdown time forward."); - } - client.wakeup(); // Wake the thread, if it is blocked inside poll(). - break; - } - prev = hardShutdownTimeMs.get(); - if (prev < newHardShutdownTimeMs) { - log.debug("Hard shutdown time is already earlier than requested."); - newHardShutdownTimeMs = prev; - break; - } - } - if (log.isDebugEnabled()) { - long deltaMs = Math.max(0, newHardShutdownTimeMs - time.milliseconds()); - log.debug("Waiting for the I/O thread to exit. Hard shutdown in {} ms.", deltaMs); - } - try { - // close() can be called by AdminClient thread when it invokes callback. That will - // cause deadlock, so check for that condition. - if (Thread.currentThread() != thread) { - // Wait for the thread to be joined. - thread.join(waitTimeMs); - } - log.debug("Kafka admin client closed."); - } catch (InterruptedException e) { - log.debug("Interrupted while joining I/O thread", e); - Thread.currentThread().interrupt(); - } - } - - /** - * An interface for providing a node for a call. - */ - private interface NodeProvider { - Node provide(); - } - - private class MetadataUpdateNodeIdProvider implements NodeProvider { - @Override - public Node provide() { - return client.leastLoadedNode(time.milliseconds()); - } - } - - private class ConstantNodeIdProvider implements NodeProvider { - private final int nodeId; - - ConstantNodeIdProvider(int nodeId) { - this.nodeId = nodeId; - } - - @Override - public Node provide() { - if (metadataManager.isReady() && - (metadataManager.nodeById(nodeId) != null)) { - return metadataManager.nodeById(nodeId); - } - // If we can't find the node with the given constant ID, we schedule a - // metadata update and hope it appears. This behavior is useful for avoiding - // flaky behavior in tests when the cluster is starting up and not all nodes - // have appeared. - metadataManager.requestUpdate(); - return null; - } - } - - /** - * Provides the least loaded node. - */ - private class LeastLoadedNodeProvider implements NodeProvider { - @Override - public Node provide() { - if (metadataManager.isReady()) { - // This may return null if all nodes are busy. - // In that case, we will postpone node assignment. - return client.leastLoadedNode(time.milliseconds()); - } - metadataManager.requestUpdate(); - return null; - } - } - - abstract class Call { - private final boolean internal; - private final String callName; - private final long deadlineMs; - private final NodeProvider nodeProvider; - private int tries = 0; - private boolean aborted = false; - private Node curNode = null; - private long nextAllowedTryMs = 0; - - Call(boolean internal, String callName, long deadlineMs, NodeProvider nodeProvider) { - this.internal = internal; - this.callName = callName; - this.deadlineMs = deadlineMs; - this.nodeProvider = nodeProvider; - } - - Call(String callName, long deadlineMs, NodeProvider nodeProvider) { - this(false, callName, deadlineMs, nodeProvider); - } - - protected Node curNode() { - return curNode; - } - - /** - * Handle a failure. - * - * Depending on what the exception is and how many times we have already tried, we may choose to - * fail the Call, or retry it. It is important to print the stack traces here in some cases, - * since they are not necessarily preserved in ApiVersionException objects. - * - * @param now The current time in milliseconds. - * @param throwable The failure exception. - */ - final void fail(long now, Throwable throwable) { - if (aborted) { - // If the call was aborted while in flight due to a timeout, deliver a - // TimeoutException. In this case, we do not get any more retries - the call has - // failed. We increment tries anyway in order to display an accurate log message. - tries++; - failWithTimeout(now, throwable); - return; - } - // If this is an UnsupportedVersionException that we can retry, do so. Note that a - // protocol downgrade will not count against the total number of retries we get for - // this RPC. That is why 'tries' is not incremented. - if ((throwable instanceof UnsupportedVersionException) && - handleUnsupportedVersionException((UnsupportedVersionException) throwable)) { - log.debug("{} attempting protocol downgrade and then retry.", this); - runnable.enqueue(this, now); - return; - } - tries++; - nextAllowedTryMs = now + retryBackoffMs; - - // If the call has timed out, fail. - if (calcTimeoutMsRemainingAsInt(now, deadlineMs) < 0) { - failWithTimeout(now, throwable); - return; - } - // If the exception is not retriable, fail. - if (!(throwable instanceof RetriableException)) { - if (log.isDebugEnabled()) { - log.debug("{} failed with non-retriable exception after {} attempt(s)", this, tries, - new Exception(prettyPrintException(throwable))); - } - handleFailure(throwable); - return; - } - // If we are out of retries, fail. - if (tries > maxRetries) { - failWithTimeout(now, throwable); - return; - } - if (log.isDebugEnabled()) { - log.debug("{} failed: {}. Beginning retry #{}", - this, prettyPrintException(throwable), tries); - } - runnable.enqueue(this, now); - } - - private void failWithTimeout(long now, Throwable cause) { - if (log.isDebugEnabled()) { - log.debug("{} timed out at {} after {} attempt(s)", this, now, tries, - new Exception(prettyPrintException(cause))); - } - handleFailure(new TimeoutException(this + " timed out at " + now - + " after " + tries + " attempt(s)", cause)); - } - - /** - * Create an AbstractRequest.Builder for this Call. - * - * @param timeoutMs The timeout in milliseconds. - * - * @return The AbstractRequest builder. - */ - @SuppressWarnings("rawtypes") - abstract AbstractRequest.Builder createRequest(int timeoutMs); - - /** - * Process the call response. - * - * @param abstractResponse The AbstractResponse. - * - */ - abstract void handleResponse(AbstractResponse abstractResponse); - - /** - * Handle a failure. This will only be called if the failure exception was not - * retriable, or if we hit a timeout. - * - * @param throwable The exception. - */ - abstract void handleFailure(Throwable throwable); - - /** - * Handle an UnsupportedVersionException. - * - * @param exception The exception. - * - * @return True if the exception can be handled; false otherwise. - */ - boolean handleUnsupportedVersionException(UnsupportedVersionException exception) { - return false; - } - - @Override - public String toString() { - return "Call(callName=" + callName + ", deadlineMs=" + deadlineMs + - ", tries=" + tries + ", nextAllowedTryMs=" + nextAllowedTryMs + ")"; - } - - public boolean isInternal() { - return internal; - } - } - - static class TimeoutProcessorFactory { - TimeoutProcessor create(long now) { - return new TimeoutProcessor(now); - } - } - - static class TimeoutProcessor { - /** - * The current time in milliseconds. - */ - private final long now; - - /** - * The number of milliseconds until the next timeout. - */ - private int nextTimeoutMs; - - /** - * Create a new timeout processor. - * - * @param now The current time in milliseconds since the epoch. - */ - TimeoutProcessor(long now) { - this.now = now; - this.nextTimeoutMs = Integer.MAX_VALUE; - } - - /** - * Check for calls which have timed out. - * Timed out calls will be removed and failed. - * The remaining milliseconds until the next timeout will be updated. - * - * @param calls The collection of calls. - * - * @return The number of calls which were timed out. - */ - int handleTimeouts(Collection calls, String msg) { - int numTimedOut = 0; - for (Iterator iter = calls.iterator(); iter.hasNext(); ) { - Call call = iter.next(); - int remainingMs = calcTimeoutMsRemainingAsInt(now, call.deadlineMs); - if (remainingMs < 0) { - call.fail(now, new TimeoutException(msg + " Call: " + call.callName)); - iter.remove(); - numTimedOut++; - } else { - nextTimeoutMs = Math.min(nextTimeoutMs, remainingMs); - } - } - return numTimedOut; - } - - /** - * Check whether a call should be timed out. - * The remaining milliseconds until the next timeout will be updated. - * - * @param call The call. - * - * @return True if the call should be timed out. - */ - boolean callHasExpired(Call call) { - int remainingMs = calcTimeoutMsRemainingAsInt(now, call.deadlineMs); - if (remainingMs < 0) - return true; - nextTimeoutMs = Math.min(nextTimeoutMs, remainingMs); - return false; - } - - int nextTimeoutMs() { - return nextTimeoutMs; - } - } - - private final class AdminClientRunnable implements Runnable { - /** - * Calls which have not yet been assigned to a node. - * Only accessed from this thread. - */ - private final ArrayList pendingCalls = new ArrayList<>(); - - /** - * Maps nodes to calls that we want to send. - * Only accessed from this thread. - */ - private final Map> callsToSend = new HashMap<>(); - - /** - * Maps node ID strings to calls that have been sent. - * Only accessed from this thread. - */ - private final Map> callsInFlight = new HashMap<>(); - - /** - * Maps correlation IDs to calls that have been sent. - * Only accessed from this thread. - */ - private final Map correlationIdToCalls = new HashMap<>(); - - /** - * Pending calls. Protected by the object monitor. - * This will be null only if the thread has shut down. - */ - private List newCalls = new LinkedList<>(); - - /** - * Time out the elements in the pendingCalls list which are expired. - * - * @param processor The timeout processor. - */ - private void timeoutPendingCalls(TimeoutProcessor processor) { - int numTimedOut = processor.handleTimeouts(pendingCalls, "Timed out waiting for a node assignment."); - if (numTimedOut > 0) - log.debug("Timed out {} pending calls.", numTimedOut); - } - - /** - * Time out calls which have been assigned to nodes. - * - * @param processor The timeout processor. - */ - private int timeoutCallsToSend(TimeoutProcessor processor) { - int numTimedOut = 0; - for (List callList : callsToSend.values()) { - numTimedOut += processor.handleTimeouts(callList, - "Timed out waiting to send the call."); - } - if (numTimedOut > 0) - log.debug("Timed out {} call(s) with assigned nodes.", numTimedOut); - return numTimedOut; - } - - /** - * Drain all the calls from newCalls into pendingCalls. - * - * This function holds the lock for the minimum amount of time, to avoid blocking - * users of AdminClient who will also take the lock to add new calls. - */ - private synchronized void drainNewCalls() { - if (!newCalls.isEmpty()) { - pendingCalls.addAll(newCalls); - newCalls.clear(); - } - } - - /** - * Choose nodes for the calls in the pendingCalls list. - * - * @param now The current time in milliseconds. - * @return The minimum time until a call is ready to be retried if any of the pending - * calls are backing off after a failure - */ - private long maybeDrainPendingCalls(long now) { - long pollTimeout = Long.MAX_VALUE; - log.trace("Trying to choose nodes for {} at {}", pendingCalls, now); - - Iterator pendingIter = pendingCalls.iterator(); - while (pendingIter.hasNext()) { - Call call = pendingIter.next(); - - // If the call is being retried, await the proper backoff before finding the node - if (now < call.nextAllowedTryMs) { - pollTimeout = Math.min(pollTimeout, call.nextAllowedTryMs - now); - } else if (maybeDrainPendingCall(call, now)) { - pendingIter.remove(); - } - } - return pollTimeout; - } - - /** - * Check whether a pending call can be assigned a node. Return true if the pending call was either - * transferred to the callsToSend collection or if the call was failed. Return false if it - * should remain pending. - */ - private boolean maybeDrainPendingCall(Call call, long now) { - try { - Node node = call.nodeProvider.provide(); - if (node != null) { - log.trace("Assigned {} to node {}", call, node); - call.curNode = node; - getOrCreateListValue(callsToSend, node).add(call); - return true; - } else { - log.trace("Unable to assign {} to a node.", call); - return false; - } - } catch (Throwable t) { - // Handle authentication errors while choosing nodes. - log.debug("Unable to choose node for {}", call, t); - call.fail(now, t); - return true; - } - } - - /** - * Send the calls which are ready. - * - * @param now The current time in milliseconds. - * @return The minimum timeout we need for poll(). - */ - private long sendEligibleCalls(long now) { - long pollTimeout = Long.MAX_VALUE; - for (Iterator>> iter = callsToSend.entrySet().iterator(); iter.hasNext(); ) { - Map.Entry> entry = iter.next(); - List calls = entry.getValue(); - if (calls.isEmpty()) { - iter.remove(); - continue; - } - Node node = entry.getKey(); - if (!client.ready(node, now)) { - long nodeTimeout = client.pollDelayMs(node, now); - pollTimeout = Math.min(pollTimeout, nodeTimeout); - log.trace("Client is not ready to send to {}. Must delay {} ms", node, nodeTimeout); - continue; - } - Call call = calls.remove(0); - int requestTimeoutMs = Math.min(KSPartialKafkaAdminClient.this.requestTimeoutMs, - calcTimeoutMsRemainingAsInt(now, call.deadlineMs)); - AbstractRequest.Builder requestBuilder; - try { - requestBuilder = call.createRequest(requestTimeoutMs); - } catch (Throwable throwable) { - call.fail(now, new KafkaException(String.format( - "Internal error sending %s to %s.", call.callName, node))); - continue; - } - ClientRequest clientRequest = client.newClientRequest(node.idString(), requestBuilder, now, - true, requestTimeoutMs, null); - log.debug("Sending {} to {}. correlationId={}", requestBuilder, node, clientRequest.correlationId()); - client.send(clientRequest, now); - getOrCreateListValue(callsInFlight, node.idString()).add(call); - correlationIdToCalls.put(clientRequest.correlationId(), call); - } - return pollTimeout; - } - - /** - * Time out expired calls that are in flight. - * - * Calls that are in flight may have been partially or completely sent over the wire. They may - * even be in the process of being processed by the remote server. At the moment, our only option - * to time them out is to close the entire connection. - * - * @param processor The timeout processor. - */ - private void timeoutCallsInFlight(TimeoutProcessor processor) { - int numTimedOut = 0; - for (Map.Entry> entry : callsInFlight.entrySet()) { - List contexts = entry.getValue(); - if (contexts.isEmpty()) - continue; - String nodeId = entry.getKey(); - // We assume that the first element in the list is the earliest. So it should be the - // only one we need to check the timeout for. - Call call = contexts.get(0); - if (processor.callHasExpired(call)) { - if (call.aborted) { - log.warn("Aborted call {} is still in callsInFlight.", call); - } else { - log.debug("Closing connection to {} to time out {}", nodeId, call); - call.aborted = true; - client.disconnect(nodeId); - numTimedOut++; - // We don't remove anything from the callsInFlight data structure. Because the connection - // has been closed, the calls should be returned by the next client#poll(), - // and handled at that point. - } - } - } - if (numTimedOut > 0) - log.debug("Timed out {} call(s) in flight.", numTimedOut); - } - - /** - * Handle responses from the server. - * - * @param now The current time in milliseconds. - * @param responses The latest responses from KafkaClient. - **/ - private void handleResponses(long now, List responses) { - for (ClientResponse response : responses) { - int correlationId = response.requestHeader().correlationId(); - - Call call = correlationIdToCalls.get(correlationId); - if (call == null) { - // If the server returns information about a correlation ID we didn't use yet, - // an internal server error has occurred. Close the connection and log an error message. - log.error("Internal server error on {}: server returned information about unknown " + - "correlation ID {}, requestHeader = {}", response.destination(), correlationId, - response.requestHeader()); - client.disconnect(response.destination()); - continue; - } - - // Stop tracking this call. - correlationIdToCalls.remove(correlationId); - List calls = callsInFlight.get(response.destination()); - if ((calls == null) || (!calls.remove(call))) { - log.error("Internal server error on {}: ignoring call {} in correlationIdToCall " + - "that did not exist in callsInFlight", response.destination(), call); - continue; - } - - // Handle the result of the call. This may involve retrying the call, if we got a - // retriable exception. - if (response.versionMismatch() != null) { - call.fail(now, response.versionMismatch()); - } else if (response.wasDisconnected()) { - AuthenticationException authException = client.authenticationException(call.curNode()); - if (authException != null) { - call.fail(now, authException); - } else { - call.fail(now, new DisconnectException(String.format( - "Cancelled %s request with correlation id %s due to node %s being disconnected", - call.callName, correlationId, response.destination()))); - } - } else { - try { - call.handleResponse(response.responseBody()); - if (log.isTraceEnabled()) - log.trace("{} got response {}", call, response.responseBody()); - } catch (Throwable t) { - if (log.isTraceEnabled()) - log.trace("{} handleResponse failed with {}", call, prettyPrintException(t)); - call.fail(now, t); - } - } - } - } - - /** - * Unassign calls that have not yet been sent based on some predicate. For example, this - * is used to reassign the calls that have been assigned to a disconnected node. - * - * @param shouldUnassign Condition for reassignment. If the predicate is true, then the calls will - * be put back in the pendingCalls collection and they will be reassigned - */ - private void unassignUnsentCalls(Predicate shouldUnassign) { - for (Iterator>> iter = callsToSend.entrySet().iterator(); iter.hasNext(); ) { - Map.Entry> entry = iter.next(); - Node node = entry.getKey(); - List awaitingCalls = entry.getValue(); - - if (awaitingCalls.isEmpty()) { - iter.remove(); - } else if (shouldUnassign.test(node)) { - pendingCalls.addAll(awaitingCalls); - iter.remove(); - } - } - } - - private boolean hasActiveExternalCalls(Collection calls) { - for (Call call : calls) { - if (!call.isInternal()) { - return true; - } - } - return false; - } - - /** - * Return true if there are currently active external calls. - */ - private boolean hasActiveExternalCalls() { - if (hasActiveExternalCalls(pendingCalls)) { - return true; - } - for (List callList : callsToSend.values()) { - if (hasActiveExternalCalls(callList)) { - return true; - } - } - return hasActiveExternalCalls(correlationIdToCalls.values()); - } - - private boolean threadShouldExit(long now, long curHardShutdownTimeMs) { - if (!hasActiveExternalCalls()) { - log.trace("All work has been completed, and the I/O thread is now exiting."); - return true; - } - if (now >= curHardShutdownTimeMs) { - log.info("Forcing a hard I/O thread shutdown. Requests in progress will be aborted."); - return true; - } - log.debug("Hard shutdown in {} ms.", curHardShutdownTimeMs - now); - return false; - } - - @Override - public void run() { - log.trace("Thread starting"); - try { - processRequests(); - } finally { - AppInfoParser.unregisterAppInfo(JMX_PREFIX, clientId, metrics); - - int numTimedOut = 0; - TimeoutProcessor timeoutProcessor = new TimeoutProcessor(Long.MAX_VALUE); - synchronized (this) { - numTimedOut += timeoutProcessor.handleTimeouts(newCalls, "The AdminClient thread has exited."); - newCalls = null; - } - numTimedOut += timeoutProcessor.handleTimeouts(pendingCalls, "The AdminClient thread has exited."); - numTimedOut += timeoutCallsToSend(timeoutProcessor); - numTimedOut += timeoutProcessor.handleTimeouts(correlationIdToCalls.values(), - "The AdminClient thread has exited."); - if (numTimedOut > 0) { - log.debug("Timed out {} remaining operation(s).", numTimedOut); - } - closeQuietly(client, "KafkaClient"); - closeQuietly(metrics, "Metrics"); - log.debug("Exiting AdminClientRunnable thread."); - } - } - - private void processRequests() { - long now = time.milliseconds(); - while (true) { - // Copy newCalls into pendingCalls. - drainNewCalls(); - - // Check if the AdminClient thread should shut down. - long curHardShutdownTimeMs = hardShutdownTimeMs.get(); - if ((curHardShutdownTimeMs != INVALID_SHUTDOWN_TIME) && threadShouldExit(now, curHardShutdownTimeMs)) - break; - - // Handle timeouts. - TimeoutProcessor timeoutProcessor = timeoutProcessorFactory.create(now); - timeoutPendingCalls(timeoutProcessor); - timeoutCallsToSend(timeoutProcessor); - timeoutCallsInFlight(timeoutProcessor); - - long pollTimeout = Math.min(1200000, timeoutProcessor.nextTimeoutMs()); - if (curHardShutdownTimeMs != INVALID_SHUTDOWN_TIME) { - pollTimeout = Math.min(pollTimeout, curHardShutdownTimeMs - now); - } - - // Choose nodes for our pending calls. - pollTimeout = Math.min(pollTimeout, maybeDrainPendingCalls(now)); - long metadataFetchDelayMs = metadataManager.metadataFetchDelayMs(now); - if (metadataFetchDelayMs == 0) { - metadataManager.transitionToUpdatePending(now); - Call metadataCall = makeMetadataCall(now); - // Create a new metadata fetch call and add it to the end of pendingCalls. - // Assign a node for just the new call (we handled the other pending nodes above). - - if (!maybeDrainPendingCall(metadataCall, now)) - pendingCalls.add(metadataCall); - } - pollTimeout = Math.min(pollTimeout, sendEligibleCalls(now)); - - if (metadataFetchDelayMs > 0) { - pollTimeout = Math.min(pollTimeout, metadataFetchDelayMs); - } - - // Ensure that we use a small poll timeout if there are pending calls which need to be sent - if (!pendingCalls.isEmpty()) - pollTimeout = Math.min(pollTimeout, retryBackoffMs); - - // Wait for network responses. - log.trace("Entering KafkaClient#poll(timeout={})", pollTimeout); - List responses = client.poll(pollTimeout, now); - log.trace("KafkaClient#poll retrieved {} response(s)", responses.size()); - - // unassign calls to disconnected nodes - unassignUnsentCalls(client::connectionFailed); - - // Update the current time and handle the latest responses. - now = time.milliseconds(); - handleResponses(now, responses); - } - } - - /** - * Queue a call for sending. - * - * If the AdminClient thread has exited, this will fail. Otherwise, it will succeed (even - * if the AdminClient is shutting down). This function should called when retrying an - * existing call. - * - * @param call The new call object. - * @param now The current time in milliseconds. - */ - void enqueue(Call call, long now) { - if (call.tries > maxRetries) { - log.debug("Max retries {} for {} reached", maxRetries, call); - call.fail(time.milliseconds(), new TimeoutException()); - return; - } - if (log.isDebugEnabled()) { - log.debug("Queueing {} with a timeout {} ms from now.", call, call.deadlineMs - now); - } - boolean accepted = false; - synchronized (this) { - if (newCalls != null) { - newCalls.add(call); - accepted = true; - } - } - if (accepted) { - client.wakeup(); // wake the thread if it is in poll() - } else { - log.debug("The AdminClient thread has exited. Timing out {}.", call); - call.fail(Long.MAX_VALUE, new TimeoutException("The AdminClient thread has exited.")); - } - } - - /** - * Initiate a new call. - * - * This will fail if the AdminClient is scheduled to shut down. - * - * @param call The new call object. - * @param now The current time in milliseconds. - */ - void call(Call call, long now) { - if (hardShutdownTimeMs.get() != INVALID_SHUTDOWN_TIME) { - log.debug("The AdminClient is not accepting new calls. Timing out {}.", call); - call.fail(Long.MAX_VALUE, new TimeoutException("The AdminClient thread is not accepting new calls.")); - } else { - enqueue(call, now); - } - } - - /** - * Create a new metadata call. - */ - private Call makeMetadataCall(long now) { - return new Call(true, "fetchMetadata", calcDeadlineMs(now, requestTimeoutMs), - new MetadataUpdateNodeIdProvider()) { - @Override - public MetadataRequest.Builder createRequest(int timeoutMs) { - // Since this only requests node information, it's safe to pass true - // for allowAutoTopicCreation (and it simplifies communication with - // older brokers) - return new MetadataRequest.Builder(new MetadataRequestData() - .setTopics(Collections.emptyList()) - .setAllowAutoTopicCreation(true)); - } - - @Override - public void handleResponse(AbstractResponse abstractResponse) { - MetadataResponse response = (MetadataResponse) abstractResponse; - long now = time.milliseconds(); - metadataManager.update(response.buildCluster(), now); - - // Unassign all unsent requests after a metadata refresh to allow for a new - // destination to be selected from the new metadata - unassignUnsentCalls(node -> true); - } - - @Override - public void handleFailure(Throwable e) { - metadataManager.updateFailed(e); - } - }; - } - } - - private static boolean groupIdIsUnrepresentable(String groupId) { - return groupId == null; - } - - private void rescheduleFindCoordinatorTask(ConsumerGroupOperationContext context, Supplier nextCall, Call failedCall) { - log.info("Node {} is no longer the Coordinator. Retrying with new coordinator.", - context.node().orElse(null)); - // Requeue the task so that we can try with new coordinator - context.setNode(null); - - Call call = nextCall.get(); - call.tries = failedCall.tries + 1; - call.nextAllowedTryMs = calculateNextAllowedRetryMs(); - - Call findCoordinatorCall = getFindCoordinatorCall(context, nextCall); - runnable.call(findCoordinatorCall, time.milliseconds()); - } - - private static Map> createFutures(Collection groupIds) { - return new HashSet<>(groupIds).stream().collect( - Collectors.toMap(groupId -> groupId, - groupId -> { - if (groupIdIsUnrepresentable(groupId)) { - KafkaFutureImpl future = new KafkaFutureImpl<>(); - future.completeExceptionally(new InvalidGroupIdException("The given group id '" + - groupId + "' cannot be represented in a request.")); - return future; - } else { - return new KafkaFutureImpl<>(); - } - } - )); - } - - public KSDescribeGroupsResult describeConsumerGroups(final Collection groupIds, - final DescribeConsumerGroupsOptions options) { - - final Map> futures = createFutures(groupIds); - - // TODO: KAFKA-6788, we should consider grouping the request per coordinator and send one request with a list of - // all consumer groups this coordinator host - for (final Map.Entry> entry : futures.entrySet()) { - // skip sending request for those futures that already failed. - if (entry.getValue().isCompletedExceptionally()) - continue; - - final String groupId = entry.getKey(); - - final long startFindCoordinatorMs = time.milliseconds(); - final long deadline = calcDeadlineMs(startFindCoordinatorMs, options.timeoutMs()); - ConsumerGroupOperationContext context = - new ConsumerGroupOperationContext<>(groupId, options, deadline, futures.get(groupId)); - Call findCoordinatorCall = getFindCoordinatorCall(context, - () -> getDescribeConsumerGroupsCall(context)); - runnable.call(findCoordinatorCall, startFindCoordinatorMs); - } - - return new KSDescribeGroupsResult(new HashMap<>(futures)); - } - - /** - * Returns a {@code Call} object to fetch the coordinator for a consumer group id. Takes another Call - * parameter to schedule action that need to be taken using the coordinator. The param is a Supplier - * so that it can be lazily created, so that it can use the results of find coordinator call in its - * construction. - * - * @param The type of return value of the KafkaFuture, like ConsumerGroupDescription, Void etc. - * @param The type of configuration option, like DescribeConsumerGroupsOptions, ListConsumerGroupsOptions etc - */ - private > Call getFindCoordinatorCall(ConsumerGroupOperationContext context, - Supplier nextCall) { - return new Call("findCoordinator", context.deadline(), new LeastLoadedNodeProvider()) { - @Override - FindCoordinatorRequest.Builder createRequest(int timeoutMs) { - return new FindCoordinatorRequest.Builder( - new FindCoordinatorRequestData() - .setKeyType(CoordinatorType.GROUP.id()) - .setKey(context.groupId())); - } - - @Override - void handleResponse(AbstractResponse abstractResponse) { - final FindCoordinatorResponse response = (FindCoordinatorResponse) abstractResponse; - - if (handleGroupRequestError(response.error(), context.future())) - return; - - context.setNode(response.node()); - - runnable.call(nextCall.get(), time.milliseconds()); - } - - @Override - void handleFailure(Throwable throwable) { - context.future().completeExceptionally(throwable); - } - }; - } - - private Call getDescribeConsumerGroupsCall( - ConsumerGroupOperationContext context) { - return new Call("describeConsumerGroups", - context.deadline(), - new ConstantNodeIdProvider(context.node().get().id())) { - @Override - DescribeGroupsRequest.Builder createRequest(int timeoutMs) { - return new DescribeGroupsRequest.Builder( - new DescribeGroupsRequestData() - .setGroups(Collections.singletonList(context.groupId())) - .setIncludeAuthorizedOperations(context.options().includeAuthorizedOperations())); - } - - @Override - void handleResponse(AbstractResponse abstractResponse) { - final DescribeGroupsResponse response = (DescribeGroupsResponse) abstractResponse; - - List describedGroups = response.data().groups(); - if (describedGroups.isEmpty()) { - context.future().completeExceptionally( - new InvalidGroupIdException("No consumer group found for GroupId: " + context.groupId())); - return; - } - - if (describedGroups.size() > 1 || - !describedGroups.get(0).groupId().equals(context.groupId())) { - String ids = Arrays.toString(describedGroups.stream().map(DescribedGroup::groupId).toArray()); - context.future().completeExceptionally(new InvalidGroupIdException( - "DescribeConsumerGroup request for GroupId: " + context.groupId() + " returned " + ids)); - return; - } - - final DescribedGroup describedGroup = describedGroups.get(0); - - // If coordinator changed since we fetched it, retry - if (ConsumerGroupOperationContext.hasCoordinatorMoved(response)) { - Call call = getDescribeConsumerGroupsCall(context); - rescheduleFindCoordinatorTask(context, () -> call, this); - return; - } - - final Errors groupError = Errors.forCode(describedGroup.errorCode()); - if (handleGroupRequestError(groupError, context.future())) { - return; - } - - final String protocolType = describedGroup.protocolType(); - - final List memberDescriptions = new ArrayList<>(describedGroup.members().size()); - for (DescribedGroupMember groupMember : describedGroup.members()) { - KSMemberBaseAssignment memberBaseAssignment = null; - - if (protocolType.equals(ConsumerProtocol.PROTOCOL_TYPE) || protocolType.isEmpty()) { - if (groupMember.memberAssignment().length > 0) { - final Assignment assignment = ConsumerProtocol.deserializeAssignment(ByteBuffer.wrap(groupMember.memberAssignment())); - memberBaseAssignment = new KSMemberConsumerAssignment(new HashSet<>(assignment.partitions())); - } - } else { - ConnectProtocol.Assignment assignment = null; - if (groupMember.memberAssignment().length > 0) { - assignment = ConnectProtocol. - deserializeAssignment(ByteBuffer.wrap(groupMember.memberAssignment())); - } - - ConnectProtocol.WorkerState workerState = null; - if (groupMember.memberMetadata().length > 0) { - workerState = ConnectProtocol. - deserializeMetadata(ByteBuffer.wrap(groupMember.memberMetadata())); - } - - memberBaseAssignment = new KSMemberConnectAssignment(assignment, workerState); - } - - memberDescriptions.add(new KSMemberDescription( - groupMember.memberId(), - Optional.ofNullable(groupMember.groupInstanceId()), - groupMember.clientId(), - groupMember.clientHost(), - memberBaseAssignment - )); - } - - context.future().complete(new KSGroupDescription( - context.groupId(), - protocolType, - memberDescriptions, - describedGroup.protocolData(), - ConsumerGroupState.parse(describedGroup.groupState()), - context.node().get()) - ); - } - - @Override - void handleFailure(Throwable throwable) { - context.future().completeExceptionally(throwable); - } - }; - } - - - private Set validAclOperations(final int authorizedOperations) { - if (authorizedOperations == MetadataResponse.AUTHORIZED_OPERATIONS_OMITTED) { - return null; - } - return Utils.from32BitField(authorizedOperations) - .stream() - .map(AclOperation::fromCode) - .filter(operation -> operation != AclOperation.UNKNOWN - && operation != AclOperation.ALL - && operation != AclOperation.ANY) - .collect(Collectors.toSet()); - } - - private boolean handleGroupRequestError(Errors error, KafkaFutureImpl future) { - if (error == Errors.COORDINATOR_LOAD_IN_PROGRESS || error == Errors.COORDINATOR_NOT_AVAILABLE) { - throw error.exception(); - } else if (error != Errors.NONE) { - future.completeExceptionally(error.exception()); - return true; - } - return false; - } - - private final static class ListConsumerGroupsResults { - private final List errors; - private final HashMap listings; - private final HashSet remaining; - private final KafkaFutureImpl> future; - - ListConsumerGroupsResults(Collection leaders, - KafkaFutureImpl> future) { - this.errors = new ArrayList<>(); - this.listings = new HashMap<>(); - this.remaining = new HashSet<>(leaders); - this.future = future; - tryComplete(); - } - - synchronized void addError(Throwable throwable, Node node) { - ApiError error = ApiError.fromThrowable(throwable); - if (error.message() == null || error.message().isEmpty()) { - errors.add(error.error().exception("Error listing groups on " + node)); - } else { - errors.add(error.error().exception("Error listing groups on " + node + ": " + error.message())); - } - } - - synchronized void addListing(ConsumerGroupListing listing) { - listings.put(listing.groupId(), listing); - } - - synchronized void tryComplete(Node leader) { - remaining.remove(leader); - tryComplete(); - } - - private synchronized void tryComplete() { - if (remaining.isEmpty()) { - ArrayList results = new ArrayList<>(listings.values()); - results.addAll(errors); - future.complete(results); - } - } - } - - public KSListGroupsResult listConsumerGroups(ListConsumerGroupsOptions options) { - final KafkaFutureImpl> all = new KafkaFutureImpl<>(); - final long nowMetadata = time.milliseconds(); - final long deadline = calcDeadlineMs(nowMetadata, options.timeoutMs()); - runnable.call(new Call("findAllBrokers", deadline, new LeastLoadedNodeProvider()) { - @Override - MetadataRequest.Builder createRequest(int timeoutMs) { - return new MetadataRequest.Builder(new MetadataRequestData() - .setTopics(Collections.emptyList()) - .setAllowAutoTopicCreation(true)); - } - - @Override - void handleResponse(AbstractResponse abstractResponse) { - MetadataResponse metadataResponse = (MetadataResponse) abstractResponse; - Collection nodes = metadataResponse.brokers(); - if (nodes.isEmpty()) - throw new StaleMetadataException("Metadata fetch failed due to missing broker list"); - - HashSet allNodes = new HashSet<>(nodes); - final ListConsumerGroupsResults results = new ListConsumerGroupsResults(allNodes, all); - - for (final Node node : allNodes) { - final long nowList = time.milliseconds(); - runnable.call(new Call("listConsumerGroups", deadline, new ConstantNodeIdProvider(node.id())) { - @Override - ListGroupsRequest.Builder createRequest(int timeoutMs) { - List states = options.states() - .stream() - .map(s -> s.toString()) - .collect(Collectors.toList()); - return new ListGroupsRequest.Builder(new ListGroupsRequestData().setStatesFilter(states)); - } - - private void maybeAddConsumerGroup(ListGroupsResponseData.ListedGroup group) { - String protocolType = group.protocolType(); - - @KafkaSource(modified = 1, modifyDesc = "原先代码忽略了connect的消费组,这里修改为将其放开") - final String groupId = group.groupId(); - final Optional state = group.groupState().equals("") - ? Optional.empty() - : Optional.of(ConsumerGroupState.parse(group.groupState())); - final ConsumerGroupListing groupListing = new ConsumerGroupListing(groupId, protocolType.isEmpty(), state); - results.addListing(groupListing); - } - - @Override - void handleResponse(AbstractResponse abstractResponse) { - final ListGroupsResponse response = (ListGroupsResponse) abstractResponse; - synchronized (results) { - Errors error = Errors.forCode(response.data().errorCode()); - if (error == Errors.COORDINATOR_LOAD_IN_PROGRESS || error == Errors.COORDINATOR_NOT_AVAILABLE) { - throw error.exception(); - } else if (error != Errors.NONE) { - results.addError(error.exception(), node); - } else { - for (ListGroupsResponseData.ListedGroup group : response.data().groups()) { - maybeAddConsumerGroup(group); - } - } - results.tryComplete(node); - } - } - - @Override - void handleFailure(Throwable throwable) { - synchronized (results) { - results.addError(throwable, node); - results.tryComplete(node); - } - } - }, nowList); - } - } - - @Override - void handleFailure(Throwable throwable) { - KafkaException exception = new KafkaException("Failed to find brokers to send ListGroups", throwable); - all.complete(Collections.singletonList(exception)); - } - }, nowMetadata); - - return new KSListGroupsResult(all); - } - - - private long calculateNextAllowedRetryMs() { - return time.milliseconds() + retryBackoffMs; - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReassignUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReassignUtil.java deleted file mode 100644 index 16841287..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReassignUtil.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils.kafka; - -import kafka.admin.ReassignPartitionsCommand; -import org.apache.kafka.common.TopicPartition; -import scala.collection.Seq; -import scala.jdk.javaapi.CollectionConverters; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class KafkaReassignUtil { - public static String formatAsReassignmentJson(Map> partitionsToBeReassigned) { - Map> scalaPartitionsToBeReassigned = new HashMap<>(); - partitionsToBeReassigned.entrySet().forEach( - entry -> scalaPartitionsToBeReassigned.put( - entry.getKey(), - CollectionConverters.asScala(entry.getValue().stream().map(elem -> (Object)elem).collect(Collectors.toList()))) - ); - - return ReassignPartitionsCommand.formatAsReassignmentJson(CollectionConverters.asScala(scalaPartitionsToBeReassigned), new scala.collection.mutable.HashMap<>()); - } - - private KafkaReassignUtil() { - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReplicaAssignUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReplicaAssignUtil.java deleted file mode 100644 index aae3fc82..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/kafka/KafkaReplicaAssignUtil.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils.kafka; - - -import com.xiaojukeji.know.streaming.km.common.bean.entity.assign.TopicAssignedCount; -import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; - -import java.util.*; - -public class KafkaReplicaAssignUtil { - /** - * 新增分区的分配策略 - * @param brokerRackMap broker-rack信息 - * @param partitionMap 当前partition分布信息 - * @param incPartitionNum 新增分区数 - * @return - */ - public static Map> generateNewPartitionAssignment(Map brokerRackMap, - Map> partitionMap, - Integer incPartitionNum) { - if (ValidateUtils.isEmptyMap(brokerRackMap) || ValidateUtils.isEmptyMap(partitionMap) || ValidateUtils.isNullOrLessThanZero(incPartitionNum)) { - return null; - } - - Integer replicaNum = new ArrayList<>(partitionMap.entrySet()).get(0).getValue().size(); - if (brokerRackMap.size() < replicaNum) { - return null; - } - - // 初始化当前副本分布的统计信息 - Map assignedCountMap = new HashMap<>(); - brokerRackMap.forEach((brokerId, rack) -> assignedCountMap.put(brokerId, new TopicAssignedCount(brokerId, rack, replicaNum, true))); - partitionMap.forEach((partitionId, replicaIdList) -> { - for (int idx = 0; idx < replicaIdList.size(); ++idx) { - if (!assignedCountMap.containsKey(replicaIdList.get(idx))) { - // 该Broker不参与新增副本的分配 - assignedCountMap.put(replicaIdList.get(idx), new TopicAssignedCount(replicaIdList.get(idx), "", replicaNum, false)); - } - - assignedCountMap.get(replicaIdList.get(idx)).getAssignedPartitionSet().add(partitionId); - assignedCountMap.get(replicaIdList.get(idx)).getIdxReplicaPartitionList().get(idx).add(partitionId); - } - }); - - List assignedCountList = new ArrayList<>(assignedCountMap.values()); - - // 遍历分区的副本 - for (int replicaIdx = 0; replicaIdx < replicaNum; ++replicaIdx) { - TopicAssignedCount.setPresentReplicaIdx(replicaIdx, replicaNum); - - // 遍历新增的分区 - for (int partitionId = partitionMap.size(); partitionId < incPartitionNum + partitionMap.size(); ++partitionId) { - Collections.sort(assignedCountList); - - for (TopicAssignedCount assignedCount: assignedCountList) { - if (!assignedCount.isIncludeAssign() || assignedCount.getAssignedPartitionSet().contains(partitionId)) { - // 当前Broker不参与新增副本的分配,或者分区已经落在该Broker上 - continue; - } - - // 将分区分配到该Broker上,可以增加判断是否满足跨Rack分配的要求 - assignedCount.getAssignedPartitionSet().add(partitionId); - assignedCount.getIdxReplicaPartitionList().get(replicaIdx).add(partitionId); - break; - } - } - } - - return TopicAssignedCount.convert2PartitionMap(assignedCountList, replicaNum, new ArrayList<>(partitionMap.keySet())); - } - - - - private KafkaReplicaAssignUtil() { - } - - public static void main(String []args) { - Map brokerRackMap = new HashMap<>(); - brokerRackMap.put(1, ""); - brokerRackMap.put(2, ""); - brokerRackMap.put(3, ""); - brokerRackMap.put(4, ""); - brokerRackMap.put(5, ""); - - Map> oldPartitionMap = new HashMap<>(); - oldPartitionMap.put(0, Arrays.asList(1, 2, 3)); - oldPartitionMap.put(1, Arrays.asList(2, 3, 1)); - oldPartitionMap.put(2, Arrays.asList(3, 1, 2)); - - Map> newPartitionMap = generateNewPartitionAssignment(brokerRackMap, oldPartitionMap, 10); - for (Map.Entry> entry: newPartitionMap.entrySet()) { - System.out.println(String.format("partitionId:%d assignReplica:%s", entry.getKey(), ConvertUtil.obj2Json(entry.getValue()))); - } - } -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/FourLetterWordUtil.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/FourLetterWordUtil.java deleted file mode 100644 index 5c798b7c..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/FourLetterWordUtil.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils.zookeeper; - -import com.didiglobal.logi.log.ILog; -import com.didiglobal.logi.log.LogFactory; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; -import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus; -import com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper.fourletterword.parser.FourLetterWordDataParser; -import com.xiaojukeji.know.streaming.km.common.utils.BackoffUtils; -import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; -import org.apache.zookeeper.common.ClientX509Util; -import org.apache.zookeeper.common.X509Exception; -import org.apache.zookeeper.common.X509Util; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketTimeoutException; -import java.util.HashSet; -import java.util.Set; - -public class FourLetterWordUtil { - private static final ILog LOGGER = LogFactory.getLog(FourLetterWordUtil.class); - - public static final String MonitorCmd = "mntr"; - public static final String ConfigCmd = "conf"; - public static final String ServerCmd = "srvr"; - - private static final Set supportedCommands = new HashSet<>(); - - public static Result executeFourLetterCmd(Long clusterPhyId, - String host, - int port, - boolean secure, - int timeout, - FourLetterWordDataParser dataParser) { - try { - if (!supportedCommands.contains(dataParser.getCmd())) { - return Result.buildFromRSAndMsg(ResultStatus.PARAM_ILLEGAL, String.format("ZK %s命令暂未进行支持", dataParser.getCmd())); - } - - String cmdData = send4LetterWord(host, port, dataParser.getCmd(), secure, timeout); - if (cmdData.contains("not executed because it is not in the whitelist.")) { - return Result.buildFromRSAndMsg(ResultStatus.ZK_FOUR_LETTER_CMD_FORBIDDEN, cmdData); - } - if (ValidateUtils.isBlank(cmdData)) { - return Result.buildFromRSAndMsg(ResultStatus.ZK_OPERATE_FAILED, cmdData); - } - - return Result.buildSuc(dataParser.parseAndInitData(clusterPhyId, host, port, cmdData)); - } catch (Exception e) { - LOGGER.error( - "method=executeFourLetterCmd||clusterPhyId={}||host={}||port={}||cmd={}||secure={}||timeout={}||errMsg=exception!", - clusterPhyId, host, port, dataParser.getCmd(), secure, timeout, e - ); - - return Result.buildFromRSAndMsg(ResultStatus.ZK_OPERATE_FAILED, e.getMessage()); - } - } - - - /**************************************************** private method ****************************************************/ - - private static String send4LetterWord( - String host, - int port, - String cmd, - boolean secure, - int timeout) throws IOException, X509Exception.SSLContextException { - long startTime = System.currentTimeMillis(); - - LOGGER.info("connecting to {} {}", host, port); - - Socket socket = null; - OutputStream outputStream = null; - BufferedReader bufferedReader = null; - try { - InetSocketAddress hostaddress = host != null - ? new InetSocketAddress(host, port) - : new InetSocketAddress(InetAddress.getByName(null), port); - if (secure) { - LOGGER.info("using secure socket"); - try (X509Util x509Util = new ClientX509Util()) { - SSLContext sslContext = x509Util.getDefaultSSLContext(); - SSLSocketFactory socketFactory = sslContext.getSocketFactory(); - SSLSocket sslSock = (SSLSocket) socketFactory.createSocket(); - sslSock.connect(hostaddress, timeout); - sslSock.startHandshake(); - socket = sslSock; - } - } else { - socket = new Socket(); - socket.connect(hostaddress, timeout); - } - socket.setSoTimeout(timeout); - - outputStream = socket.getOutputStream(); - outputStream.write(cmd.getBytes()); - outputStream.flush(); - - // 等待InputStream有数据 - while (System.currentTimeMillis() - startTime <= timeout && socket.getInputStream().available() <= 0) { - BackoffUtils.backoff(10); - } - - bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - StringBuilder sb = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - sb.append(line).append("\n"); - } - return sb.toString(); - } catch (SocketTimeoutException e) { - throw new IOException("Exception while executing four letter word: " + cmd, e); - } finally { - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - LOGGER.error( - "method=send4LetterWord||clusterPhyId={}||host={}||port={}||cmd={}||secure={}||timeout={}||errMsg=exception!", - host, port, cmd, secure, timeout, e - ); - } - } - - if (bufferedReader != null) { - try { - bufferedReader.close(); - } catch (IOException e) { - LOGGER.error( - "method=send4LetterWord||host={}||port={}||cmd={}||secure={}||timeout={}||errMsg=exception!", - host, port, cmd, secure, timeout, e - ); - } - } - - if (socket != null) { - try { - socket.close(); - } catch (IOException e) { - LOGGER.error( - "method=send4LetterWord||host={}||port={}||cmd={}||secure={}||timeout={}||errMsg=exception!", - host, port, cmd, secure, timeout, e - ); - } - } - } - } - - static { - supportedCommands.add(MonitorCmd); - supportedCommands.add(ConfigCmd); - supportedCommands.add(ServerCmd); - } - -} diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/ZookeeperUtils.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/ZookeeperUtils.java deleted file mode 100644 index 3ae38c34..00000000 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/utils/zookeeper/ZookeeperUtils.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xiaojukeji.know.streaming.km.common.utils.zookeeper; - -import com.xiaojukeji.know.streaming.km.common.utils.Tuple; -import org.apache.zookeeper.client.ConnectStringParser; -import org.apache.zookeeper.common.NetUtils; - -import java.util.ArrayList; -import java.util.List; - -import static org.apache.zookeeper.common.StringUtils.split; - -public class ZookeeperUtils { - private static final int DEFAULT_PORT = 2181; - - /** - * 解析ZK地址 - * @see ConnectStringParser - */ - public static List> connectStringParser(String connectString) { - List> ipPortList = new ArrayList<>(); - - if (connectString == null) { - return ipPortList; - } - - // parse out chroot, if any - int off = connectString.indexOf('/'); - if (off >= 0) { - connectString = connectString.substring(0, off); - } - - List hostsList = split(connectString, ","); - for (String host : hostsList) { - int port = DEFAULT_PORT; - String[] hostAndPort = NetUtils.getIPV6HostAndPort(host); - if (hostAndPort.length != 0) { - host = hostAndPort[0]; - if (hostAndPort.length == 2) { - port = Integer.parseInt(hostAndPort[1]); - } - } else { - int pidx = host.lastIndexOf(':'); - if (pidx >= 0) { - // otherwise : is at the end of the string, ignore - if (pidx < host.length() - 1) { - port = Integer.parseInt(host.substring(pidx + 1)); - } - host = host.substring(0, pidx); - } - } - - ipPortList.add(new Tuple<>(host, port)); - } - - return ipPortList; - } - - public static String getNamespace(String zookeeperAddress) { - int index = zookeeperAddress.indexOf('/'); - String namespace = "/"; - if (index != -1) { - namespace = zookeeperAddress.substring(index); - } - return namespace; - } - - -} diff --git a/km-console/.env b/km-console/.env deleted file mode 100644 index a892cff7..00000000 --- a/km-console/.env +++ /dev/null @@ -1,2 +0,0 @@ -BUSINESS_VERSION='false' -PUBLIC_PATH='' diff --git a/km-console/.eslintignore b/km-console/.eslintignore deleted file mode 100644 index 0bc8d0bf..00000000 --- a/km-console/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -test/ -scripts/ -build/ -public/ -types/ \ No newline at end of file diff --git a/km-console/.eslintrc.js b/km-console/.eslintrc.js deleted file mode 100644 index 94649d20..00000000 --- a/km-console/.eslintrc.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - env: { - browser: true, - node: true, - es2021: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended', // 如果同时使用了eslint和prettier发生冲突了,会关闭掉与prettier有冲突的规则,也就是使用prettier认为对的规则 - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 12, - sourceType: 'module', - }, - plugins: [ - 'react', - 'react-hooks', - '@typescript-eslint', - 'prettier', // eslint 会使用pretter的规则对代码格式化 - ], - rules: { - 'react-hooks/rules-of-hooks': 'error', // Checks rules of Hooks - '@typescript-eslint/no-var-requires': 0, - 'prettier/prettier': 2, // 这项配置 对于不符合prettier规范的写法,eslint会提示报错 - 'no-console': 1, - 'react/display-name': 0, - '@typescript-eslint/explicit-module-boundary-types': 'off', - }, -}; diff --git a/km-console/.gitignore b/km-console/.gitignore deleted file mode 100644 index 296425e8..00000000 --- a/km-console/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -node_modules -dist/ -pub/ -build/ -.sass-cache/ -.DS_Store -.idea/ -.vscode/ -coverage -versions/ -debug.log -yarn.lock -target \ No newline at end of file diff --git a/km-console/.prettierrc.js b/km-console/.prettierrc.js deleted file mode 100644 index 89b8c62c..00000000 --- a/km-console/.prettierrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - "printWidth": 140, // 指定代码长度,超出换行 - "tabWidth": 2, // tab 键的宽度 - "semi": true, // 结尾加上分号 - "trailingComma": "es5", // 确保对象的最后一个属性后有逗号 - singleQuote: true, - "bracketSpacing": true, // 大括号有空格 { name: 'rose' } - "insertPragma": false, // 是否在格式化的文件顶部插入Pragma标记,以表明该文件被prettier格式化过了 - "htmlWhitespaceSensitivity": "ignore", // html文件的空格敏感度,控制空格是否影响布局 -} \ No newline at end of file diff --git a/km-console/CHANGELOG.md b/km-console/CHANGELOG.md deleted file mode 100644 index b28b04f6..00000000 --- a/km-console/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/km-console/README.md b/km-console/README.md deleted file mode 100644 index 6a426f3e..00000000 --- a/km-console/README.md +++ /dev/null @@ -1,65 +0,0 @@ -## 前提 - -通常情况下,您可以通过 [本地源码启动手册](https://github.com/didi/KnowStreaming/blob/master/docs/dev_guide/%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E5%90%AF%E5%8A%A8%E6%89%8B%E5%86%8C.md) 来打包工程。如果您需要在本地独立启动或打包前端服务,请参考以下手册。 - -在进行以下的步骤之前,首先确保您已经安装了 `node`。如已安装,可以通过在终端执行 `node -v` 来获取到 node 版本,项目推荐使用 `node v12` 版本运行(例如 `node v12.22.12`)。 - -另外,`windows` 用户请在 `git bash` 下运行下面的命令。 - -## 一、进入 km-console 目录 - -在终端执行以下步骤时,需要先进入 `KnowStreaming/km-console` 目录。 - -## 二、安装项目依赖(必须) - -1. 安装 lerna(可选,安装后可以直接通过 lerna 的全局指令管理项目,如果不了解 lerna 可以不安装) - -``` -npm install -g lerna -``` - -2. 安装项目依赖 - -``` -npm run i -``` - -我们默认保留了 `package-lock.json` 文件,以防止可能的依赖包自动升级导致的问题。依赖默认会通过 taobao 镜像 `https://registry.npmmirror.com/` 服务下载(如需修改下载源,请见当前目录下 package.json 文件)。 - -## 三、启动项目(可选,打包构建请直接看步骤三) - -``` -npm run start -``` - -该指令会启动 `packages` 目录下的所有应用,如果需要单独启动应用,其查看下方 QA。 - -多集群管理应用会启动在 http://localhost:8000,系统管理应用会占用 http://localhost:8001。 -请确认 `8000` 和 `8001` 端口没有被其他应用占用。 - -后端本地服务启动在 http://localhost:8080,请求通过 webpack dev server 代理访问 8080 端口,需要启动后端服务后才能正常请求接口。 - -如果启动失败,可以参见另外一种本地启动方式 [本地源码启动手册](https://github.com/didi/KnowStreaming/blob/master/docs/dev_guide/%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E5%90%AF%E5%8A%A8%E6%89%8B%E5%86%8C.md) - -## 四、构建项目 - -``` -npm run build -``` - -项目构建成功后,会存放到 km-rest/src/main/resources/tamplates 目录下。 - -## 目录结构 - -- packages - - layout-clusters-fe: 基座应用 & 多集群管理(其余应用启动需要首先启动该应用) - - config-manager-fe: 子应用 - 系统管理 -- ... - -## QA - -Q: 在 `km-console` 目录下执行 `npm run start` 时看不到应用构建和热加载过程?如何启动单个应用? - -A: 需要到具体的应用中执行 `npm run start`,例如 `cd packages/layout-clusters-fe` 后,执行 `npm run start`。 - -如遇到其它问题,请见 [faq](https://github.com/didi/KnowStreaming/blob/master/docs/user_guide/faq.md)。 diff --git a/km-console/commitlint.config.js b/km-console/commitlint.config.js deleted file mode 100644 index 28fe5c5b..00000000 --- a/km-console/commitlint.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {extends: ['@commitlint/config-conventional']} diff --git a/km-console/d1.js b/km-console/d1.js deleted file mode 100644 index 367bf433..00000000 --- a/km-console/d1.js +++ /dev/null @@ -1,5 +0,0 @@ -const d1Config = require('./d1.json'); -d1Config.appConfig.webpackChain = function (config) { - // config.devServer.port(10000); -}; -module.exports = d1Config; diff --git a/km-console/d1.json b/km-console/d1.json deleted file mode 100644 index 5a96878a..00000000 --- a/km-console/d1.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "appConfig": { - "appName": "KnowStreaming-FE", - "ident": "", - "port": "8000", - "webpackCustom": "", - "webpackChain": "", - "entry": [ - { - "title": "", - "name": "", - "src": "" - } - ], - "layout": "layout-clusters-fe", - "packages": [ - "config-manager-fe", - "layout-clusters-fe" - ] - }, - "entrust": true, - "localBuilderVersion": true, - "extensions": [], - "preset": "@didi/d1-preset-opensource", - "builderType": "lerna", - "generatorType": "", - "mockDir": "mock" -} \ No newline at end of file diff --git a/km-console/lerna.json b/km-console/lerna.json deleted file mode 100644 index 265e9467..00000000 --- a/km-console/lerna.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "packages": [ - "packages/*" - ], - "version": "0.0.0" -} \ No newline at end of file diff --git a/km-console/package-lock.json b/km-console/package-lock.json deleted file mode 100644 index 0bf42709..00000000 --- a/km-console/package-lock.json +++ /dev/null @@ -1,8850 +0,0 @@ -{ - "name": "root", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, - "requires": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "dev": true - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@commitlint/cli": { - "version": "13.2.1", - "resolved": "https://registry.npmmirror.com/@commitlint/cli/-/cli-13.2.1.tgz", - "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", - "dev": true, - "requires": { - "@commitlint/format": "^13.2.0", - "@commitlint/lint": "^13.2.0", - "@commitlint/load": "^13.2.1", - "@commitlint/read": "^13.2.0", - "@commitlint/types": "^13.2.0", - "lodash": "^4.17.19", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - } - }, - "@commitlint/config-conventional": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", - "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", - "dev": true, - "requires": { - "conventional-changelog-conventionalcommits": "^4.3.1" - } - }, - "@commitlint/ensure": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/ensure/-/ensure-13.2.0.tgz", - "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "lodash": "^4.17.19" - } - }, - "@commitlint/execute-rule": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", - "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", - "dev": true - }, - "@commitlint/format": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/format/-/format-13.2.0.tgz", - "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "chalk": "^4.0.0" - } - }, - "@commitlint/is-ignored": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", - "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "semver": "7.3.5" - } - }, - "@commitlint/lint": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/lint/-/lint-13.2.0.tgz", - "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", - "dev": true, - "requires": { - "@commitlint/is-ignored": "^13.2.0", - "@commitlint/parse": "^13.2.0", - "@commitlint/rules": "^13.2.0", - "@commitlint/types": "^13.2.0" - } - }, - "@commitlint/load": { - "version": "13.2.1", - "resolved": "https://registry.npmmirror.com/@commitlint/load/-/load-13.2.1.tgz", - "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", - "dev": true, - "requires": { - "@commitlint/execute-rule": "^13.2.0", - "@commitlint/resolve-extends": "^13.2.0", - "@commitlint/types": "^13.2.0", - "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", - "chalk": "^4.0.0", - "cosmiconfig": "^7.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "typescript": "^4.4.3" - } - }, - "@commitlint/message": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/message/-/message-13.2.0.tgz", - "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", - "dev": true - }, - "@commitlint/parse": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/parse/-/parse-13.2.0.tgz", - "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - } - }, - "@commitlint/read": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/read/-/read-13.2.0.tgz", - "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", - "dev": true, - "requires": { - "@commitlint/top-level": "^13.2.0", - "@commitlint/types": "^13.2.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0" - } - }, - "@commitlint/resolve-extends": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", - "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", - "dev": true, - "requires": { - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - } - }, - "@commitlint/rules": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/rules/-/rules-13.2.0.tgz", - "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", - "dev": true, - "requires": { - "@commitlint/ensure": "^13.2.0", - "@commitlint/message": "^13.2.0", - "@commitlint/to-lines": "^13.2.0", - "@commitlint/types": "^13.2.0", - "execa": "^5.0.0" - } - }, - "@commitlint/to-lines": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-13.2.0.tgz", - "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", - "dev": true - }, - "@commitlint/top-level": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/top-level/-/top-level-13.2.0.tgz", - "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "@commitlint/types": { - "version": "13.2.0", - "resolved": "https://registry.npmmirror.com/@commitlint/types/-/types-13.2.0.tgz", - "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "@endemolshinegroup/cosmiconfig-typescript-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", - "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", - "dev": true, - "requires": { - "lodash.get": "^4", - "make-error": "^1", - "ts-node": "^9", - "tslib": "^2" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@lerna/add": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/add/-/add-5.5.0.tgz", - "integrity": "sha512-RdJ8yyE8BizzrYRjZuqeXtgkHBE/KzcS7tmBG+UKCQ5QFLnkdORzaVECNy2sfZl0vTtrxj4cv+kuwxIeg/4XVQ==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/npm-conf": "5.5.0", - "@lerna/validation-error": "5.5.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/bootstrap/-/bootstrap-5.5.0.tgz", - "integrity": "sha512-GeXLSDi6gxj2O3t5T7qgFabBKoC5EQwiFyQ4ufqx1Wm/mWxqRI+enTBnbaBbmhQaVQ9wfPvMPDukJ5Q9PCTUcQ==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/has-npm-version": "5.5.0", - "@lerna/npm-install": "5.5.0", - "@lerna/package-graph": "5.5.0", - "@lerna/pulse-till-done": "5.5.0", - "@lerna/rimraf-dir": "5.5.0", - "@lerna/run-lifecycle": "5.5.0", - "@lerna/run-topologically": "5.5.0", - "@lerna/symlink-binary": "5.5.0", - "@lerna/symlink-dependencies": "5.5.0", - "@lerna/validation-error": "5.5.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/changed/-/changed-5.5.0.tgz", - "integrity": "sha512-ZEnVHrPEpf2Iii/Z59g1lfKEwPA1V2an5L27MzNQjbWe6JQZqTU+8V6m+Vmbr4VdEH5jfRL5NVETGCLl7qN/pQ==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/listable": "5.5.0", - "@lerna/output": "5.5.0" - } - }, - "@lerna/check-working-tree": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/check-working-tree/-/check-working-tree-5.5.0.tgz", - "integrity": "sha512-U35yV8R+tv6zQgoDr0rnBt4wm4gyhDcE4tUEeB8m7JHVu7g45Fjv2jFLH1z5RM1PVaEbzKVebqfN5ccB0EBuyg==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.5.0", - "@lerna/describe-ref": "5.5.0", - "@lerna/validation-error": "5.5.0" - } - }, - "@lerna/child-process": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/child-process/-/child-process-5.5.0.tgz", - "integrity": "sha512-er7bsj2W/H8JWAIB+CkgCLk9IlMkyVzywbOZcMC+xic2fp7rmM/BdtAE4nTjkKwfaRYF/bwjHyZowZUR3s8cEg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/clean/-/clean-5.5.0.tgz", - "integrity": "sha512-TRW4Gkv6QpWSy0tm72NrxvgmTAC+W0LqhLPlFM5k5feFS75/HGOycpf97M4JSUueyBCuVjsPfzqp/e6MB3Ntng==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/prompt": "5.5.0", - "@lerna/pulse-till-done": "5.5.0", - "@lerna/rimraf-dir": "5.5.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/cli/-/cli-5.5.0.tgz", - "integrity": "sha512-7TtnO2xfnfrpWGIui6ANrH4/AVHmSfjaExSoZKNhh2dKSSEOETEUfFIIzfEAirAVR7EOXAJwDdFbbpB4lQtyUg==", - "dev": true, - "requires": { - "@lerna/global-options": "5.5.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "@lerna/collect-uncommitted": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.0.tgz", - "integrity": "sha512-oVGXS0fC8q2d1lG695eCd8dkr0fhmUx4bWA1IshVd/u0Puk7f8+m71POcLV3h1gR/2Fqs7vb7G/sPyuzGtwn8w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/collect-updates/-/collect-updates-5.5.0.tgz", - "integrity": "sha512-6kBMi6K6PHIBvZKlfp/0PvRgmzvvfx+eZpmLjF+0yjcfwBn+QDkq7H+QohBiCzt2vxHVHsM6zutNhl2jNTmChg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/describe-ref": "5.5.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/command/-/command-5.5.0.tgz", - "integrity": "sha512-ut055kFWc1OJFdI9Cj1kDxtJ4ejvAsfRgUoVxWT1Fw4Me/OzQRHYmUupW0FK8Kc+7gcz4mGKzUVWmRmDBvn+Fw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/package-graph": "5.5.0", - "@lerna/project": "5.5.0", - "@lerna/validation-error": "5.5.0", - "@lerna/write-log-file": "5.5.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/conventional-commits/-/conventional-commits-5.5.0.tgz", - "integrity": "sha512-qPTRNCm3H4MvZAdQLzyYq7ifJyofMSeZmel232b5mglW3OSehxPQUxzr/u/0p8Nqs89uZxZRHyznLnhRNdXcJQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.5.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/create": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/create/-/create-5.5.0.tgz", - "integrity": "sha512-B+ERbzgFMYspsaU9We65Wqf9Y7sGsEYVFPi3EKpCXxkvVr65YRFL6Mz/WAVggwYkR49umduXXVmjnCWcuT0Ydw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/npm-conf": "5.5.0", - "@lerna/validation-error": "5.5.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/create-symlink/-/create-symlink-5.5.0.tgz", - "integrity": "sha512-vWGvRbTh3ji3J/8mVyLPa9Yst4MZzp9W2+8hyYHw8eAzCtHPuH3Z0AReIHpYRfoViUvxIl/rEEuD2D1sDh61BQ==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/describe-ref": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/describe-ref/-/describe-ref-5.5.0.tgz", - "integrity": "sha512-gNt9deRWcDoIKCwKRHu/TEt2HcHhQxzVlP8GQHYp4NuWTG9c+gTQfyuXvbZd0K9jCijPUBNy/oMb6usXceJWeg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/diff/-/diff-5.5.0.tgz", - "integrity": "sha512-2PIka/4kKDOsh5Ht+X2OuLNTWzRk+LcnN5bCin87w7vGw3esdvlT1fj1tKjoZ1/aC/O8tqtKXyeP9WE6YHWVpw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/validation-error": "5.5.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/exec/-/exec-5.5.0.tgz", - "integrity": "sha512-4asvrCYFGgnEbXtSiKJLDd6DShUl7FIRRCWx7JXJfa0B6sg00cB9Cg3JTp+F+cQWCOspRkzqRetqu57o6wRpXg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/profiler": "5.5.0", - "@lerna/run-topologically": "5.5.0", - "@lerna/validation-error": "5.5.0", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/filter-options/-/filter-options-5.5.0.tgz", - "integrity": "sha512-Hwn4sOixZdWVe6SFZ7aPFjhMYoSHz0zbwy3t40KXuhjLqT8T5RLmGWW1u2Al6dQ5fuQyhWXGS4DWfobs7Th62A==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.5.0", - "@lerna/filter-packages": "5.5.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/filter-packages/-/filter-packages-5.5.0.tgz", - "integrity": "sha512-Ad23aRPKgr/zt6jMWi8xKL+2z47GBQyxC4HhsDEMp62OGeGhGyK1sGW+S8OTEh17sIVpGG2GX9eCfnG8pvfxUQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.5.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.0.tgz", - "integrity": "sha512-WRt560FB6rsj4yVtR1wIJWJufITajECaw1omNi2KkL7/o7ky4NvHACVOtibETUNMXrnuPJ/QBww4roLFVIAyog==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/get-packed/-/get-packed-5.5.0.tgz", - "integrity": "sha512-X+91ma9SQPrsVctsrFRBABn4+T87lnTEd/BngB7OYlYFsJCc+a6vd+5pnIWxKK5OiUr6+tRpMbJp8BUXJFdb4Q==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/github-client": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/github-client/-/github-client-5.5.0.tgz", - "integrity": "sha512-CaBleVR0F+8Yv4FQu6r7Ocqnh3DEq6dQeu0r4RX+mc9jBn9J/N2SdLKRdC7vcvmkcLCxacg8ewuesYqvakQ8HQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/gitlab-client/-/gitlab-client-5.5.0.tgz", - "integrity": "sha512-ktKfBgQnt0MtyiTM3wuec47Wk7nHc+k2YvoC1roDGaXpgWS7lOQnA8RyorX4Hal3ZsrL95qi9vZOolWvUnxS3w==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/global-options": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/global-options/-/global-options-5.5.0.tgz", - "integrity": "sha512-ydEsnXi2LRpxkzpSf8GFeCdh1roTKANZdqzjkhuUlBHrKzKxywpNPpGbXmh6JziHMYdgKGZUjnY35TxBlVRN6Q==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/has-npm-version/-/has-npm-version-5.5.0.tgz", - "integrity": "sha512-ALvz0fF1I7Dx+c+0rvkFdqEtp/hs4F/Av2blhOaFWTs78D7FTQa7IpURmvdVDi56H30fqa9b4nEQqnaCRJZKpQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/import/-/import-5.5.0.tgz", - "integrity": "sha512-mn87JOcb/j4KBV37Kv589avN5uArcJcASBonm1iWcTwxTvcNFj2BjxnUoVVY6EFamDfBLwWBcAvCO+cvmJkj3Q==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/prompt": "5.5.0", - "@lerna/pulse-till-done": "5.5.0", - "@lerna/validation-error": "5.5.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/info": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/info/-/info-5.5.0.tgz", - "integrity": "sha512-2pgogAahv8tqY2sFarOCSXcxJFEag9z1pPGnHwKsq8NtekR0exLwFp93iTbDKRff8ScSmH82lNh22GFKZKLm/A==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/output": "5.5.0", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/init/-/init-5.5.0.tgz", - "integrity": "sha512-dPjuk12s2pSnSL6ib7KQ+RKFyFYvsWAnSMro3sanb07og3tJkwVne8srlmYQsd/NghU8sBdQFFKIV+pzg2sg9w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/project": "5.5.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/link": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/link/-/link-5.5.0.tgz", - "integrity": "sha512-wucP0DBKBG2Mkr9PNkPB9ez5pRxLEIY+6s0hB3iTxCTmef5GYPlQ+ftiaN2/IGVYb569AW97YilROuU2gDMrMw==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/package-graph": "5.5.0", - "@lerna/symlink-dependencies": "5.5.0", - "@lerna/validation-error": "5.5.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/list/-/list-5.5.0.tgz", - "integrity": "sha512-vic7CeD/TL0bh6hzpgHK2Ogz7MW1NB6Sws1J7cl5CTn4sAGm/KZ/g4MNsLFVLJNAiPh+t2cmT0ndyNluShnjqA==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/listable": "5.5.0", - "@lerna/output": "5.5.0" - } - }, - "@lerna/listable": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/listable/-/listable-5.5.0.tgz", - "integrity": "sha512-2kCpn8vlmRTVA3tGr1XRkHOW2ljXjb/hRNxSK3DUf0k6sl9sEdQFSH7cf5qPnCAPcuLHS7b8kuFhA6x8nXFP3g==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.5.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/log-packed/-/log-packed-5.5.0.tgz", - "integrity": "sha512-kVDEy29VfBQeha92IBuPq9W/kP6ffboCWuU64lBIAljTDdpFrMFBeLRrWfLSLIVe2fq8FpGk8PInNlDHmvT5PA==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/npm-conf/-/npm-conf-5.5.0.tgz", - "integrity": "sha512-ml1Pmn26a61y6nFijpNE9RAbsNOF2XL1Kqyd3x7+XFaDmqbSDqo2g5qlsb4gTdUj/Uy1niRGzy3XdC0FH5G+mg==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/npm-dist-tag": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.0.tgz", - "integrity": "sha512-Hz6n9tqbGUuqI1q9IS3tAGx95TkOqLfXRay9kr/hjswj+HKp0Dtw1cu8YRtizA7CuIWw831eXCbqfFyILfytaA==", - "dev": true, - "requires": { - "@lerna/otplease": "5.5.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/npm-install/-/npm-install-5.5.0.tgz", - "integrity": "sha512-axMtqZYuAl5qGcRCBYKqINimMrbQRM1f09sz9rKtwnx15066qT0IaKUt9YYo5bsZm/i3BXpBqcUxZXlGzQNWBQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/get-npm-exec-opts": "5.5.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/npm-publish": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/npm-publish/-/npm-publish-5.5.0.tgz", - "integrity": "sha512-eDcmga5CcXGmSdVXBO75eCX3vypEwQO/lN7VqRpLSOsIHIRUGbfwo/stbz8sIF4+HAkaAFGj6BScjvjlyoh2pQ==", - "dev": true, - "requires": { - "@lerna/otplease": "5.5.0", - "@lerna/run-lifecycle": "5.5.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/npm-run-script": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/npm-run-script/-/npm-run-script-5.5.0.tgz", - "integrity": "sha512-ltEtw28CLpG/VaWX4PZ1enJ0wxA/Qw8ScAwhQTZj0xL6Lhkq5H0LoEALVRAq2gK10h1p2IUs/W034oXT1chH0w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "@lerna/get-npm-exec-opts": "5.5.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/otplease/-/otplease-5.5.0.tgz", - "integrity": "sha512-zNS315iH2VRQz/LJTrqUUuEqMnNsCoMXOMOaBzcB/AL29mYMvJlT05dMqenMPKrRtW0tAFzPC7jLTzybdRa7Qg==", - "dev": true, - "requires": { - "@lerna/prompt": "5.5.0" - } - }, - "@lerna/output": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/output/-/output-5.5.0.tgz", - "integrity": "sha512-f+MXc9X1xEe2w0AC+CAMr093MumCTNYmyIt8eUMYQMmoRkWT2n4tN8/KvWw9ucSWLKMkZtOTJiC+S6RJ4nWUig==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/pack-directory/-/pack-directory-5.5.0.tgz", - "integrity": "sha512-zHpIAeZOpIH/Slb8vuh75XR46mc4RZNwPS6XpwRgMRpp3Y1Bazlv6hDcq+pZTg1FwYKIDQDRfxW3IQi/aDPIjA==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.5.0", - "@lerna/package": "5.5.0", - "@lerna/run-lifecycle": "5.5.0", - "@lerna/temp-write": "5.5.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/package/-/package-5.5.0.tgz", - "integrity": "sha512-vP08ZdMd3A7B0hEI4ZNgCeBef64yCidrnFUIiIhXb/tAsDmGCGqS2IFdGRNE9vv01tVg0WrPLim4tl8AjoigKw==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "@lerna/package-graph": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/package-graph/-/package-graph-5.5.0.tgz", - "integrity": "sha512-g378NrCTEmVXqkAkv9EX8L3K7JTioPNuxItXTHQxlHDhZ2RM9KCVbT/ihwefVujWwwMPNij10bmfJUaEp2TGPQ==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.5.0", - "@lerna/validation-error": "5.5.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.0.tgz", - "integrity": "sha512-cpy0EgfO/7fXPhl/EsJnD8uGv0f8d6FHG2R1Xr7sJvmkffhkIy90qkFA7uSaZAA+ar9QFSAUJ+wGox0bhGJhHA==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/profiler/-/profiler-5.5.0.tgz", - "integrity": "sha512-2DkkMxYCq/RsBptN+gJtmqwdrFqji6QMpNlm7v9JgS9kN2aHUIxcavtHXDaYf9sdPoey/bGypRv9DDTDcuw9MA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/project": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/project/-/project-5.5.0.tgz", - "integrity": "sha512-TD6/QGv/+Uh7GRXM/9m3EC0QpK2+U1WA+hoE5pSnpU5oDzwwUkynS3RuAcd2ID19e/u/ajfZtV+xcpaM7t+SHw==", - "dev": true, - "requires": { - "@lerna/package": "5.5.0", - "@lerna/validation-error": "5.5.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "js-yaml": "^4.1.0", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "@lerna/prompt": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/prompt/-/prompt-5.5.0.tgz", - "integrity": "sha512-B7QEmmyleR+1XAewqEPdgZPecekJgVoAZ8YZgR8l4QlAMvf5BTHI//3AJI/HPN4DYZWGcjDoGFLEkpX906T8Rw==", - "dev": true, - "requires": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/publish/-/publish-5.5.0.tgz", - "integrity": "sha512-ZstILgupYxB8TpGkWgPZg1uoFIQUij07kizHau1BZXdV3xwPU6jtYAzGXuztinJDnnxfwjc7SjuinoYZcbmJXg==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.5.0", - "@lerna/child-process": "5.5.0", - "@lerna/collect-updates": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/describe-ref": "5.5.0", - "@lerna/log-packed": "5.5.0", - "@lerna/npm-conf": "5.5.0", - "@lerna/npm-dist-tag": "5.5.0", - "@lerna/npm-publish": "5.5.0", - "@lerna/otplease": "5.5.0", - "@lerna/output": "5.5.0", - "@lerna/pack-directory": "5.5.0", - "@lerna/prerelease-id-from-version": "5.5.0", - "@lerna/prompt": "5.5.0", - "@lerna/pulse-till-done": "5.5.0", - "@lerna/run-lifecycle": "5.5.0", - "@lerna/run-topologically": "5.5.0", - "@lerna/validation-error": "5.5.0", - "@lerna/version": "5.5.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/pulse-till-done": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.0.tgz", - "integrity": "sha512-PcPSCWGzLp00UGJ5VHDpdqpBQ9C9Cs7E5FImEITGHE9UwcAC23LwSp7tOzdXWPyj3u8PLYLn+ebt9ml1jWSKgA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/query-graph/-/query-graph-5.5.0.tgz", - "integrity": "sha512-mqCzZRF+IDPSj2zYJ1eO3PQsZshiKf54BXAe7HnYYJNbs1i8JMRpdaLr3TEyKDpVTcVzbEmFKwGi7KMhJG6rBQ==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.5.0" - } - }, - "@lerna/resolve-symlink": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.0.tgz", - "integrity": "sha512-J44Kc6OWa1uNZh+YSWuIBorTpTuXhuuJ7DtX4vwfF3AAp2frW6pBrmFZMibOcyOQ6QCp+PeiHQCXCF42uSq8pA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/rimraf-dir": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.0.tgz", - "integrity": "sha512-dwWN5SGXQ39FocRAZ3uL7tYUuK98r/VHQZRcJjJ8hxpuxti+EPzGegtA05NsvvmW2PpFsBzYKITFQHX3GX4LWA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.5.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/run/-/run-5.5.0.tgz", - "integrity": "sha512-yYR65A/GcDgEMmk2lMSBHGAbdgLMi6wICugLzVXfXISuTbEMzN1dCwSeGBOxzK2cvKV2Bpn4WeEYs64FNmNJbQ==", - "dev": true, - "requires": { - "@lerna/command": "5.5.0", - "@lerna/filter-options": "5.5.0", - "@lerna/npm-run-script": "5.5.0", - "@lerna/output": "5.5.0", - "@lerna/profiler": "5.5.0", - "@lerna/run-topologically": "5.5.0", - "@lerna/timer": "5.5.0", - "@lerna/validation-error": "5.5.0", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.0.tgz", - "integrity": "sha512-BtnEO3IlZ7znUmQtSxd7oSSmgzJbSH+v58foTpbuvMtOBFJxV4LNyv2uyto2t4bYdCWEnw4ybd8j32aEEG9UNQ==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.5.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - } - }, - "@lerna/run-topologically": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/run-topologically/-/run-topologically-5.5.0.tgz", - "integrity": "sha512-zl4I/SNg/yiLja1aF0B4X22CRzpRdvLB47KGjAgiGydcHwx2TUmI3MPoQVjvUbaOuctF/wSMS2tI6Hgdo60I0Q==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.5.0", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/symlink-binary/-/symlink-binary-5.5.0.tgz", - "integrity": "sha512-vpVzEWgVfKGzMheb9XizF8hF/Ypfov0iMPBSAzVNxu5eNQVUz3KFrIZNgiBsFdIVN4W/y4jLwOSgXXKwvIodkA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.5.0", - "@lerna/package": "5.5.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/symlink-dependencies": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.0.tgz", - "integrity": "sha512-gqFZ4AeVr+nqyfg8c2xNizGzBemfgtCpGv4NnjA/66HJWCE+/fT7NTIi8Qk2glbYf37ojRcjUfc0RvW7NGv5qA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.5.0", - "@lerna/resolve-symlink": "5.5.0", - "@lerna/symlink-binary": "5.5.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/temp-write": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/temp-write/-/temp-write-5.5.0.tgz", - "integrity": "sha512-7MmqTfyWcjGkgPkWHaldmCmDBSLka50z0+lsmZuGLwIvQl72ZfC+ZJF/6107m+hgtUJBpJQ3UYEhrrdfR4L46Q==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@lerna/timer": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/timer/-/timer-5.5.0.tgz", - "integrity": "sha512-jgCL2ZmZNn7sWL+M/TuGJukTkUs/il6EwBYcgd10h0JazQ4fAiBhFq36ZzTvYkz6ujKvKOcqyWrMdmi8Q339qA==", - "dev": true - }, - "@lerna/validation-error": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/validation-error/-/validation-error-5.5.0.tgz", - "integrity": "sha512-o/8sEaZKdZdE4/t+E/cFpnYIiDzt7uMHVpWmpCG0l6nZSDzB8+5ehAAudy2qJOwxEAKJ6QGvi7jWLjc2NWa4HQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/version/-/version-5.5.0.tgz", - "integrity": "sha512-E6ZrzTrYwof5cSvyTpztZKOiJKAK+aXi/gfsGbLdbYGMArY4B/pYOMOcRMXHBh7BuLicMih/mRUb4M7uCnuE0A==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.5.0", - "@lerna/child-process": "5.5.0", - "@lerna/collect-updates": "5.5.0", - "@lerna/command": "5.5.0", - "@lerna/conventional-commits": "5.5.0", - "@lerna/github-client": "5.5.0", - "@lerna/gitlab-client": "5.5.0", - "@lerna/output": "5.5.0", - "@lerna/prerelease-id-from-version": "5.5.0", - "@lerna/prompt": "5.5.0", - "@lerna/run-lifecycle": "5.5.0", - "@lerna/run-topologically": "5.5.0", - "@lerna/temp-write": "5.5.0", - "@lerna/validation-error": "5.5.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "@lerna/write-log-file": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/@lerna/write-log-file/-/write-log-file-5.5.0.tgz", - "integrity": "sha512-XPnp5B+bcmwpXJpJn45V8e2SU6Z1oTwW0vW9uW3l0nmbOvpT9PbPkf9hC80cZOWovXSBefUDwEGqA5fQdhvqGg==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@nrwl/cli": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/cli/-/cli-15.7.2.tgz", - "integrity": "sha512-A/72FAW1e0ku8YB/PaCqN9BpVvciO83MS5F5bvX5PA8xCNqe1+iXp/5T2ASnN2lB9zR3fQJmvR7mHKTKQlqQQQ==", - "dev": true, - "requires": { - "nx": "15.7.2" - } - }, - "@nrwl/nx-darwin-arm64": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.7.2.tgz", - "integrity": "sha512-F82exjuqkAkElSTxEcTFeLMhHpbGiccfTQh2VjXMS+ONldxM+Kd7atJjtUG8wKNXfg0lxxjjAdnzLy3iBuN/HQ==", - "dev": true, - "optional": true - }, - "@nrwl/nx-darwin-x64": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.7.2.tgz", - "integrity": "sha512-MNT7Bxz6yhoVLCgGpR0NtVkj20SER1CbrCaY7tmsKVNY9iA/EOZhz9qa3LeA1KZ4lw8Gpi2vD42mOngn7Mwr7w==", - "dev": true, - "optional": true - }, - "@nrwl/nx-linux-arm-gnueabihf": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.7.2.tgz", - "integrity": "sha512-QGyPkYnZ9LnUnuCzrP50bwsMJ9n6r8K2bNC1sQQwioijY+4MHNL+bMTOGWc8+lYBP7Ju3gpTqozGV3FQVkaM2w==", - "dev": true, - "optional": true - }, - "@nrwl/nx-linux-arm64-gnu": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.7.2.tgz", - "integrity": "sha512-HqufFVIvuunfChEFGkIhsLhhQjWLTFcCH2aQBSNesHpm6AhFVRGyokNu+PT6NNobr+BTrqJMocBqNQR1uvSyRQ==", - "dev": true, - "optional": true - }, - "@nrwl/nx-linux-arm64-musl": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.7.2.tgz", - "integrity": "sha512-9B8q6I/OVyQuYe+Yg2wNyxza/CsbvejIUsrK3QGGWUwHlkklqOSmUOHyTrcyMHUSped6CWPyKdIywngYOQzltQ==", - "dev": true, - "optional": true - }, - "@nrwl/nx-linux-x64-gnu": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.7.2.tgz", - "integrity": "sha512-8/6WtQn4derYKUWu5SxWWM+1dGihSZXMhDW9l/sXOr/qbMZu3XBmM2XZSguw/+p9gEVHcMmN0+D+Cai+q6/vDQ==", - "dev": true, - "optional": true - }, - "@nrwl/nx-linux-x64-musl": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.7.2.tgz", - "integrity": "sha512-c5SbqYZZBeBHhH5E30xwb4cHzCMVa/GQMCyTpZgsS/AHAPHbdkv+pO6bxxALvLPTyimcub7V+xbLCL7rgALzyw==", - "dev": true, - "optional": true - }, - "@nrwl/nx-win32-arm64-msvc": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.7.2.tgz", - "integrity": "sha512-gWD/+gSO3XBma8PHX1Dp86fM6EcntHFfa7n/BISwDFkZ19MfV/gK6HbO847fkD6I34/IcDM/z1PsFwoIpTeoow==", - "dev": true, - "optional": true - }, - "@nrwl/nx-win32-x64-msvc": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.7.2.tgz", - "integrity": "sha512-ARE4qGPgk+e+pSm0uPhHan5UCRtwNYc5ddVNS88NFrVoDTPm5MxYLGdvLnshWWio/Bx526FcwUMSCBWSW8HIFw==", - "dev": true, - "optional": true - }, - "@nrwl/tao": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/@nrwl/tao/-/tao-15.7.2.tgz", - "integrity": "sha512-srx9heMIt/QIyuqfewiVYbRpFcD/2pHkTkrEEUKspPd25kzAL2adcAITQKVCHI7/VS2sPdDR67pVsGQPZFBMRQ==", - "dev": true, - "requires": { - "nx": "15.7.2" - } - }, - "@octokit/auth-token": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-3.0.3.tgz", - "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0" - } - }, - "@octokit/core": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.5", - "resolved": "https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-7.0.5.tgz", - "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/graphql": { - "version": "5.0.5", - "resolved": "https://registry.npmmirror.com/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "16.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", - "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", - "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", - "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.7", - "resolved": "https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.7.tgz", - "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", - "dev": true, - "requires": { - "@octokit/core": "^4.1.0", - "@octokit/plugin-paginate-rest": "^6.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.0.0" - } - }, - "@octokit/types": { - "version": "9.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/types/-/types-9.0.0.tgz", - "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^16.0.0" - } - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz", - "integrity": "sha512-ygqDUm+BUPvrr0jrXqoteMqmIaZ/bixYOc3A4BRwzEPTZPi6E+n44rzNZWaB0YvtukgP+aoj0i/fyx7FkM2p1w==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.13.0", - "@typescript-eslint/scope-manager": "4.13.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.13.0.tgz", - "integrity": "sha512-/ZsuWmqagOzNkx30VWYV3MNB/Re/CGv/7EzlqZo5RegBN8tMuPaBgNK6vPBCQA8tcYrbsrTdbx3ixMRRKEEGVw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-4.13.0.tgz", - "integrity": "sha512-KO0J5SRF08pMXzq9+abyHnaGQgUJZ3Z3ax+pmqz9vl81JxmTTOUfQmq7/4awVfq09b6C4owNlOgOwp61pYRBSg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-4.13.0.tgz", - "integrity": "sha512-UpK7YLG2JlTp/9G4CHe7GxOwd93RBf3aHO5L+pfjIrhtBvZjHKbMhBXTIQNkbz7HZ9XOe++yKrXutYm5KmjWgQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0" - } - }, - "@typescript-eslint/types": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-4.13.0.tgz", - "integrity": "sha512-/+aPaq163oX+ObOG00M0t9tKkOgdv9lq0IQv/y4SqGkAXmhFmCfgsELV7kOCTb2vVU5VOmVwXBXJTDr353C1rQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz", - "integrity": "sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.13.0.tgz", - "integrity": "sha512-6RoxWK05PAibukE7jElqAtNMq+RWZyqJ6Q/GdIxaiUj2Ept8jh8+FUVlbq9WxMYxkmEOPvCE5cRSyupMpwW31g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "@yarnpkg/parsers": { - "version": "3.0.0-rc.39", - "resolved": "https://registry.npmmirror.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.39.tgz", - "integrity": "sha512-BsD4zq3EVmaHqlynXTceNuEFAtrfToV4fI9GA54moKlWZL4Eb2eXrhgf1jV2nMYx18SZxYO4Jc5Kf1sCDNRjOg==", - "dev": true, - "requires": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmmirror.com/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "dev": true - }, - "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", - "dev": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "bin-links": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/bin-links/-/bin-links-3.0.3.tgz", - "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmmirror.com/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", - "dev": true, - "requires": { - "cachedir": "2.3.0", - "cz-conventional-changelog": "3.3.0", - "dedent": "0.7.0", - "detect-indent": "6.1.0", - "find-node-modules": "^2.1.2", - "find-root": "1.1.0", - "fs-extra": "9.1.0", - "glob": "7.2.3", - "inquirer": "8.2.5", - "is-utf8": "^0.2.1", - "lodash": "4.17.21", - "minimist": "1.2.7", - "strip-bom": "4.0.0", - "strip-json-comments": "3.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "conventional-changelog": { - "version": "3.1.25", - "resolved": "https://registry.npmmirror.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" - } - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmmirror.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-cli": { - "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz", - "integrity": "sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog": "^3.1.24", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "tempfile": "^3.0.0" - } - }, - "conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmmirror.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-conventionalcommits": { - "version": "4.6.3", - "resolved": "https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmmirror.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmmirror.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmmirror.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmmirror.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commit-types": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", - "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", - "dev": true - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cz-conventional-changelog": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", - "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", - "dev": true, - "requires": { - "@commitlint/load": ">6.1.1", - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cz-conventional-changelog-zh": { - "version": "0.0.2", - "resolved": "https://registry.npmmirror.com/cz-conventional-changelog-zh/-/cz-conventional-changelog-zh-0.0.2.tgz", - "integrity": "sha512-rXy2HiG/0M7xChuodAN1L9qHDWTBInGTljaE59AlyqrXQAv0srg147vjep5CO7mGtxVYJQJi9TVP5KVZMWxDqQ==", - "dev": true, - "requires": { - "@commitlint/load": ">6.1.1", - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.assign": "^4.2.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true - }, - "eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "resolved": "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", - "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.11.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.22.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", - "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmmirror.com/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", - "dev": true, - "requires": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", - "dev": true, - "requires": { - "semver-regex": "^3.1.2" - } - }, - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "requires": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - } - }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "requires": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" - } - }, - "git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmmirror.com/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", - "dev": true, - "requires": { - "git-up": "^6.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "husky": { - "version": "4.3.7", - "resolved": "https://registry.npmmirror.com/husky/-/husky-4.3.7.tgz", - "integrity": "sha512-0fQlcCDq/xypoyYSJvEuzbDPHFf8ZF9IXKJxlrnvxABTSzK1VPT2RKYQKrcgJ+YD39swgoB6sbzywUqFxUiqjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "requires": { - "protocols": "^2.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "just-diff": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/just-diff/-/just-diff-5.2.0.tgz", - "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", - "dev": true - }, - "just-diff-apply": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmmirror.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/language-tags/-/language-tags-1.0.8.tgz", - "integrity": "sha512-aWAZwgPLS8hJ20lNPm9HNVs4inexz6S2sQa3wx/+ycuutMNE5/IfYxiWYBbi+9UWCQVaXYCOPUl6gFrPR7+jGg==", - "dev": true, - "requires": { - "language-subtag-registry": "^0.3.20" - } - }, - "lerna": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/lerna/-/lerna-5.5.0.tgz", - "integrity": "sha512-1cZIijUWcI9ZqK+ejj1dBejTOLL64b0pIjYXb9KN8soNIONm/1zbJiSBiAyF4Hd6x4XuIC3kdFx7Ff3Pb9KsYA==", - "dev": true, - "requires": { - "@lerna/add": "5.5.0", - "@lerna/bootstrap": "5.5.0", - "@lerna/changed": "5.5.0", - "@lerna/clean": "5.5.0", - "@lerna/cli": "5.5.0", - "@lerna/create": "5.5.0", - "@lerna/diff": "5.5.0", - "@lerna/exec": "5.5.0", - "@lerna/import": "5.5.0", - "@lerna/info": "5.5.0", - "@lerna/init": "5.5.0", - "@lerna/link": "5.5.0", - "@lerna/list": "5.5.0", - "@lerna/publish": "5.5.0", - "@lerna/run": "5.5.0", - "@lerna/version": "5.5.0", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.6.1 < 16", - "typescript": "^3 || ^4" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "libnpmaccess": { - "version": "6.0.4", - "resolved": "https://registry.npmmirror.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz", - "integrity": "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "libnpmpublish": { - "version": "6.0.5", - "resolved": "https://registry.npmmirror.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz", - "integrity": "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==", - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "10.5.3", - "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-10.5.3.tgz", - "integrity": "sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - } - } - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmmirror.com/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmmirror.com/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "longest": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - } - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmmirror.com/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - } - }, - "merge": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp": { - "version": "9.3.1", - "resolved": "https://registry.npmmirror.com/node-gyp/-/node-gyp-9.3.1.tgz", - "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "requires": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nx": { - "version": "15.7.2", - "resolved": "https://registry.npmmirror.com/nx/-/nx-15.7.2.tgz", - "integrity": "sha512-VRb+CZCji3G4ikdMAGoh6TeU9Q6n5atRwqRSFhUX63er8zhlMvWHLskPMZC4q/81edo/E7RhbmEVUD5MB0JoeA==", - "dev": true, - "requires": { - "@nrwl/cli": "15.7.2", - "@nrwl/nx-darwin-arm64": "15.7.2", - "@nrwl/nx-darwin-x64": "15.7.2", - "@nrwl/nx-linux-arm-gnueabihf": "15.7.2", - "@nrwl/nx-linux-arm64-gnu": "15.7.2", - "@nrwl/nx-linux-arm64-musl": "15.7.2", - "@nrwl/nx-linux-x64-gnu": "15.7.2", - "@nrwl/nx-linux-x64-musl": "15.7.2", - "@nrwl/nx-win32-arm64-msvc": "15.7.2", - "@nrwl/nx-win32-x64-msvc": "15.7.2", - "@nrwl/tao": "15.7.2", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "dependencies": { - "@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmmirror.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "requires": { - "p-reduce": "^2.0.0" - } - }, - "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmmirror.com/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", - "dev": true, - "requires": { - "protocols": "^2.0.0" - } - }, - "parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "requires": { - "read": "1" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", - "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", - "dev": true - }, - "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "requires": { - "global-dirs": "^0.1.1" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmmirror.com/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmmirror.com/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true - } - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmmirror.com/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tar": { - "version": "6.1.13", - "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-4.2.0.tgz", - "integrity": "sha512-ExlilAIS7zJ2EWUMaVXi14H+FnZ18kr17kFkGemMqBx6jW0m8P6XfqwYVPEG53ENlgsED+alVP9ZxC3JzkK23Q==", - "dev": true - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true - }, - "tempfile": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/tempfile/-/tempfile-3.0.0.tgz", - "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", - "dev": true, - "requires": { - "temp-dir": "^2.0.0", - "uuid": "^3.3.2" - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tsconfig-paths": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz", - "integrity": "sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==", - "dev": true, - "requires": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "dev": true - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } - } - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/km-console/package.json b/km-console/package.json deleted file mode 100644 index 92b30d0d..00000000 --- a/km-console/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "root", - "private": true, - "devDependencies": { - "@commitlint/cli": "^13.1.0", - "@commitlint/config-conventional": "^13.1.0", - "@typescript-eslint/eslint-plugin": "4.13.0", - "@typescript-eslint/parser": "4.13.0", - "babel-eslint": "10.1.0", - "commitizen": "^4.2.4", - "conventional-changelog-cli": "^2.1.1", - "cz-conventional-changelog-zh": "0.0.2", - "eslint": "7.30.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-prettier": "3.4.0", - "eslint-plugin-react": "7.22.0", - "eslint-plugin-react-hooks": "^4.2.0", - "husky": "4.3.7", - "lerna": "5.5.0", - "lint-staged": "10.5.3", - "prettier": "2.3.2" - }, - "scripts": { - "i": "npm config set registry https://registry.npmmirror.com/ && npm install && lerna bootstrap", - "clean": "rm -rf node_modules package-lock.json packages/*/node_modules packages/*/package-lock.json", - "start": "lerna run start", - "build": "lerna run build", - "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md", - "cm": "git add . && cz" - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog-zh" - } - }, - "lint-staged": { - "*.{js,tsx}": "eslint" - }, - "dependencies": {} -} diff --git a/km-console/packages/config-manager-fe/.eslintignore b/km-console/packages/config-manager-fe/.eslintignore deleted file mode 100644 index 0bc8d0bf..00000000 --- a/km-console/packages/config-manager-fe/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -test/ -scripts/ -build/ -public/ -types/ \ No newline at end of file diff --git a/km-console/packages/config-manager-fe/.gitignore b/km-console/packages/config-manager-fe/.gitignore deleted file mode 100644 index e8907ac1..00000000 --- a/km-console/packages/config-manager-fe/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -node_modules -dist/ -pub/ -build/ -.sass-cache/ -.DS_Store -.idea/ -.vscode/ -coverage -versions/ -debug.log -yarn.lock \ No newline at end of file diff --git a/km-console/packages/config-manager-fe/README.md b/km-console/packages/config-manager-fe/README.md deleted file mode 100644 index 7b302b46..00000000 --- a/km-console/packages/config-manager-fe/README.md +++ /dev/null @@ -1,44 +0,0 @@ -## 使用说明 - -### 依赖安装(如在 km-console 目录下执行 npm run i 安装过依赖,这步可以省略): - -``` -npm install -``` - -注意,这种方式只会安装当前应用的依赖。如果您不了解,推荐在 km-console 目录下执行 npm run i 安装依赖。 - -### 启动: - -``` -npm run start -``` - -该应用为子应用,启动后需要到基座应用中查看(需要启动基座应用,即 layout-clusters-fe),地址为 http://localhost:8000 - -### 构建: - -``` -npm run build -``` - -构建后的代码默认会存放到项目根路径下 `km-rest/src/main/resources/templates/config` 文件夹里 - -## 目录结构 - -- config: 开发 & 构建配置 - - theme.js: antd 主题配置 - - d1-webpack.base.js: webpack 基础配置 -- src:源代码所在目录 - - @types: TypeScript 全局类型声明 - - api: 请求定义 - - assets:全局资源 img、css - - components:公共组件 - - constants: 全局配置、通用方法 - - locales: 国际化语言 - - pages: 路由匹配的页面组件 - - app.tsx: 菜单、路由配置组件 - - index.html: 单页 - - index.tsx: 入口文件 -- tsconfig.json: TypeScript 配置 -- webpack.config.js: webpack 配置入口 diff --git a/km-console/packages/config-manager-fe/config/theme.js b/km-console/packages/config-manager-fe/config/theme.js deleted file mode 100755 index 3d57d2ab..00000000 --- a/km-console/packages/config-manager-fe/config/theme.js +++ /dev/null @@ -1,17 +0,0 @@ -const themeConfig = { - primaryColor: '#5664FF', - theme: { - 'primary-color': '#5664FF', - 'border-radius-base': '2px', - 'border-radius-sm': '2px', - 'font-size-base': '12px', - 'font-family': 'Helvetica Neue, Helvetica, Arial, PingFang SC, Heiti SC, Hiragino Sans GB, Microsoft YaHei, sans-serif', - 'font-family-bold': - 'HelveticaNeue-Medium, Helvetica Medium, PingFangSC-Medium, STHeitiSC-Medium, Microsoft YaHei Bold, Arial, sans-serif', - }, -}; - -module.exports = { - 'prefix-cls': 'layout', - ...themeConfig.theme, -}; diff --git a/km-console/packages/config-manager-fe/config/webpack.common.js b/km-console/packages/config-manager-fe/config/webpack.common.js deleted file mode 100644 index cef88e61..00000000 --- a/km-console/packages/config-manager-fe/config/webpack.common.js +++ /dev/null @@ -1,132 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const ProgressBarPlugin = require('progress-bar-webpack-plugin'); -const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); -const StatsPlugin = require('stats-webpack-plugin'); -const HappyPack = require('happypack'); -const os = require('os'); -const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); -const theme = require('./theme'); -const pkgJson = require('../package'); - -const devMode = process.env.NODE_ENV === 'development'; -const babelOptions = { - cacheDirectory: true, - babelrc: false, - presets: [require.resolve('@babel/preset-env'), require.resolve('@babel/preset-typescript'), require.resolve('@babel/preset-react')], - plugins: [ - [require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }], - [require.resolve('@babel/plugin-proposal-class-properties'), { loose: true }], - [require.resolve('@babel/plugin-proposal-private-methods'), { loose: true }], - [require.resolve('@babel/plugin-proposal-private-property-in-object'), { loose: true }], - require.resolve('@babel/plugin-proposal-export-default-from'), - require.resolve('@babel/plugin-proposal-export-namespace-from'), - require.resolve('@babel/plugin-proposal-object-rest-spread'), - require.resolve('@babel/plugin-transform-runtime'), - require.resolve('@babel/plugin-proposal-optional-chaining'), // - require.resolve('@babel/plugin-proposal-nullish-coalescing-operator'), // 解决 ?? 无法转义问题 - require.resolve('@babel/plugin-proposal-numeric-separator'), // 转义 1_000_000 - devMode && require.resolve('react-refresh/babel'), - ].filter(Boolean), -}; - -module.exports = { - entry: { - [pkgJson.ident]: ['./src/index.tsx'], - }, - resolve: { - symlinks: false, - extensions: ['.web.jsx', '.web.js', '.ts', '.tsx', '.js', '.jsx', '.json'], - alias: { - '@src': path.resolve(process.cwd(), 'src'), - }, - }, - plugins: [ - new ProgressBarPlugin(), - new CaseSensitivePathsPlugin(), - new StatsPlugin('manifest.json', { - chunkModules: false, - source: true, - chunks: false, - modules: false, - assets: true, - children: false, - exclude: [/node_modules/], - }), - new HappyPack({ - id: 'babel', - loaders: [ - 'cache-loader', - { - loader: 'babel-loader', - options: babelOptions, - }, - ], - threadPool: happyThreadPool, - }), - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify(process.env.NODE_ENV), - RUN_ENV: JSON.stringify(process.env.RUN_ENV), - }, - }), - new HtmlWebpackPlugin({ - meta: { - manifest: 'manifest.json', - }, - template: './src/index.html', - inject: 'body', - }), - ].filter(Boolean), - module: { - rules: [ - { - parser: { system: false }, - }, - { - test: /\.(js|jsx|ts|tsx)$/, - exclude: /node_modules\/(?!react-intl|@didi\/dcloud-design)/, - use: [ - { - loader: 'happypack/loader?id=babel', - }, - ], - }, - { - test: /\.(png|svg|jpeg|jpg|gif|ttf|woff|woff2|eot|pdf)$/, - use: [ - { - loader: 'file-loader', - options: { - name: '[name].[ext]', - outputPath: './assets/image/', - esModule: false, - }, - }, - ], - }, - { - test: /\.(css|less)$/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'less-loader', - options: { - javascriptEnabled: true, - modifyVars: theme, - }, - }, - ], - }, - ], - }, - node: { - fs: 'empty', - net: 'empty', - tls: 'empty', - }, - stats: 'errors-warnings', -}; diff --git a/km-console/packages/config-manager-fe/config/webpack.dev.js b/km-console/packages/config-manager-fe/config/webpack.dev.js deleted file mode 100644 index 1b60f703..00000000 --- a/km-console/packages/config-manager-fe/config/webpack.dev.js +++ /dev/null @@ -1,35 +0,0 @@ -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); -const pkgJson = require('../package'); - -module.exports = { - mode: 'development', - plugins: [ - new MiniCssExtractPlugin(), - new ReactRefreshWebpackPlugin({ - overlay: false, - }), - ], - devServer: { - host: '127.0.0.1', - port: pkgJson.port, - hot: true, - open: false, - publicPath: `http://localhost:${pkgJson.port}/${pkgJson.ident}/`, - inline: true, - disableHostCheck: true, - historyApiFallback: true, - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }, - output: { - path: '/', - publicPath: `http://localhost:${pkgJson.port}/${pkgJson.ident}/`, - library: pkgJson.ident, - libraryTarget: 'amd', - filename: '[name].js', - chunkFilename: '[name].js', - }, - devtool: 'cheap-module-eval-source-map', -}; diff --git a/km-console/packages/config-manager-fe/config/webpack.prod.js b/km-console/packages/config-manager-fe/config/webpack.prod.js deleted file mode 100644 index 9dd9ee66..00000000 --- a/km-console/packages/config-manager-fe/config/webpack.prod.js +++ /dev/null @@ -1,59 +0,0 @@ -const path = require('path'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const TerserJSPlugin = require('terser-webpack-plugin'); -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); -const pkgJson = require('../package'); - -module.exports = { - mode: 'production', - externals: [ - /^react$/, - /^react\/lib.*/, - /^react-dom$/, - /.*react-dom.*/, - /^single-spa$/, - /^single-spa-react$/, - /^moment$/, - /^lodash$/, - /^react-router$/, - /^react-router-dom$/, - ], - plugins: [ - new CleanWebpackPlugin(), - new MiniCssExtractPlugin({ - filename: '[name]-[chunkhash].css', - }), - ], - output: { - path: path.resolve(process.cwd(), `../../../km-rest/src/main/resources/templates/${pkgJson.ident}`), - publicPath: `${process.env.PUBLIC_PATH}/${pkgJson.ident}/`, - library: pkgJson.ident, - libraryTarget: 'amd', - filename: '[name]-[chunkhash].js', - chunkFilename: '[name]-[chunkhash].js', - }, - optimization: { - splitChunks: { - cacheGroups: { - vendor: { - test: /[\\/]node_modules[\\/]/, - chunks: 'all', - name: 'vendor', - priority: 10, - enforce: true, - minChunks: 1, - maxSize: 3500000, - }, - }, - }, - minimizer: [ - new TerserJSPlugin({ - cache: true, - sourceMap: true, - }), - new OptimizeCSSAssetsPlugin({}), - ], - }, - devtool: 'none', -}; diff --git a/km-console/packages/config-manager-fe/d1.js b/km-console/packages/config-manager-fe/d1.js deleted file mode 100644 index 367bf433..00000000 --- a/km-console/packages/config-manager-fe/d1.js +++ /dev/null @@ -1,5 +0,0 @@ -const d1Config = require('./d1.json'); -d1Config.appConfig.webpackChain = function (config) { - // config.devServer.port(10000); -}; -module.exports = d1Config; diff --git a/km-console/packages/config-manager-fe/d1.json b/km-console/packages/config-manager-fe/d1.json deleted file mode 100644 index 88f5633f..00000000 --- a/km-console/packages/config-manager-fe/d1.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "appConfig": { - "appName": "config-manager-fe", - "ident": "config", - "port": "8001", - "webpackCustom": "", - "webpackChain": "", - "entry": [ - { - "title": "配置管理", - "name": "/config", - "src": "./src/index.html" - } - ], - "layout": "layout-clusters-fe", - "packages": [ - "config-manager-fe", - "layout-clusters-fe" - ] - }, - "entrust": true, - "localBuilderVersion": true, - "extensions": [], - "preset": "@didi/d1-preset-opensource", - "builderType": "@didi/d1-preset-opensource", - "generatorType": "", - "mockDir": "mock", - "webpackCustomPath": "./webpack.config.js" -} \ No newline at end of file diff --git a/km-console/packages/config-manager-fe/mock.json b/km-console/packages/config-manager-fe/mock.json deleted file mode 100644 index 9679c064..00000000 --- a/km-console/packages/config-manager-fe/mock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "/api/v1/:id": { - "data": { - "list|5-10": [ - { - "name": "@cname()", - "address": "@cname()", - "age|18-50": 100 - } - ] - }, - "code|0-500": 200 - } -} diff --git a/km-console/packages/config-manager-fe/package-lock.json b/km-console/packages/config-manager-fe/package-lock.json deleted file mode 100644 index 2085ec02..00000000 --- a/km-console/packages/config-manager-fe/package-lock.json +++ /dev/null @@ -1,13942 +0,0 @@ -{ - "name": "config-manager-fe", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@ant-design/colors": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz", - "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", - "requires": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "@ant-design/icons": { - "version": "4.8.0", - "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.8.0.tgz", - "integrity": "sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg==", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-svg": "^4.2.1", - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-util": "^5.9.4" - } - }, - "@ant-design/icons-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", - "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" - }, - "@ant-design/react-slick": { - "version": "0.28.4", - "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.28.4.tgz", - "integrity": "sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==", - "requires": { - "@babel/runtime": "^7.10.4", - "classnames": "^2.2.5", - "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.0" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==" - }, - "@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "requires": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "requires": { - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz", - "integrity": "sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.21.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz", - "integrity": "sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-assign": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz", - "integrity": "sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", - "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@ctrl/tinycolor": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz", - "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==" - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@formatjs/intl-displaynames": { - "version": "1.2.10", - "resolved": "https://registry.npmmirror.com/@formatjs/intl-displaynames/-/intl-displaynames-1.2.10.tgz", - "integrity": "sha512-GROA2RP6+7Ouu0WnHFF78O5XIU7pBfI19WM1qm93l6MFWibUk67nCfVCK3VAYJkLy8L8ZxjkYT11VIAfvSz8wg==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-listformat": { - "version": "1.4.8", - "resolved": "https://registry.npmmirror.com/@formatjs/intl-listformat/-/intl-listformat-1.4.8.tgz", - "integrity": "sha512-WNMQlEg0e50VZrGIkgD5n7+DAMGt3boKi1GJALfhFMymslJb5i+5WzWxyj/3a929Z6MAFsmzRIJjKuv+BxKAOQ==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-relativetimeformat": { - "version": "4.5.16", - "resolved": "https://registry.npmmirror.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-4.5.16.tgz", - "integrity": "sha512-IQ0haY97oHAH5OYUdykNiepdyEWj3SAT+Fp9ZpR85ov2JNiFx+12WWlxlVS8ehdyncC2ZMt/SwFIy2huK2+6/A==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-unified-numberformat": { - "version": "3.3.7", - "resolved": "https://registry.npmmirror.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz", - "integrity": "sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz", - "integrity": "sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==" - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmmirror.com/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@knowdesign/icons": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@knowdesign/icons/-/icons-1.0.2.tgz", - "integrity": "sha512-eQuUQZbPRvC1xU4ouzgrk8j6UE39Cui+eEkYkLbfGLpVbGPFKJ7yEmUyKhIjG9zhf1qS7/h08yzq0hAHajBi8g==", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.7.0", - "react": "16.12.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.10", - "resolved": "https://registry.npmmirror.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" - }, - "@react-dnd/asap": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/@react-dnd/asap/-/asap-4.0.1.tgz", - "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==" - }, - "@react-dnd/invariant": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@react-dnd/invariant/-/invariant-2.0.0.tgz", - "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==" - }, - "@react-dnd/shallowequal": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", - "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmmirror.com/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "dev": true - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/invariant": { - "version": "2.2.35", - "resolved": "https://registry.npmmirror.com/@types/invariant/-/invariant-2.2.35.tgz", - "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.191", - "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.191.tgz", - "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "dev": true, - "requires": { - "@types/react": "^17" - }, - "dependencies": { - "@types/react": { - "version": "17.0.53", - "resolved": "https://registry.npmmirror.com/@types/react/-/react-17.0.53.tgz", - "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - } - } - }, - "@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmmirror.com/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "dev": true, - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmmirror.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dev": true, - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/single-spa-react": { - "version": "2.12.0", - "resolved": "https://registry.npmmirror.com/@types/single-spa-react/-/single-spa-react-2.12.0.tgz", - "integrity": "sha512-FISPO51Cq961trYHVFr30iazZHuGyAJ0ZH38wpxhJdZUZcAwfR7UG19sHGWRtTip1kv3xRshS3L9tzaYcKbPVg==", - "dev": true, - "requires": { - "@types/react": "*", - "@types/react-dom": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz", - "integrity": "sha512-ygqDUm+BUPvrr0jrXqoteMqmIaZ/bixYOc3A4BRwzEPTZPi6E+n44rzNZWaB0YvtukgP+aoj0i/fyx7FkM2p1w==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.13.0", - "@typescript-eslint/scope-manager": "4.13.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.13.0.tgz", - "integrity": "sha512-/ZsuWmqagOzNkx30VWYV3MNB/Re/CGv/7EzlqZo5RegBN8tMuPaBgNK6vPBCQA8tcYrbsrTdbx3ixMRRKEEGVw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-4.13.0.tgz", - "integrity": "sha512-KO0J5SRF08pMXzq9+abyHnaGQgUJZ3Z3ax+pmqz9vl81JxmTTOUfQmq7/4awVfq09b6C4owNlOgOwp61pYRBSg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-4.13.0.tgz", - "integrity": "sha512-UpK7YLG2JlTp/9G4CHe7GxOwd93RBf3aHO5L+pfjIrhtBvZjHKbMhBXTIQNkbz7HZ9XOe++yKrXutYm5KmjWgQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0" - } - }, - "@typescript-eslint/types": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-4.13.0.tgz", - "integrity": "sha512-/+aPaq163oX+ObOG00M0t9tKkOgdv9lq0IQv/y4SqGkAXmhFmCfgsELV7kOCTb2vVU5VOmVwXBXJTDr353C1rQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz", - "integrity": "sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.13.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.13.0.tgz", - "integrity": "sha512-6RoxWK05PAibukE7jElqAtNMq+RWZyqJ6Q/GdIxaiUj2Ept8jh8+FUVlbq9WxMYxkmEOPvCE5cRSyupMpwW31g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "antd-img-crop": { - "version": "3.16.0", - "resolved": "https://registry.npmmirror.com/antd-img-crop/-/antd-img-crop-3.16.0.tgz", - "integrity": "sha512-BVYH5VQewhK60yMEzBTi0/zBEJrX10aWet4ItGDvPJvzOYHPejhkchF9CZgYFzPJ/yPe6h1vYyevf5gjfhvFqA==", - "requires": { - "@babel/runtime": "^7.15.3", - "react-easy-crop": "^3.5.2" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-move": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/array-move/-/array-move-4.0.0.tgz", - "integrity": "sha512-+RY54S8OuVvg94THpneQvFRmqWdAHeqtMzgMW6JNurHxe8rsS07cHQdfGkXnTUXiBcyZ0j3SiDIxxj0RPiqCkQ==" - }, - "array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmmirror.com/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/async/-/async-1.5.0.tgz", - "integrity": "sha512-m9nMwCtLtz29LszVaR0q/FqsJWkrxVoQL95p7JU0us7qUx4WEcySQgwvuneYSGVyvirl81gz7agflS3V1yW14g==", - "dev": true - }, - "async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "async-validator": { - "version": "4.2.5", - "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-import": { - "version": "1.13.6", - "resolved": "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz", - "integrity": "sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - } - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "dev": true, - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^3.0.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==" - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "codemirror": { - "version": "5.65.12", - "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.12.tgz", - "integrity": "sha512-z2jlHBocElRnPYysN2HAuhXbO3DNB0bcSKmNz3hcWR2Js2Dkhc1bEOxG93Z3DeUrnm+qx56XOY5wQmbP5KY0sw==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "compute-scroll-into-view": { - "version": "1.0.20", - "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", - "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-2.1.1.tgz", - "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", - "dev": true, - "requires": { - "camelcase": "^5.2.0", - "icss-utils": "^4.1.0", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.14", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^2.0.6", - "postcss-modules-scope": "^2.1.0", - "postcss-modules-values": "^2.0.0", - "postcss-value-parser": "^3.3.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true - } - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - } - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "cxs": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/cxs/-/cxs-6.2.0.tgz", - "integrity": "sha512-RGatb1BUwVMBzV8DRo9Kapc55bdGfAxMcukVk+ZzE3Ts8xaTve0GVz730kBDxjhEBU2LK+RPuAcjZb00Q3O24w==" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, - "date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" - }, - "dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dnd-core": { - "version": "14.0.1", - "resolved": "https://registry.npmmirror.com/dnd-core/-/dnd-core-14.0.1.tgz", - "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", - "requires": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-align": { - "version": "1.12.4", - "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz", - "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - } - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "echarts": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz", - "integrity": "sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==", - "requires": { - "tslib": "2.3.0", - "zrender": "5.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - } - } - }, - "echarts-for-react": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-3.0.2.tgz", - "integrity": "sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==", - "requires": { - "fast-deep-equal": "^3.1.3", - "size-sensor": "^1.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.308", - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz", - "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.22.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", - "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmmirror.com/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fetch-jsonp": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/fetch-jsonp/-/fetch-jsonp-1.2.3.tgz", - "integrity": "sha512-C13k1o7R9JTN1wmhKkrW5bU/00LwixXnkufQUR6Rbf4KCS0i8mycQaovt4WVbHnA2NKgi7Ryp9Whpy/CGcij6Q==" - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", - "dev": true, - "requires": { - "semver-regex": "^3.1.2" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "happypack": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/happypack/-/happypack-5.0.1.tgz", - "integrity": "sha512-AzXVxLzX0mtv0T40Kic72rfcGK4Y2b/cDdtcyw+e+V/13ozl7x0+EZ4hvrL1rJ8MoefR9+FfUJQsK2irH0GWOw==", - "dev": true, - "requires": { - "async": "1.5.0", - "json-stringify-safe": "5.0.1", - "loader-utils": "1.1.0", - "serialize-error": "^2.1.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha512-gkD9aSEG9UGglyPcDJqY9YBTUtCLKaBK6ihD2VP1d1X60lTfFspNZNulGBBbUZLkPygy4LySYHyxBpq+VhjObQ==", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - } - } - }, - "hard-source-webpack-plugin": { - "version": "0.13.1", - "resolved": "https://registry.npmmirror.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz", - "integrity": "sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "find-cache-dir": "^2.0.0", - "graceful-fs": "^4.1.11", - "lodash": "^4.15.0", - "mkdirp": "^0.5.1", - "node-object-hash": "^1.2.0", - "parse-json": "^4.0.0", - "pkg-dir": "^3.0.0", - "rimraf": "^2.6.2", - "semver": "^5.6.0", - "tapable": "^1.0.0-beta.5", - "webpack-sources": "^1.0.1", - "write-json-file": "^2.3.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "highlight-words-core": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz", - "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" - }, - "highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmmirror.com/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "4.3.7", - "resolved": "https://registry.npmmirror.com/husky/-/husky-4.3.7.tgz", - "integrity": "sha512-0fQlcCDq/xypoyYSJvEuzbDPHFf8ZF9IXKJxlrnvxABTSzK1VPT2RKYQKrcgJ+YD39swgoB6sbzywUqFxUiqjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "dev": true - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "optional": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "intl-format-cache": { - "version": "4.3.1", - "resolved": "https://registry.npmmirror.com/intl-format-cache/-/intl-format-cache-4.3.1.tgz", - "integrity": "sha512-OEUYNA7D06agqPOYhbTkl0T8HA3QKSuwWh1HiClEnpd9vw7N+3XsQt5iZ0GUEchp5CW1fQk/tary+NsbF3yQ1Q==" - }, - "intl-messageformat": { - "version": "7.8.4", - "resolved": "https://registry.npmmirror.com/intl-messageformat/-/intl-messageformat-7.8.4.tgz", - "integrity": "sha512-yS0cLESCKCYjseCOGXuV4pxJm/buTfyCJ1nzQjryHmSehlptbZbn9fnlk1I9peLopZGGbjj46yHHiTAEZ1qOTA==", - "requires": { - "intl-format-cache": "^4.2.21", - "intl-messageformat-parser": "^3.6.4" - } - }, - "intl-messageformat-parser": { - "version": "3.6.4", - "resolved": "https://registry.npmmirror.com/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz", - "integrity": "sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA==", - "requires": { - "@formatjs/intl-unified-numberformat": "^3.2.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsencrypt": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.1.tgz", - "integrity": "sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", - "requires": { - "string-convert": "^0.2.0" - } - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "jsx-runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/jsx-runtime/-/jsx-runtime-1.2.0.tgz", - "integrity": "sha512-iCxmRTlUAWmXwHZxN0JSx/T7eRi0SkKAskE0lp+j4W1mzdNp49ja/9QI2ZmlggPM95RqnDw5ioYjw0EcvpIClw==", - "requires": { - "object-assign": "^3.0.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==" - } - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "knowdesign": { - "version": "1.3.7", - "resolved": "https://registry.npmmirror.com/knowdesign/-/knowdesign-1.3.7.tgz", - "integrity": "sha512-pv4imTV3My0z94bZROOVLoAwD0IrdVQpzBgdpK7vsEcRm2/kp+KeGCCF/fAfoX2SA7d5k6OD1HHc/dyEdexvQg==", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.7.0", - "@ant-design/react-slick": "~0.28.1", - "@babel/runtime": "^7.12.5", - "@ctrl/tinycolor": "^3.4.0", - "@types/qs": "^6.9.7", - "antd-img-crop": "^3.14.1", - "array-move": "^4.0.0", - "array-tree-filter": "^2.1.0", - "axios": "^0.21.1", - "classnames": "^2.2.6", - "codemirror": "^5.56.0", - "copy-to-clipboard": "^3.2.0", - "crypto-js": "^4.1.1", - "echarts": "^5.1.2", - "echarts-for-react": "^3.0.1", - "fetch-jsonp": "^1.1.3", - "hoist-non-react-statics": "^3.3.2", - "jsencrypt": "^3.2.0", - "jsx-runtime": "^1.2.0", - "lodash": "^4.17.21", - "memoize-one": "^6.0.0", - "metismenujs": "^1.3.1", - "moment": "^2.25.3", - "omit.js": "^1.0.2", - "qs": "^6.10.1", - "query-string": "^7.0.1", - "rc-cascader": "~2.3.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.1.0", - "rc-dialog": "~8.6.0", - "rc-drawer": "^4.4.3", - "rc-dropdown": "~3.2.0", - "rc-field-form": "~1.21.0", - "rc-image": "~5.2.5", - "rc-input-number": "~7.3.6", - "rc-mentions": "~1.6.1", - "rc-menu": "~9.0.12", - "rc-motion": "^2.4.4", - "rc-notification": "~4.5.7", - "rc-pagination": "~3.1.9", - "rc-picker": "~2.5.17", - "rc-progress": "~3.1.0", - "rc-rate": "~2.9.0", - "rc-resize-observer": "^1.1.0", - "rc-select": "~13.2.1", - "rc-slider": "~9.7.4", - "rc-steps": "~4.1.0", - "rc-switch": "~3.2.0", - "rc-table": "~7.19.0", - "rc-tabs": "~11.10.0", - "rc-textarea": "~0.3.0", - "rc-tooltip": "~5.1.1", - "rc-tree": "~5.3.0", - "rc-tree-select": "~4.8.0", - "rc-trigger": "^5.2.10", - "rc-upload": "~4.3.0", - "rc-util": "^5.14.0", - "react": "16.12.0", - "react-codemirror2": "7.2.1", - "react-color": "2.18.1", - "react-copy-to-clipboard": "^5.0.4", - "react-dnd": "^14.0.4", - "react-dnd-html5-backend": "^14.0.2", - "react-document-title": "^2.0.3", - "react-dom": "16.12.0", - "react-draggable": "^4.4.3", - "react-fast-compare": "^3.2.0", - "react-fast-marquee": "^1.2.1", - "react-github-button": "^0.1.11", - "react-helmet-async": "~1.2.0", - "react-highlight-words": "^0.16.0", - "react-infinite-scroll-component": "^6.1.0", - "react-infinite-scroller": "^1.2.4", - "react-intl": "^3.2.1", - "react-is": "^16.13.1", - "react-resizable": "^3.0.1", - "react-router-cache-route": "^1.11.1", - "react-router-dom": "5.2.1", - "react-sortable-hoc": "^2.0.0", - "react-sticky": "^6.0.3", - "react-syntax-highlighter": "13.4.0", - "react-test-renderer": "^17.0.1", - "react-text-loop": "^2.3.0", - "react-text-loop-next": "0.0.3", - "react-virtualized": "^9.22.3", - "react-window": "^1.8.5", - "reactstrap": "^9.0.1", - "scroll-into-view-if-needed": "^2.2.25" - }, - "dependencies": { - "query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmmirror.com/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "requires": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - } - } - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "less": { - "version": "3.13.1", - "resolved": "https://registry.npmmirror.com/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "native-request": "^1.0.5", - "source-map": "~0.6.0", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "less-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-4.1.0.tgz", - "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "lint-staged": { - "version": "10.5.3", - "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-10.5.3.tgz", - "integrity": "sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmmirror.com/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmmirror.com/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "requires": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "metismenujs": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/metismenujs/-/metismenujs-1.4.0.tgz", - "integrity": "sha512-a+3/XVkG8fVA6HBYu1yQkUkVpbh2n9po3vhSzu/Pu5k6s2hbteFZMRzUQyHt6FF28N8pLOpzcb47w4ErBHEsDQ==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mobx": { - "version": "4.15.7", - "resolved": "https://registry.npmmirror.com/mobx/-/mobx-4.15.7.tgz", - "integrity": "sha512-X4uQvuf2zYKHVO5kRT5Utmr+J9fDnRgxWWnSqJ4oiccPTQU38YG+/O3nPmOhUy4jeHexl7XJJpWDBgEnEfp+8w==" - }, - "mobx-react": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/mobx-react/-/mobx-react-6.0.0.tgz", - "integrity": "sha512-/c7WBPB9jEmK38ZVQG+YMca8JD4mTwei7ieHh3oAv8RYZvHoCBXOS+haeeFh0kZ9cmdtDxyUhth0WMPrdlC3og==", - "requires": { - "mobx-react-lite": "1.4.0" - } - }, - "mobx-react-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/mobx-react-lite/-/mobx-react-lite-1.4.0.tgz", - "integrity": "sha512-5xCuus+QITQpzKOjAOIQ/YxNhOl/En+PlNJF+5QU4Qxn9gnNMJBbweAdEW3HnuVQbfqDYEUnkGs5hmkIIStehg==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", - "dev": true - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "native-request": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz", - "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - } - } - }, - "node-object-hash": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/node-object-hash/-/node-object-hash-1.4.2.tgz", - "integrity": "sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ==", - "dev": true - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "normalize-wheel": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", - "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "omit.js": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/omit.js/-/omit.js-1.0.2.tgz", - "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", - "requires": { - "babel-runtime": "^6.23.0" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.8", - "resolved": "https://registry.npmmirror.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz", - "integrity": "sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q==", - "dev": true, - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dev": true, - "requires": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - } - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", - "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0", - "postcss-value-parser": "^3.3.1" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", - "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^7.0.6" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "progress-bar-webpack-plugin": { - "version": "1.12.1", - "resolved": "https://registry.npmmirror.com/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.12.1.tgz", - "integrity": "sha512-tVbPB5xBbqNwdH3mwcxzjL1r1Vrm/xGu93OsqVSAbCaXGoKFvfWIh0gpMDpn2kYsPVRSAIK0pBkP9Vfs+JJibQ==", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "object.assign": "^4.0.1", - "progress": "^1.1.8" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmmirror.com/progress/-/progress-1.1.8.tgz", - "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmmirror.com/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "dependencies": { - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - } - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } - } - }, - "rc-align": { - "version": "4.0.15", - "resolved": "https://registry.npmmirror.com/rc-align/-/rc-align-4.0.15.tgz", - "integrity": "sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "dom-align": "^1.7.0", - "rc-util": "^5.26.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-cascader": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-2.3.3.tgz", - "integrity": "sha512-ckD8rKJjS8mdXxylWh1PtIHSFhbj/yf1NimyooqeJlvtLhzRZXIHCj4IuOjwYZ6J1DqoOCCdJfVtc7UeZia38w==", - "requires": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "classnames": "^2.3.1", - "rc-tree-select": "~4.8.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.6.1", - "warning": "^4.0.1" - } - }, - "rc-checkbox": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz", - "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-collapse": { - "version": "3.1.4", - "resolved": "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.1.4.tgz", - "integrity": "sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.3.4", - "rc-util": "^5.2.1", - "shallowequal": "^1.1.0" - } - }, - "rc-dialog": { - "version": "8.6.0", - "resolved": "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.6.0.tgz", - "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.6.1" - } - }, - "rc-drawer": { - "version": "4.4.3", - "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-4.4.3.tgz", - "integrity": "sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-util": "^5.7.0" - } - }, - "rc-dropdown": { - "version": "3.2.5", - "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-3.2.5.tgz", - "integrity": "sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-trigger": "^5.0.4" - } - }, - "rc-field-form": { - "version": "1.21.2", - "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.21.2.tgz", - "integrity": "sha512-LR/bURt/Tf5g39mb0wtMtQuWn42d/7kEzpzlC5fNC7yaRVmLTtlPP4sBBlaViETM9uZQKLoaB0Pt9Mubhm9gow==", - "requires": { - "@babel/runtime": "^7.8.4", - "async-validator": "^4.0.2", - "rc-util": "^5.8.0" - } - }, - "rc-image": { - "version": "5.2.5", - "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-5.2.5.tgz", - "integrity": "sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw==", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-dialog": "~8.6.0", - "rc-util": "^5.0.6" - } - }, - "rc-input-number": { - "version": "7.3.11", - "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.11.tgz", - "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.23.0" - } - }, - "rc-mentions": { - "version": "1.6.5", - "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.6.5.tgz", - "integrity": "sha512-CUU4+q+awG2pA0l/tG2kPB2ytWbKQUkFxVeKwacr63w7crE/yjfzrFXxs/1fxhyEbQUWdAZt/L25QBieukYQ5w==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-menu": "~9.3.2", - "rc-textarea": "^0.3.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1" - }, - "dependencies": { - "rc-menu": { - "version": "9.3.2", - "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.3.2.tgz", - "integrity": "sha512-h3m45oY1INZyqphGELkdT0uiPnFzxkML8m0VMhJnk2fowtqfiT7F5tJLT3znEVaPIY80vMy1bClCkgq8U91CzQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", - "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" - } - } - } - }, - "rc-menu": { - "version": "9.0.14", - "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.0.14.tgz", - "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", - "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" - } - }, - "rc-motion": { - "version": "2.6.3", - "resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.6.3.tgz", - "integrity": "sha512-xFLkes3/7VL/J+ah9jJruEW/Akbx5F6jVa2wG5o/ApGKQKSOd5FR3rseHLL9+xtJg4PmCwo6/1tqhDO/T+jFHA==", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.21.0" - } - }, - "rc-notification": { - "version": "4.5.7", - "resolved": "https://registry.npmmirror.com/rc-notification/-/rc-notification-4.5.7.tgz", - "integrity": "sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.2.0", - "rc-util": "^5.0.1" - } - }, - "rc-overflow": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.2.8.tgz", - "integrity": "sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ==", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.19.2" - } - }, - "rc-pagination": { - "version": "3.1.17", - "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.1.17.tgz", - "integrity": "sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-picker": { - "version": "2.5.19", - "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.5.19.tgz", - "integrity": "sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "date-fns": "2.x", - "dayjs": "1.x", - "moment": "^2.24.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.4.0", - "shallowequal": "^1.1.0" - } - }, - "rc-progress": { - "version": "3.1.4", - "resolved": "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.1.4.tgz", - "integrity": "sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6" - } - }, - "rc-rate": { - "version": "2.9.2", - "resolved": "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.9.2.tgz", - "integrity": "sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.0.1" - } - }, - "rc-resize-observer": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz", - "integrity": "sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==", - "requires": { - "@babel/runtime": "^7.20.7", - "classnames": "^2.2.1", - "rc-util": "^5.27.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-select": { - "version": "13.2.1", - "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-13.2.1.tgz", - "integrity": "sha512-L2cJFAjVEeDiNVa/dlOVKE79OUb0J7sUBvWN3Viav3XHcjvv9Ovn4D8J9QhBSlDXeGuczZ81CZI3BbdHD25+Gg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-overflow": "^1.0.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.9.8", - "rc-virtual-list": "^3.2.0" - } - }, - "rc-slider": { - "version": "9.7.5", - "resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-9.7.5.tgz", - "integrity": "sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-tooltip": "^5.0.1", - "rc-util": "^5.16.1", - "shallowequal": "^1.1.0" - } - }, - "rc-steps": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-4.1.4.tgz", - "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", - "requires": { - "@babel/runtime": "^7.10.2", - "classnames": "^2.2.3", - "rc-util": "^5.0.1" - } - }, - "rc-switch": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/rc-switch/-/rc-switch-3.2.2.tgz", - "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.1" - } - }, - "rc-table": { - "version": "7.19.2", - "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.19.2.tgz", - "integrity": "sha512-NdpnoM50MK02H5/hGOsObfxCvGFUG5cHB9turE5BKJ81T5Ycbq193w5tLhnpILXe//Oanzr47MdMxkUnVGP+qg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.14.0", - "shallowequal": "^1.1.0" - } - }, - "rc-tabs": { - "version": "11.10.8", - "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.10.8.tgz", - "integrity": "sha512-uK+x+eJ8WM4jiXoqGa+P+JUQX2Wlkj9f0o/5dyOw42B6YLnHJN80uTVcCeAmtA1N0xjPW0GNSZvUm4SU3jAYpw==", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "2.x", - "rc-dropdown": "^3.2.0", - "rc-menu": "~9.3.2", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" - }, - "dependencies": { - "rc-menu": { - "version": "9.3.2", - "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.3.2.tgz", - "integrity": "sha512-h3m45oY1INZyqphGELkdT0uiPnFzxkML8m0VMhJnk2fowtqfiT7F5tJLT3znEVaPIY80vMy1bClCkgq8U91CzQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", - "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" - } - } - } - }, - "rc-textarea": { - "version": "0.3.7", - "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-0.3.7.tgz", - "integrity": "sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", - "shallowequal": "^1.1.0" - } - }, - "rc-tooltip": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz", - "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", - "requires": { - "@babel/runtime": "^7.11.2", - "rc-trigger": "^5.0.0" - } - }, - "rc-tree": { - "version": "5.3.8", - "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.3.8.tgz", - "integrity": "sha512-YuobEryPymqPmHFUOvsoOrYdm24psaj0CrGEUuDUQUeG/nNcTGw6FA2YmF4NsEaNBvNSJUSzwfZnFHrKa/xv0A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.4.1" - } - }, - "rc-tree-select": { - "version": "4.8.0", - "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-4.8.0.tgz", - "integrity": "sha512-evuVIF7GHCGDdvISdBWl4ZYmG/8foof/RDtzCu/WFLA1tFKZD77RRC3khEsjh4WgsB0vllLe7j+ODJ7jHRcDRQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-select": "~13.2.1", - "rc-tree": "~5.3.0", - "rc-util": "^5.7.0" - } - }, - "rc-trigger": { - "version": "5.3.4", - "resolved": "https://registry.npmmirror.com/rc-trigger/-/rc-trigger-5.3.4.tgz", - "integrity": "sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==", - "requires": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.6", - "rc-align": "^4.0.0", - "rc-motion": "^2.0.0", - "rc-util": "^5.19.2" - } - }, - "rc-upload": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.3.4.tgz", - "integrity": "sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==", - "requires": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.5", - "rc-util": "^5.2.0" - } - }, - "rc-util": { - "version": "5.28.0", - "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.28.0.tgz", - "integrity": "sha512-KYDjhGodswVj29v0TRciKTqRPgumIFvFDndbCD227pitQ+0Cei196rxk+OXb/blu6V8zdTRK5RjCJn+WmHLvBA==", - "requires": { - "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0" - } - }, - "rc-virtual-list": { - "version": "3.4.13", - "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.4.13.tgz", - "integrity": "sha512-cPOVDmcNM7rH6ANotanMDilW/55XnFPw0Jh/GQYtrzZSy3AmWvCnqVNyNC/pgg3lfVmX2994dlzAhuUrd4jG7w==", - "requires": { - "@babel/runtime": "^7.20.0", - "classnames": "^2.2.6", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.15.0" - } - }, - "react": { - "version": "16.12.0", - "resolved": "https://registry.npmmirror.com/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-codemirror2": { - "version": "7.2.1", - "resolved": "https://registry.npmmirror.com/react-codemirror2/-/react-codemirror2-7.2.1.tgz", - "integrity": "sha512-t7YFmz1AXdlImgHXA9Ja0T6AWuopilub24jRaQdPVbzUJVNKIYuy3uCFZYa7CE5S3UW6SrSa5nAqVQvtzRF9gw==" - }, - "react-color": { - "version": "2.18.1", - "resolved": "https://registry.npmmirror.com/react-color/-/react-color-2.18.1.tgz", - "integrity": "sha512-X5XpyJS6ncplZs74ak0JJoqPi+33Nzpv5RYWWxn17bslih+X7OlgmfpmGC1fNvdkK7/SGWYf1JJdn7D2n5gSuQ==", - "requires": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.11", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - } - }, - "react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", - "requires": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" - } - }, - "react-dnd": { - "version": "14.0.5", - "resolved": "https://registry.npmmirror.com/react-dnd/-/react-dnd-14.0.5.tgz", - "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", - "requires": { - "@react-dnd/invariant": "^2.0.0", - "@react-dnd/shallowequal": "^2.0.0", - "dnd-core": "14.0.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - } - }, - "react-dnd-html5-backend": { - "version": "14.1.0", - "resolved": "https://registry.npmmirror.com/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", - "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", - "requires": { - "dnd-core": "14.0.1" - } - }, - "react-document-title": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/react-document-title/-/react-document-title-2.0.3.tgz", - "integrity": "sha512-T5y+quDAybtD7JhvVyc2BDW3a9xj6MoW6/VZU6OJkbASqwEMo5G4nB0RqFJCEHOqjQMcQI+wGRPDhUADnaHlQw==", - "requires": { - "prop-types": "^15.5.6", - "react-side-effect": "^1.0.2" - } - }, - "react-dom": { - "version": "16.12.0", - "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-16.12.0.tgz", - "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.18.0" - } - }, - "react-draggable": { - "version": "4.4.5", - "resolved": "https://registry.npmmirror.com/react-draggable/-/react-draggable-4.4.5.tgz", - "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", - "requires": { - "clsx": "^1.1.1", - "prop-types": "^15.8.1" - } - }, - "react-easy-crop": { - "version": "3.5.3", - "resolved": "https://registry.npmmirror.com/react-easy-crop/-/react-easy-crop-3.5.3.tgz", - "integrity": "sha512-ApTbh+lzKAvKqYW81ihd5J6ZTNN3vPDwi6ncFuUrHPI4bko2DlYOESkRm+0NYoW0H8YLaD7bxox+Z3EvIzAbUA==", - "requires": { - "normalize-wheel": "^1.0.1", - "tslib": "2.0.1" - } - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-fast-marquee": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/react-fast-marquee/-/react-fast-marquee-1.3.5.tgz", - "integrity": "sha512-eOqLoz4iVVBvi2wN/web8hd2XX9y2Z6CYR7g++7nTVHlTOXBtqyARQJ9rYNpbp179hAzloMx0yBFAo8LpNYmKQ==" - }, - "react-freeze": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/react-freeze/-/react-freeze-1.0.3.tgz", - "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==" - }, - "react-github-button": { - "version": "0.1.11", - "resolved": "https://registry.npmmirror.com/react-github-button/-/react-github-button-0.1.11.tgz", - "integrity": "sha512-KL/kieQiR5DXd1RxWMegr4Igyz9+Lm6ZVwjpN5rQyttz/sdEq8DF1R/vzLl2f58nChJe0sKE3U3A7QRK+Zb01w==", - "requires": { - "prop-types": "^15.5.10" - } - }, - "react-helmet-async": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-1.2.3.tgz", - "integrity": "sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-highlight-words": { - "version": "0.16.0", - "resolved": "https://registry.npmmirror.com/react-highlight-words/-/react-highlight-words-0.16.0.tgz", - "integrity": "sha512-q34TwCSJOL+5pVDv6LUj3amaoyXdNDwd7zRqVAvceOrO9g1haWLAglK6WkGLMNUa3PFN8EgGedLg/k8Gpndxqg==", - "requires": { - "highlight-words-core": "^1.2.0", - "memoize-one": "^4.0.0", - "prop-types": "^15.5.8" - }, - "dependencies": { - "memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" - } - } - }, - "react-infinite-scroll-component": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/react-infinite-scroll-component/-/react-infinite-scroll-component-6.1.0.tgz", - "integrity": "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==", - "requires": { - "throttle-debounce": "^2.1.0" - } - }, - "react-infinite-scroller": { - "version": "1.2.6", - "resolved": "https://registry.npmmirror.com/react-infinite-scroller/-/react-infinite-scroller-1.2.6.tgz", - "integrity": "sha512-mGdMyOD00YArJ1S1F3TVU9y4fGSfVVl6p5gh/Vt4u99CJOptfVu/q5V/Wlle72TMgYlBwIhbxK5wF0C/R33PXQ==", - "requires": { - "prop-types": "^15.5.8" - } - }, - "react-intl": { - "version": "3.12.1", - "resolved": "https://registry.npmmirror.com/react-intl/-/react-intl-3.12.1.tgz", - "integrity": "sha512-cgumW29mwROIqyp8NXStYsoIm27+8FqnxykiLSawWjOxGIBeLuN/+p2srei5SRIumcJefOkOIHP+NDck05RgHg==", - "requires": { - "@formatjs/intl-displaynames": "^1.2.0", - "@formatjs/intl-listformat": "^1.4.1", - "@formatjs/intl-relativetimeformat": "^4.5.9", - "@formatjs/intl-unified-numberformat": "^3.2.0", - "@formatjs/intl-utils": "^2.2.0", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/invariant": "^2.2.31", - "hoist-non-react-statics": "^3.3.2", - "intl-format-cache": "^4.2.21", - "intl-messageformat": "^7.8.4", - "intl-messageformat-parser": "^3.6.4", - "shallow-equal": "^1.2.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmmirror.com/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - }, - "dependencies": { - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" - } - } - }, - "react-popper": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/react-popper/-/react-popper-2.3.0.tgz", - "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", - "requires": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" - } - }, - "react-refresh": { - "version": "0.10.0", - "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.10.0.tgz", - "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", - "dev": true - }, - "react-resizable": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/react-resizable/-/react-resizable-3.0.4.tgz", - "integrity": "sha512-StnwmiESiamNzdRHbSSvA65b0ZQJ7eVQpPusrSmcpyGKzC0gojhtO62xxH6YOBmepk9dQTBi9yxidL3W4s3EBA==", - "requires": { - "prop-types": "15.x", - "react-draggable": "^4.0.3" - } - }, - "react-router": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/react-router/-/react-router-5.2.1.tgz", - "integrity": "sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-cache-route": { - "version": "1.12.11", - "resolved": "https://registry.npmmirror.com/react-router-cache-route/-/react-router-cache-route-1.12.11.tgz", - "integrity": "sha512-BexDIFju1v3+LTbJznls/CkmXiZ7zLTzPsSbhTY+Jcys9LQXJnLkZFDWMe+g5SxOUklzbrp4xpY2uQvHH3iWsA==", - "requires": { - "mini-create-react-context": "^0.4.1", - "react-freeze": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-5.2.1.tgz", - "integrity": "sha512-xhFFkBGVcIVPbWM2KEYzED+nuHQPmulVa7sqIs3ESxzYd1pYg8N8rxPnQ4T2o1zu/2QeDUWcaqST131SO1LR3w==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.1", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmmirror.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - } - }, - "react-side-effect": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/react-side-effect/-/react-side-effect-1.2.0.tgz", - "integrity": "sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==", - "requires": { - "shallowequal": "^1.0.1" - } - }, - "react-sortable-hoc": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/react-sortable-hoc/-/react-sortable-hoc-2.0.0.tgz", - "integrity": "sha512-JZUw7hBsAHXK7PTyErJyI7SopSBFRcFHDjWW5SWjcugY0i6iH7f+eJkY8cJmGMlZ1C9xz1J3Vjz0plFpavVeRg==", - "requires": { - "@babel/runtime": "^7.2.0", - "invariant": "^2.2.4", - "prop-types": "^15.5.7" - } - }, - "react-sticky": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/react-sticky/-/react-sticky-6.0.3.tgz", - "integrity": "sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ==", - "requires": { - "prop-types": "^15.5.8", - "raf": "^3.3.0" - } - }, - "react-syntax-highlighter": { - "version": "13.4.0", - "resolved": "https://registry.npmmirror.com/react-syntax-highlighter/-/react-syntax-highlighter-13.4.0.tgz", - "integrity": "sha512-LL4idMEOyGNro/BCaW1yRjGB1OO8n0OrXnuGg/NJoWvP1dtkHTy5paJfRc/SQdAFfvl0pPRRxvATzkxkKegOcQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.1.1", - "lowlight": "^1.14.0", - "prismjs": "^1.21.0", - "refractor": "^3.0.0" - } - }, - "react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "requires": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "react-text-loop": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/react-text-loop/-/react-text-loop-2.3.0.tgz", - "integrity": "sha512-tRLxdkhc1ojAICxERJNOWj3Ry7NIGmFQF4tR6cRVyL+5zVD+gj+8uGPvOgEBLuj2vmjTXLPvBMVVCnoAIy1+DA==", - "requires": { - "cxs": "^6.2.0", - "react-fast-compare": "2.0.4", - "react-motion": "^0.5.2" - }, - "dependencies": { - "react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - } - } - }, - "react-text-loop-next": { - "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/react-text-loop-next/-/react-text-loop-next-0.0.3.tgz", - "integrity": "sha512-TbkzFLArOCrBcnyLFhB7Z+KOQvP9fmZYJ3x6gSdG6BE7wxrSBJ+LQaF+WqAQqTYpmSaHBDso7kKVRnGsrBYijQ==", - "requires": { - "cxs": "^6.2.0", - "react-motion": "^0.5.2" - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmmirror.com/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "react-virtualized": { - "version": "9.22.3", - "resolved": "https://registry.npmmirror.com/react-virtualized/-/react-virtualized-9.22.3.tgz", - "integrity": "sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==", - "requires": { - "@babel/runtime": "^7.7.2", - "clsx": "^1.0.4", - "dom-helpers": "^5.1.3", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "react-window": { - "version": "1.8.8", - "resolved": "https://registry.npmmirror.com/react-window/-/react-window-1.8.8.tgz", - "integrity": "sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "dependencies": { - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - } - } - }, - "reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "requires": { - "lodash": "^4.0.1" - } - }, - "reactstrap": { - "version": "9.1.6", - "resolved": "https://registry.npmmirror.com/reactstrap/-/reactstrap-9.1.6.tgz", - "integrity": "sha512-79h/L/pvMJIz198VULMpLbEyXFeArFTLAnEtk5anppJhAnZnfyM1pNuQWZNGXy6cUlgsaEy2gBziAw4tockOnw==", - "requires": { - "@babel/runtime": "^7.12.5", - "@popperjs/core": "^2.6.0", - "classnames": "^2.2.3", - "prop-types": "^15.5.8", - "react-popper": "^2.2.4", - "react-transition-group": "^4.4.2" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "refractor": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "requires": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.27.0" - }, - "dependencies": { - "prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "scheduler": { - "version": "0.18.0", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.18.0.tgz", - "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "scroll-into-view-if-needed": { - "version": "2.2.31", - "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", - "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", - "requires": { - "compute-scroll-into-view": "^1.0.20" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmmirror.com/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", - "dev": true - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "single-spa": { - "version": "5.9.4", - "resolved": "https://registry.npmmirror.com/single-spa/-/single-spa-5.9.4.tgz", - "integrity": "sha512-QkEoh0AzGuU82qnbUUk0ydF78QbU5wMKqKKJn7uUQfBiOYlRQEfIOpLM4m23Sab+kTOLI1kbYhYeiQ7fX5KVVw==" - }, - "single-spa-react": { - "version": "2.14.0", - "resolved": "https://registry.npmmirror.com/single-spa-react/-/single-spa-react-2.14.0.tgz", - "integrity": "sha512-KQ2/y7/JBIquK0WUiwb1/Y7f4qTZITNotw+JwNPesj0WKeCi91u0LOZe2ps56QMJbyB4UrA5IzMBwbYWDr1pIw==" - }, - "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmmirror.com/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dev": true, - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - } - }, - "size-sensor": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/size-sensor/-/size-sensor-1.0.1.tgz", - "integrity": "sha512-QTy7MnuugCFXIedXRpUSk9gUnyNiaxIdxGfUjr8xxXOqIB3QvBUYP9+b51oCg2C4dnhaeNk/h57TxjbvoJrJUA==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sockjs-client": { - "version": "1.6.1", - "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.1.tgz", - "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stats-webpack-plugin": { - "version": "0.7.0", - "resolved": "https://registry.npmmirror.com/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", - "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - } - } - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmmirror.com/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "throttle-debounce": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz", - "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "dev": true - }, - "ts-loader": { - "version": "8.4.0", - "resolved": "https://registry.npmmirror.com/ts-loader/-/ts-loader-8.4.0.tgz", - "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.3", - "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", - "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", - "dev": true, - "requires": { - "ansi-html-community": "0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "dev": true - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/write-json-file/-/write-json-file-2.3.0.tgz", - "integrity": "sha512-84+F0igFp2dPD6UpAQjOUX3CdKUOqUzn6oE9sDBNzUXINR5VceJ1rauZltqQB/bcYsx3EpKys4C7/PivKUAiWQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zrender": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz", - "integrity": "sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==", - "requires": { - "tslib": "2.3.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - } - } - } - } -} diff --git a/km-console/packages/config-manager-fe/package.json b/km-console/packages/config-manager-fe/package.json deleted file mode 100644 index 28ed2fbc..00000000 --- a/km-console/packages/config-manager-fe/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "name": "config-manager-fe", - "port": "8001", - "version": "1.0.0", - "description": "kafka配置管理平台", - "author": "joysunchao ", - "systemName": "config", - "ident": "config", - "homepage": "", - "license": "ISC", - "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1", - "start": "cross-env NODE_ENV=development webpack-dev-server", - "build": "cross-env NODE_ENV=production webpack --max_old_space_size=8000" - }, - "dependencies": { - "@knowdesign/icons": "^1.0.2", - "babel-preset-react-app": "^10.0.0", - "classnames": "^2.2.6", - "dotenv": "^16.0.1", - "knowdesign": "1.3.7", - "less": "^3.9.0", - "lodash": "^4.17.11", - "mobx": "4.15.7", - "mobx-react": "6.0.0", - "moment": "^2.24.0", - "query-string": "^5.0.1", - "react": "16.12.0", - "react-codemirror2": "^7.2.1", - "react-dom": "16.12.0", - "react-intl": "^3.2.1", - "react-router-cache-route": "^1.11.1", - "single-spa": "^5.8.0", - "single-spa-react": "^2.14.0" - }, - "devDependencies": { - "@ant-design/icons": "^4.6.2", - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-class-properties": "^7.4.0", - "@babel/plugin-proposal-decorators": "^7.4.0", - "@babel/plugin-proposal-export-default-from": "^7.2.0", - "@babel/plugin-proposal-export-namespace-from": "^7.5.2", - "@babel/plugin-proposal-object-rest-spread": "^7.4.3", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-object-assign": "^7.12.1", - "@babel/plugin-transform-runtime": "^7.4.3", - "@babel/preset-env": "^7.4.2", - "@babel/preset-react": "^7.0.0", - "@babel/preset-typescript": "^7.14.5", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", - "@types/lodash": "^4.14.138", - "@types/react-dom": "^17.0.5", - "@types/react-router": "5.1.18", - "@types/react-router-dom": "^5.3.3", - "@types/single-spa-react": "^2.12.0", - "@typescript-eslint/eslint-plugin": "4.13.0", - "@typescript-eslint/parser": "4.13.0", - "axios": "^0.21.1", - "babel-eslint": "10.1.0", - "babel-loader": "^8.2.2", - "babel-plugin-import": "^1.12.0", - "cache-loader": "^4.1.0", - "case-sensitive-paths-webpack-plugin": "^2.2.0", - "clean-webpack-plugin": "^3.0.0", - "cross-env": "^7.0.2", - "css-loader": "^2.1.0", - "eslint": "7.30.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-prettier": "3.4.0", - "eslint-plugin-react": "7.22.0", - "eslint-plugin-react-hooks": "4.2.0", - "file-loader": "^6.0.0", - "happypack": "^5.0.1", - "hard-source-webpack-plugin": "^0.13.1", - "html-webpack-plugin": "^4.0.0", - "husky": "4.3.7", - "less-loader": "^4.1.0", - "lint-staged": "10.5.3", - "mini-css-extract-plugin": "^1.3.0", - "mobx": "4.15.7", - "mobx-react": "6.0.0", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "prettier": "2.3.2", - "progress-bar-webpack-plugin": "^1.12.1", - "react-refresh": "^0.10.0", - "react-router-dom": "5.2.1", - "stats-webpack-plugin": "^0.7.0", - "ts-loader": "^8.0.11", - "typescript": "4.6.4", - "webpack": "^4.40.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.2.1", - "webpack-merge": "^4.2.1" - } -} diff --git a/km-console/packages/config-manager-fe/src/@types/index.d.ts b/km-console/packages/config-manager-fe/src/@types/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/km-console/packages/config-manager-fe/src/api/index.ts b/km-console/packages/config-manager-fe/src/api/index.ts deleted file mode 100755 index 71384c00..00000000 --- a/km-console/packages/config-manager-fe/src/api/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -const apiPrefix = '/logi-security/api/v1'; -function getApi(path: string) { - return `${apiPrefix}${path}`; -} - -const api = { - // 公共 - permissionTree: getApi('/permission/tree'), - - // 配置 - configGroupList: getApi('/config/group/list'), - configList: getApi('/config/page'), - configDetail: getApi('/config/get'), - configSwtichStatus: getApi('/config/switch'), // 切换配置开关状态 - addConfig: getApi('/config/add'), - editConfig: getApi('/config/edit'), - delConfig: getApi('/config/del'), - - // 用户 - userList: getApi('/user/page'), - user: (id: number) => getApi(`/user/${id}`), // 用户详情 / 删除用户 - addUser: getApi('/user/add'), - editUser: getApi('/user/edit'), - getUsersByRoleId: (roleId: number) => getApi(`/user/list/role/${roleId}`), - - // 角色 - editRole: getApi('/role'), - roleList: getApi('/role/page'), - simpleRoleList: getApi('/role/list'), - role: (id: number) => getApi(`/role/${id}`), // 角色详情 / 删除角色 - getAssignedUsersByRoleId: (id: number) => getApi(`/role/assign/list/${id}`), // 根据角色 id 获取已分配用户简要信息列表 - assignRoles: getApi('/role/assign'), - checkRole: (id: number) => getApi(`/role/delete/check/${id}`), // 判断该角色是否已经分配给用户 - - // 日志 - oplogTypeList: getApi('/oplog/type/list'), - oplogList: getApi('/oplog/page'), -}; - -export default api; diff --git a/km-console/packages/config-manager-fe/src/app.tsx b/km-console/packages/config-manager-fe/src/app.tsx deleted file mode 100644 index 2f29654d..00000000 --- a/km-console/packages/config-manager-fe/src/app.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { BrowserRouter as Router, Redirect, Switch } from 'react-router-dom'; -import _ from 'lodash'; -import './constants/axiosConfig'; -import dantdZhCN from 'knowdesign/es/locale/zh_CN'; -import dantdEnUS from 'knowdesign/es/locale/en_US'; -import intlZhCN from './locales/zh'; -import intlEnUS from './locales/en'; -import { AppContainer, RouteGuard, DProLayout } from 'knowdesign'; -import { leftMenus, systemKey } from './constants/menu'; -import { pageRoutes } from './pages'; -import './index.less'; -interface ILocaleMap { - [index: string]: any; -} - -const localeMap: ILocaleMap = { - 'zh-CN': { - dantd: dantdZhCN, - intl: 'zh-CN', - intlMessages: intlZhCN, - }, - en: { - dantd: dantdEnUS, - intl: 'en', - intlMessages: intlEnUS, - }, -}; - -export const { Provider, Consumer } = React.createContext('zh'); - -const defaultLanguage = 'zh'; - -const AppContent = (props: { - getLicenseInfo?: (cbk: (msg: string) => void) => void | undefined; - licenseEventBus?: Record | undefined; -}) => { - const { getLicenseInfo, licenseEventBus } = props; - - return ( -
- - - { - getLicenseInfo?.((msg) => licenseEventBus?.emit('licenseError', msg)); - return Promise.resolve(true); - }} - noMatch={() => } - /> - -
- ); -}; - -const App = (props: any) => { - const { getLicenseInfo, licenseEventBus } = props; - const intlMessages = _.get(localeMap[defaultLanguage], 'intlMessages', intlZhCN); - const locale = _.get(localeMap[defaultLanguage], 'intl', 'zh-CN'); - const antdLocale = _.get(localeMap[defaultLanguage], 'dantd', dantdZhCN); - - return ( -
- - - - - - - -
- ); -}; - -export default App; diff --git a/km-console/packages/config-manager-fe/src/components/CardBar/index.less b/km-console/packages/config-manager-fe/src/components/CardBar/index.less deleted file mode 100644 index e38ff149..00000000 --- a/km-console/packages/config-manager-fe/src/components/CardBar/index.less +++ /dev/null @@ -1,10 +0,0 @@ -.card-bar-container{ - padding:16px 24px; - width: 100%; - .card-bar-content{ - height: 88px; - width: 100%; - display: flex; - justify-content: space-around; - } -} diff --git a/km-console/packages/config-manager-fe/src/components/CardBar/index.tsx b/km-console/packages/config-manager-fe/src/components/CardBar/index.tsx deleted file mode 100644 index 48bcf659..00000000 --- a/km-console/packages/config-manager-fe/src/components/CardBar/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import { Select, Form, Input, Switch, Radio, DatePicker, Row, Col, Collapse } from 'knowdesign'; -export interface CardBarProps { - cardClumns: any[]; -} -const CardBar = (props: CardBarProps) => { - const { cardClumns } = props; - const CardClumnsItem: any = (cardItem: any) => { - const { cardClumnsItemData } = cardItem; - return ( - - - {cardClumnsItemData.icon} - {cardClumnsItemData.title} - - - {cardClumnsItemData.lable} - - - ); - }; - return ( - <> -
-
-
-
左侧
-
-
title
-
-
分数
-
详情
-
-
-
- {cardClumns && - cardClumns.length != 0 && - cardClumns.map((index, item) => { - return ; - })} -
-
- - ); -}; -export default CardBar; diff --git a/km-console/packages/config-manager-fe/src/components/Message/index.tsx b/km-console/packages/config-manager-fe/src/components/Message/index.tsx deleted file mode 100644 index 5791939c..00000000 --- a/km-console/packages/config-manager-fe/src/components/Message/index.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { IconFont } from '@knowdesign/icons'; -import { message } from 'knowdesign'; -import { ArgsProps, ConfigOnClose } from 'knowdesign/es/basic/message'; - -type ConfigContent = React.ReactNode; -type ConfigDuration = number | (() => void); -type JointContent = ConfigContent | ArgsProps; - -message.config({ - top: 16, -}); - -function isArgsProps(content: JointContent): content is ArgsProps { - return Object.prototype.toString.call(content) === '[object Object]' && !!(content as ArgsProps).content; -} - -const openMessage = ( - type: 'info' | 'success' | 'warning' | 'error', - content: JointContent, - duration?: ConfigDuration, - onClose?: ConfigOnClose -) => { - if (isArgsProps(content)) { - message[type]({ - icon: , - ...content, - }); - } else { - message[type]({ - icon: , - content, - duration, - onClose, - }); - } -}; - -const customMessage = { - info(content: JointContent, duration?: ConfigDuration, onClose?: ConfigOnClose) { - openMessage('info', content, duration, onClose); - }, - success(content: JointContent, duration?: ConfigDuration, onClose?: ConfigOnClose) { - openMessage('success', content, duration, onClose); - }, - warning(content: JointContent, duration?: ConfigDuration, onClose?: ConfigOnClose) { - openMessage('warning', content, duration, onClose); - }, - error(content: JointContent, duration?: ConfigDuration, onClose?: ConfigOnClose) { - openMessage('error', content, duration, onClose); - }, -}; - -export default customMessage; diff --git a/km-console/packages/config-manager-fe/src/components/Notification/index.tsx b/km-console/packages/config-manager-fe/src/components/Notification/index.tsx deleted file mode 100644 index 9673d511..00000000 --- a/km-console/packages/config-manager-fe/src/components/Notification/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { notification } from 'knowdesign'; -import { ArgsProps } from 'knowdesign/es/basic/notification'; -import { IconFont } from '@knowdesign/icons'; - -notification.config({ - top: 16, - duration: 3, -}); - -const open = (type: 'info' | 'success' | 'warning' | 'error', content: ArgsProps) => { - notification[type]({ - icon: , - ...content, - }); -}; - -const customNotification = { - info(content: ArgsProps) { - open('info', content); - }, - success(content: ArgsProps) { - open('success', content); - }, - warning(content: ArgsProps) { - open('warning', content); - }, - error(content: ArgsProps) { - open('error', content); - }, -}; - -export default customNotification; diff --git a/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.less b/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.less deleted file mode 100644 index 727d7707..00000000 --- a/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.less +++ /dev/null @@ -1,74 +0,0 @@ -.list-with-hide-container { - flex: 1; - display: flex; - align-items: center; - width: 100%; - .container-item { - flex-shrink: 0; - height: 20px; - padding: 4px 6px; - border-radius: 5px; - margin-right: 4px; - background: rgba(33, 37, 41, 0.08); - font-size: 12px; - color: #495057; - text-align: center; - line-height: 12px; - opacity: 0; - &.show { - opacity: 1; - } - &.hide { - display: none; - } - } - .expand-item { - font-size: 12px; - color: #495057; - line-height: 12px; - opacity: 0; - &.show { - opacity: 1; - } - &.hide { - display: none; - } - } - &.hide { - position: absolute; - z-index: -10000; - opacity: 0; - } -} - -.tags-with-hide-popover { - .dcloud-popover-inner { - box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.04), 0 6px 12px 12px rgba(0, 0, 0, 0.04), 0 6px 10px 0 rgba(0, 0, 0, 0.08); - border-radius: 8px; - &-content { - padding: 0; - } - } - .dcloud-popover-arrow-content { - display: none !important; - } - .container-item-popover { - display: flex; - flex-flow: row wrap; - max-width: 560px; - padding: 10px 8px 4px 8px; - .container-item { - flex-shrink: 0; - height: 20px; - padding: 4px 6px; - border-radius: 5px; - margin-right: 4px; - background: rgba(33, 37, 41, 0.08); - font-size: 12px; - color: #495057; - text-align: center; - line-height: 12px; - margin-bottom: 6px; - } - } -} diff --git a/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.tsx b/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.tsx deleted file mode 100644 index dcf80ee4..00000000 --- a/km-console/packages/config-manager-fe/src/components/TagsWithHide/index.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { DownOutlined } from '@ant-design/icons'; -import { Popover } from 'knowdesign'; -import { TooltipPlacement } from 'knowdesign/es/basic/tooltip'; -import React, { useState, useRef, useEffect } from 'react'; -import './index.less'; - -type PropsType = { - list: string[]; - expandTagContent: string | ((tagNum: number) => string); - placement?: TooltipPlacement; -}; - -type TagsState = { - list: string[]; - isHideExpandNode: boolean; - endI: number; - calculated: boolean; -}; - -// 获取 DOM 元素横向 margin 值 -const getNodeMargin = (node: Element) => { - const nodeStyle = window.getComputedStyle(node); - return [nodeStyle.marginLeft, nodeStyle.marginRight].reduce((pre, cur) => { - return pre + Number(cur.slice(0, -2)); - }, 0); -}; - -// TODO: 页面宽度变化时重新计算 -export default (props: PropsType) => { - const { list = [], expandTagContent, placement = 'bottomRight' } = props; - list.sort(); - const ref = useRef(null); - const [curState, setCurState] = useState({ - list, - isHideExpandNode: true, - endI: -1, - calculated: false, - }); - const [nextTagsList, setNextTagsList] = useState(list); - - useEffect(() => { - const f = () => { - // 父盒子信息 - const box = ref.current; - const boxWidth = box.offsetWidth; - // 子元素信息 - const childrenList = Array.from(ref.current.children) as HTMLElement[] as any; - const len = childrenList.length; - const penultimateNode = childrenList[len - 2]; - const penultimateNodeOffsetRight = penultimateNode.offsetLeft + penultimateNode.offsetWidth - box.offsetLeft; - // 如果内容超出展示区域,隐藏一部分 - if (penultimateNodeOffsetRight > boxWidth) { - const lastNode = childrenList[len - 1]; - const childrenMarin = getNodeMargin(penultimateNode); - let curWidth = lastNode.offsetWidth + getNodeMargin(lastNode); - childrenList.some((children: any, i: number) => { - // 计算下一个元素的宽度 - const extraWidth = children.offsetWidth + childrenMarin; - // 如果加入下个元素后宽度未超出,则继续 - if (curWidth + extraWidth < boxWidth) { - curWidth += extraWidth; - return false; - } else { - // 否则记录当前索引值 i ,并退出 - setCurState({ list: nextTagsList, isHideExpandNode: false, endI: i, calculated: true }); - return true; - } - }); - } else { - // 隐藏 展示全部 对应的 DOM 元素 - setCurState({ list: nextTagsList, isHideExpandNode: true, endI: -1, calculated: true }); - } - }; - - // 在 setTimeout 中执行,保证拿到元素此时已经渲染到页面上,能够拿到正确的数据 - setTimeout(() => f()); - }, [nextTagsList]); - - useEffect(() => { - // 判断数据是否一致 - if (list.length !== nextTagsList.length || nextTagsList.some((item, i) => item !== list[i])) { - setNextTagsList(list); - setCurState({ list, isHideExpandNode: true, endI: -1, calculated: false }); - } - }, [list]); - - return ( -
- {curState.list.map((item, i) => { - return ( -
= curState.endI ? 'hide' : 'show') : '' - }`} - > - {item} -
- ); - })} - - {curState.list.map((id) => ( -
- {id} -
- ))} -
- } - > -
- {typeof expandTagContent === 'string' ? expandTagContent : expandTagContent(curState.list.length)} - -
- - - ); -}; diff --git a/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.less b/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.less deleted file mode 100644 index a4272ad7..00000000 --- a/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.less +++ /dev/null @@ -1,50 +0,0 @@ -.typical-list-card { - width: 100%; - height: 100%; - padding: 10px 10px 0 10px; - &-container { - height: 100%; - padding: 16px 24px; - background: #ffffff; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.01), 0 3px 6px 3px rgba(0, 0, 0, 0.01), 0 2px 6px 0 rgba(0, 0, 0, 0.03); - border-radius: 12px 12px 0 0; - .title { - margin-bottom: 16px; - border: none; - font-family: @font-family-bold; - font-size: 18px; - color: #212529; - letter-spacing: 0; - text-align: justify; - line-height: 20px; - } - .operate-bar { - display: flex; - justify-content: space-between; - margin-bottom: 12px; - .left, - .right { - display: flex; - align-items: center; - } - .left .refresh-icon { - font-size: 20px; - color: #74788d; - cursor: pointer; - } - .refresh-icon{ - .icon{ - padding: 3px; - border-radius: 50%; - &:hover { - background: rgba(33, 37, 41, 0.04); - } - } - } - .right .search-input { - width: 248px; - margin-right: 8px; - } - } - } -} diff --git a/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.tsx b/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.tsx deleted file mode 100644 index f9686755..00000000 --- a/km-console/packages/config-manager-fe/src/components/TypicalListCard/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import './index.less'; - -export default ({ title, children }) => { - return ( -
-
-
{title}
- {children} -
-
- ); -}; diff --git a/km-console/packages/config-manager-fe/src/constants/axiosConfig.ts b/km-console/packages/config-manager-fe/src/constants/axiosConfig.ts deleted file mode 100644 index b99fd274..00000000 --- a/km-console/packages/config-manager-fe/src/constants/axiosConfig.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -// @ts-nocheck - -import { Utils } from 'knowdesign'; -import notification from '@src/components/Notification'; - -export const goLogin = () => { - if (!window.location.pathname.toLowerCase().startsWith('/login')) { - window.history.replaceState({}, '', `/login?redirect=${window.location.href.slice(window.location.origin.length)}`); - } -}; - -const serviceInstance = Utils.service; - -// 清除 axios 实例默认的响应拦截 -serviceInstance.interceptors.response.handlers = []; - -// 请求拦截 -serviceInstance.interceptors.request.use( - (config: any) => { - const user = Utils.getCookie('X-SSO-USER'); - const id = Utils.getCookie('X-SSO-USER-ID'); - if (!user || !id) { - goLogin(); - } else { - config.headers['X-SSO-USER'] = user; // 请求携带token - config.headers['X-SSO-USER-ID'] = id; - return config; - } - }, - (err: any) => { - return err; - } -); - -// 响应拦截 -serviceInstance.interceptors.response.use( - (config: any) => { - const res: { code: number; message: string; data: any } = config.data; - if (res.code !== 0 && res.code !== 200) { - notification.error({ - message: '错误信息', - description: res.message, - }); - throw res; - } - return res; - }, - (err: any) => { - const config = err?.config; - if (!config || !config.retryTimes) return dealResponse(err); - const { __retryCount = 0, retryDelay = 300, retryTimes } = config; - config.__retryCount = __retryCount; - if (__retryCount >= retryTimes) { - return dealResponse(err); - } - config.__retryCount++; - const delay = new Promise((resolve) => { - setTimeout(() => { - resolve(); - }, retryDelay); - }); - // 重新发起请求 - return delay.then(function () { - return serviceInstance(config); - }); - } -); - -const dealResponse = (error: any) => { - if (error?.response) { - switch (error.response.status) { - case 401: - goLogin(); - break; - case 403: - location.href = '/403'; - break; - case 405: - notification.error({ - message: '错误', - duration: 3, - description: `${error.response.data.message || '请求方式错误'}`, - }); - break; - case 500: - notification.error({ - message: '错误', - duration: 3, - description: '服务错误,请重试!', - }); - break; - case 502: - notification.error({ - message: '错误', - duration: 3, - description: '网络错误,请重试!', - }); - break; - default: - notification.error({ - message: '连接出错', - duration: 3, - description: `${error.response.status}`, - }); - } - } else { - notification.error({ - description: '请重试或检查服务', - message: '连接超时! ', - duration: 3, - }); - } - return Promise.reject(error); -}; diff --git a/km-console/packages/config-manager-fe/src/constants/common.ts b/km-console/packages/config-manager-fe/src/constants/common.ts deleted file mode 100755 index 3c134480..00000000 --- a/km-console/packages/config-manager-fe/src/constants/common.ts +++ /dev/null @@ -1,34 +0,0 @@ -export const defaultPagination = { - current: 1, - pageSize: 10, - total: 0, -}; - -export const defaultPaginationConfig = { - showQuickJumper: true, - showSizeChanger: true, - pageSizeOptions: ['10', '20', '50', '100', '200', '500'], - showTotal: (total: number) => `共 ${total} 条`, -}; - -export const cellStyle = { - overflow: 'hidden', - whiteSpace: 'nowrap' as any, - textOverflow: 'ellipsis', - cursor: 'pointer', - maxWidth: 150, -}; - -export const systemCipherKey = 'Szjx2022@666666$'; - -export const oneDayMillims = 24 * 60 * 60 * 1000; - -export const classNamePrefix = 'bdp'; - -export const timeFormat = 'YYYY-MM-DD HH:mm:ss'; - -export const dateFormat = 'YYYY-MM-DD'; - -export const SMALL_DRAWER_WIDTH = 480; -export const MIDDLE_DRAWER_WIDTH = 728; -export const LARGE_DRAWER_WIDTH = 1080; diff --git a/km-console/packages/config-manager-fe/src/constants/menu.ts b/km-console/packages/config-manager-fe/src/constants/menu.ts deleted file mode 100755 index b0244ddf..00000000 --- a/km-console/packages/config-manager-fe/src/constants/menu.ts +++ /dev/null @@ -1,37 +0,0 @@ -const pkgJson = require('../../package'); -export const systemKey = pkgJson.ident; - -export const leftMenus = { - name: `${systemKey}`, - path: '', - icon: '#icon-kafka', - children: [ - { - name: 'setting', - path: 'setting', - icon: 'icon-Cluster', - }, - { - name: 'user', - path: 'user', - icon: 'icon-Brokers', - }, - { - name: 'operationLog', - path: 'operation-log', - icon: 'icon-Topics', - }, - ], -}; - -// key值需要与locale zh 中key值一致 -export const permissionPoints = { - [`menu.${systemKey}.home`]: true, -}; - -export const ROUTER_CACHE_KEYS = { - home: `menu.${systemKey}.home`, - dev: `menu.${systemKey}.dev`, - devDetail: `menu.${systemKey}.dev.detail`, - devTable: `menu.${systemKey}.dev.table`, -}; diff --git a/km-console/packages/config-manager-fe/src/index.html b/km-console/packages/config-manager-fe/src/index.html deleted file mode 100755 index 0847c037..00000000 --- a/km-console/packages/config-manager-fe/src/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - -
- - diff --git a/km-console/packages/config-manager-fe/src/index.less b/km-console/packages/config-manager-fe/src/index.less deleted file mode 100644 index 8852f348..00000000 --- a/km-console/packages/config-manager-fe/src/index.less +++ /dev/null @@ -1,13 +0,0 @@ -#ks-layout-container { - height: calc(100% - 48px); - #sub-system { - height: 100%; - .config-system { - display: flex; - height: 100%; - .dcloud-layout-content { - padding: 0; - } - } - } -} diff --git a/km-console/packages/config-manager-fe/src/index.tsx b/km-console/packages/config-manager-fe/src/index.tsx deleted file mode 100644 index 9a4b3011..00000000 --- a/km-console/packages/config-manager-fe/src/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import singleSpaReact from 'single-spa-react'; -import App from './app'; - -function domElementGetter() { - let el = document.getElementById('ks-layout-container'); - if (!el) { - el = document.createElement('div'); - el.id = 'ks-layout-container'; - document.body.appendChild(el); - } - - return el; -} - -const reactLifecycles = singleSpaReact({ - React, - ReactDOM, - rootComponent: App, - domElementGetter, -}); - -export const bootstrap = [reactLifecycles.bootstrap]; - -export const mount = [reactLifecycles.mount]; - -export const unmount = [reactLifecycles.unmount]; diff --git a/km-console/packages/config-manager-fe/src/locales/en.tsx b/km-console/packages/config-manager-fe/src/locales/en.tsx deleted file mode 100755 index c85dc24e..00000000 --- a/km-console/packages/config-manager-fe/src/locales/en.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { systemKey } from '../constants/menu'; - -export default { - [`menu.${systemKey}.setting`]: 'setting', - [`menu.${systemKey}.user`]: 'userManagement', - [`menu.${systemKey}.operationLog`]: 'operationLog', - - 'sider.footer.hide': 'hide', - 'sider.footer.expand': 'expand', -}; diff --git a/km-console/packages/config-manager-fe/src/locales/zh.tsx b/km-console/packages/config-manager-fe/src/locales/zh.tsx deleted file mode 100755 index ae36b2f9..00000000 --- a/km-console/packages/config-manager-fe/src/locales/zh.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { systemKey } from '../constants/menu'; -/** - * 用于左侧菜单与顶部路由导航中文展示,key值与各页面路径对应,比如dashboard页,路由:/cluster/dashbord,key值:menu.cluster.dashborad - */ -export default { - [`menu.${systemKey}.setting`]: '配置管理', - [`menu.${systemKey}.user`]: '用户管理', - [`menu.${systemKey}.operationLog`]: '审计日志', - - 'sider.footer.hide': '收起', - 'sider.footer.expand': '展开', -}; diff --git a/km-console/packages/config-manager-fe/src/pages/CommonConfig.tsx b/km-console/packages/config-manager-fe/src/pages/CommonConfig.tsx deleted file mode 100644 index 835abf51..00000000 --- a/km-console/packages/config-manager-fe/src/pages/CommonConfig.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useLayoutEffect } from 'react'; -import { Utils, AppContainer } from 'knowdesign'; -import { goLogin } from '@src/constants/axiosConfig'; - -// 权限对应表 -export enum ConfigPermissionMap { - SYS_MANAGE = '系统管理', - // 配置管理 - CONFIG_ADD = '配置管理-新增配置', - CONFIG_EDIT = '配置管理-编辑配置', - CONFIG_DEL = '配置管理-删除配置', - // 用户管理 - USER_DEL = '用户管理-删除人员', - USER_CHANGE_PASS = '用户管理-修改人员密码', - USER_EDIT = '用户管理-编辑人员', - USER_ADD = '用户管理-新增人员', - // 角色管理 - ROLE_DEL = '用户管理-删除角色', - ROLE_ASSIGN = '用户管理-分配用户角色', - ROLE_EDIT = '用户管理-编辑角色', - ROLE_ADD = '用户管理-新增角色', -} - -export interface PermissionNode { - id: number; - permissionName: ConfigPermissionMap | null; - parentId: number | null; - has: boolean; - leaf: boolean; - childList: PermissionNode[]; -} - -const CommonConfig = (): JSX.Element => { - const [, setGlobal] = AppContainer.useGlobalValue(); - - // 获取权限树 - const getPermissionTree = (userInfo, userId: number) => { - const getUserInfo = Utils.request(`/logi-security/api/v1/user/${userId}`); - const getPermissionTree = Utils.request('/logi-security/api/v1/permission/tree'); - - Promise.all([getPermissionTree, getUserInfo]).then(([permissionTree, userDetail]: [PermissionNode, any]) => { - const allPermissions = permissionTree.childList; - - // 获取用户在系统管理拥有的权限 - const userPermissionTree = userDetail.permissionTreeVO.childList; - const configPermissions = userPermissionTree.find((sys) => sys.permissionName === ConfigPermissionMap.SYS_MANAGE); - const userPermissions: ConfigPermissionMap[] = []; - configPermissions && configPermissions.childList.forEach((node) => node.has && userPermissions.push(node.permissionName)); - - const hasPermission = (permissionName: ConfigPermissionMap) => permissionName && userPermissions.includes(permissionName); - - setGlobal((curState: any) => ({ ...curState, permissions: allPermissions, userPermissions, hasPermission, userInfo })); - }); - }; - - useLayoutEffect(() => { - // 如果未登录,直接跳转到登录页 - const userInfoStorage = localStorage.getItem('userInfo'); - - try { - const userInfo = JSON.parse(userInfoStorage); - const userId = userInfo.id; - if (!userId) throw 'err'; - getPermissionTree(userInfo, userId); - } catch (_) { - goLogin(); - } - }, []); - - return <>; -}; - -export default CommonConfig; diff --git a/km-console/packages/config-manager-fe/src/pages/ConfigManage/config.ts b/km-console/packages/config-manager-fe/src/pages/ConfigManage/config.ts deleted file mode 100644 index 6af63d22..00000000 --- a/km-console/packages/config-manager-fe/src/pages/ConfigManage/config.ts +++ /dev/null @@ -1,17 +0,0 @@ -export enum ConfigOperate { - Add, - Edit, -} - -export type ConfigProps = { - id?: number; - valueGroup?: string; - valueName?: string; - value?: string; - status?: 0 | 1; - operator?: string; - memo?: string; -}; - -export type AddConfigProps = Omit; -export type EditConfigProps = Omit; diff --git a/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.less b/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.less deleted file mode 100644 index 3031f7f2..00000000 --- a/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.less +++ /dev/null @@ -1,72 +0,0 @@ -.config-manage-page { - .d-table { - .text-overflow-two-row { - overflow: hidden; - text-overflow: ellipsis; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - .hover-light:hover { - color: #556ee6; - cursor: pointer; - } - } -} - -// 新增/编辑配置抽屉 代码编辑器样式 -.config-manage-edit-drawer { - .codemirror-form-item { - > .cm-s-default { - border: 1px solid transparent; - border-radius: 8px; - overflow: hidden; - transition: all 0.3s; - &:hover, - &.CodeMirror-focused { - border-color: #74788d; - } - .CodeMirror-scroll { - background: rgba(33, 37, 41, 0.06); - transition: all 0.3s; - .CodeMirror-gutters { - background: transparent; - border-right: none; - } - } - } - } - - .dcloud-form-item-has-error { - .codemirror-form-item { - > .cm-s-default { - border-color: #ff7066; - .CodeMirror-scroll { - background: #fffafa; - } - } - } - } -} - -// 列表配置值弹窗 -.config-manage-value-modal { - .dcloud-modal-header { - border-bottom: 0; - } - .dcloud-modal-body { - padding: 0 8px 8px 8px; - .react-codemirror2 { - > .cm-s-default { - border-radius: 8px; - overflow: hidden; - .CodeMirror-scroll { - background: #556de60a; - .CodeMirror-gutters { - background: transparent; - border-right: none; - } - } - } - } - } -} diff --git a/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.tsx b/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.tsx deleted file mode 100644 index 3c85fdf5..00000000 --- a/km-console/packages/config-manager-fe/src/pages/ConfigManage/index.tsx +++ /dev/null @@ -1,485 +0,0 @@ -import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'; -import { Button, Form, Input, Select, Switch, Modal, ProTable, Drawer, Space, Divider, Tooltip, AppContainer, Utils } from 'knowdesign'; -import message from '@src/components/Message'; -import { IconFont } from '@knowdesign/icons'; -import { PlusOutlined } from '@ant-design/icons'; -import moment from 'moment'; -// 引入代码编辑器 -import { Controlled as CodeMirror } from 'react-codemirror2'; -import 'codemirror/lib/codemirror.css'; -//代码高亮 -import 'codemirror/addon/edit/matchbrackets'; -import 'codemirror/addon/selection/active-line'; -import 'codemirror/addon/edit/closebrackets'; -require('codemirror/mode/xml/xml'); -require('codemirror/mode/javascript/javascript'); -import api from '@src/api'; -import { defaultPagination } from '@src/constants/common'; -import TypicalListCard from '../../components/TypicalListCard'; -import { ConfigPermissionMap } from '../CommonConfig'; -import { ConfigOperate, ConfigProps } from './config'; -import './index.less'; - -const { request } = Utils; -const { confirm } = Modal; -const { TextArea } = Input; - -// 新增/编辑配置抽屉 -const EditConfigDrawer = forwardRef((_, ref) => { - const [config, setConfig] = useState({}); - const [type, setType] = useState(ConfigOperate.Add); - const [form] = Form.useForm(); - const [visible, setVisible] = useState(false); - const [groupOptions, setGroupOpions] = useState<{ label: string; value: string }[]>([]); - const [confirmLoading, setConfirmLoading] = useState(false); - const [codeMirrorInput, setCodeMirrorInput] = useState(''); - const callback = useRef(() => { - return; - }); - - // 提交表单 - const onSubmit = () => { - form.validateFields().then((formData) => { - setConfirmLoading(true); - formData.status = formData.status ? 1 : 2; - const isAdd = type === ConfigOperate.Add; - const submitApi = isAdd ? api.addConfig : api.editConfig; - request(submitApi, { - method: isAdd ? 'PUT' : 'POST', - data: Object.assign(formData, isAdd ? {} : { id: config.id }), - }).then( - (res) => { - // 执行回调,刷新列表数据 - callback.current(); - - onClose(); - message.success(`成功${isAdd ? '新增' : '更新'}配置`); - }, - () => setConfirmLoading(false) - ); - }); - }; - - // 展开抽屉 - const onOpen = (status: boolean, type: ConfigOperate, cbk: () => void, groupOptions, config: ConfigProps = {}) => { - if (config.value) { - try { - // 如果内容可以格式化为 JSON,进行处理 - config.value = JSON.stringify(JSON.parse(config.value), null, 2); - } catch (_) { - // - } - } - form.setFieldsValue({ ...config, status: config.status === 1 }); - setConfig(config); - setGroupOpions(groupOptions); - setCodeMirrorInput(config.value); - setType(type); - setVisible(status); - callback.current = cbk; - }; - - // 关闭抽屉 - const onClose = () => { - setVisible(false); - setConfirmLoading(false); - setConfig({}); - form.resetFields(); - setCodeMirrorInput(''); - }; - - useImperativeHandle(ref, () => ({ - onOpen, - })); - - return ( - - - - - - } - > -
- - - - -
- { - form.setFieldsValue({ value }); - form.validateFields(['value']); - setCodeMirrorInput(value); - }} - /> -
-
- -