【架构优化】从 businessExecutionDuration 中拆出区间并集求和 unionDuration
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 25/100
Piste de recherche
The logic lives in businessExecutionDuration in internal/repo/analytics_business_delivery.go, at the end of the function where intervals are sorted, merged and summed. Read that function, then extract the merge-and-sum loop into a package-private unionDuration helper. Done means the helper has table-driven tests for empty, disjoint, overlapping, nested, touching and unsorted input, and go test ./internal/repo/ passes. Linked PR #437 already covers this work, so check with maintainers before starting.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
现状问题
internal/repo/analytics_business_delivery.go 中 businessExecutionDuration 约 85 行,同时承担三件事:筛选可计入的 run、逐 run 收集并裁剪执行区间、最后对区间排序 → 合并重叠 → 求总时长。末尾的「区间并集求和」是一段与业务无关的纯算法(约 15 行双层循环),内联在长函数里,既不便阅读,也无法单独测试。
重构方案
在同文件内抽出包级纯函数:
// unionDuration 返回区间并集的总时长(重叠/相接的区间只计一次)。
func unionDuration(intervals []domain.RunExecutionInterval) time.Duration
businessExecutionDuration 末尾改为 value := unionDuration(intervals).Milliseconds()。排序、合并条件(!StartedAt.After(FinishedAt),相接也合并)逐字保留。
影响范围
- 仅
internal/repo/analytics_business_delivery.go,包内私有函数,无对外接口变化,无行为变化。 - 不改
domain/run_timing.go中同类逻辑(跨包,不在本次范围)。
验证方式
- 新增
unionDuration表驱动单测:空输入、单区间、不相交、重叠、包含、首尾相接、乱序输入。 - 既有
TestBusinessExecutionDuration*等用例保持通过;go vet ./internal/repo/、go test ./internal/repo/。
- Langage dominant
- Go
- Étoiles
- 141
- Forks
- 28
- Merge moyen
- 1 j 15 h
- PR mergées (30 j)
- 113
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Tencent/LoopForge
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: 官方镜像未安装 wecom-cli,企业微信通知报「通知服务未安装 wecom-cli」Peut-être pris @newexploreor l’a pris il y a 1 jour. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Tencent/LoopForge#156 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
【架构优化】合并 gitwork/workbranch.go 中 push/pull 重复的默认提交身份注入为 withFallbackIdentityPeut-être pris @fx-kurumi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 40/100
Les mainteneurs répondent en général sous 1 jour
-
【架构优化】从 runtime.installNPMCLI 中拆出 npm 参数拼装 npmCLIInstallArgs 与安装结果启用 activateNPMStagePeut-être pris @fx-kurumi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 30/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de Tencent/LoopForge
Issues similaires
-
team:library-maintainers
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
padok-team/burrito#1208 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
bazel-contrib/rules_go#4784 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Уязвимые компоненты в GoOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
POSIdev-community/aictl#40 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 62/100
prime-radiant-inc/evener#6306 ·
Les mainteneurs répondent en général sous 1 jour