【go-jira】go根据jql获取jira数据,包括total及bug的平均未解决时间

起因

因为要获取Jira信息,所以有了前一个文章:GitLab和Jira集成,本来打算能集成后方便获取的jira信息的,万万没想到,没成功😂。

本来还尝试了手动去获取jira登录等方式,但是试来试去还是感觉太麻烦,就直接去github上找了。

go-jira

逛了下github,发现了这个包:go-jira,看着好像是那么回事,就尝试了下。此处给出官方文档:go-jira相关文档

相关的源码就直接github看吧,上面也有用法示例,入门很简单。我就直接给出我相关代码了,也欢迎大佬们给出意见(或许很多部分可以简化等)

⚠️注意点🐷

  • 1、连接部分可看官方文档,我用的是用户名密码的形式
  • 2、jql直接在jira issue的筛选部分选择“高级筛选”,就会展示jql了,copy过来即可,无需转义
  • 3、看了jira api的官方文档可知,通过jql方式查看的issue,最大只返回50条,所以要传一个最大值,也就是getIssueNotCloseDays()方法中option.MaxResults,只要比筛选得到的issue数大就行
package main

import (
	"fmt"
	"time"

	jira "gopkg.in/andygrunwald/go-jira.v1"
)

var client *jira.Client

func jiraClient() {
	tp := jira.BasicAuthTransport{
		Username: "xxx", // 此处为jira对应的用户名
		Password: "xxx", // 此处为jira对应的密码
	}
	client, _ = jira.NewClient(tp.Client(), "https://jira.xxx.io") // 对应要登录的jira地址
}

func getIssueTotal() int {
	jql := "project = xxx AND issuetype = 故障 ORDER BY key DESC, priority DESC, updated DESC"
	fmt.Printf("Usecase: Running a JQL query '%s'\n", jql)
	_, resp, err := client.Issue.Search(jql, nil)
	if err != nil {
		fmt.Println(err)
	}
	total := resp.Total
	return total
}

func getIssueNotCloseDays() int64{
	option := &jira.SearchOptions{
		StartAt:       0,
		MaxResults:    500,
		Expand:        "",
		Fields:        nil, // []string
		ValidateQuery: "",
	}
	jql := "project = xxx AND issuetype = 故障 AND status in (进行中, \"To Do\") ORDER BY key DESC, priority DESC, updated DESC"
	fmt.Printf("Usecase: Running a JQL query '%s'\n", jql)
	issue, resp, err := client.Issue.Search(jql, option)
	if err != nil {
		fmt.Println(err)
	}
	// 获取到符合jql的issue总数
	issueNotCloseTotal := resp.Total
	var sum int64
	for _, v := range issue {
        // 获取每一个issue的创建时间
		created := v.Fields.Created
		t := time.Time(created).Unix()
		now := time.Now().Unix()
		// 与当前时间相减,计算时间差,并逐个累加至sum
		reverseTime := now - t
		sum += reverseTime
	}
	// 计算得出平均时间(以day来计算)
	averageTime := sum/int64(issueNotCloseTotal)/86400
	return averageTime
}

func main() {
	jiraClient()
	total := getIssueTotal()
	fmt.Println("Bug总数:",total)
	avg := getIssueNotCloseDays()
	fmt.Println("平均天数:",avg)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值