Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Jira中创建报告,显示状态中花费的时间_Jira_Jira Rest Api - Fatal编程技术网

在Jira中创建报告,显示状态中花费的时间

在Jira中创建报告,显示状态中花费的时间,jira,jira-rest-api,Jira,Jira Rest Api,对于客户,我需要创建月度报告,其中显示问题在不同状态(待办事项、进行中、已结束等)下花费的时间。更具体地说,客户希望看到,从他们创建问题到我们“接手”案例并开始解决问题需要多长时间 我很惊讶地发现,在Jiras默认报告工具中,您无法获得这一点。我已经搜索了相关的附加组件,但大多数报告工具都非常昂贵,我甚至不确定它们是否提供此功能。这难道不是一个正常的衡量标准吗 但是我找到了David Bevins api。不幸的是,这个api没有给我提取相关数据(时间戳、活动等)的机会 所以现在我转向了Jira

对于客户,我需要创建月度报告,其中显示问题在不同状态(待办事项、进行中、已结束等)下花费的时间。更具体地说,客户希望看到,从他们创建问题到我们“接手”案例并开始解决问题需要多长时间

我很惊讶地发现,在Jiras默认报告工具中,您无法获得这一点。我已经搜索了相关的附加组件,但大多数报告工具都非常昂贵,我甚至不确定它们是否提供此功能。这难道不是一个正常的衡量标准吗

但是我找到了David Bevins api。不幸的是,这个api没有给我提取相关数据(时间戳、活动等)的机会

所以现在我转向了JirasRESTAPI,我正在尝试在.NET中设置一个程序来实现它。我也做了同样的事。正如您在他的SO问题中看到的,返回的JSON是一团混乱。收集所有正确的数据需要大量的工作。所以在我继续之前,我想知道以前是否有人做过这件事,你是怎么做的


感谢您的帮助。

Jira默认情况下没有此选项,也没有简单的编程解决方法

但是,可以获取此数据(但您可能需要使用数据库中的3或4个表):

1) 创建jira插件并在那里解析数据

2) 使用主目录浏览器()获取数据,然后在您自己的程序中解析数据

Atlassian Marketplace上的插件正是用于此功能的,它运行良好,有过滤器、时间范围和一些导出选项:


您可以免费试用试用版。

我不久前创建了一个库,用于从Jira获取指标:

据我所知,您正在寻找给定状态下的问题周期时间。我认为这个例子应该对你有所帮助:

package pl.kaszaq.howfastyouaregoing.examples;

import com.google.common.collect.Sets;
import java.time.LocalDate;
import java.time.Month;
import java.util.HashSet;
import java.util.OptionalDouble;
import java.util.SortedMap;
import pl.kaszaq.howfastyouaregoing.agile.AgileClient;
import pl.kaszaq.howfastyouaregoing.agile.AgileProject;
import static pl.kaszaq.howfastyouaregoing.agile.IssuePredicates.hasSubtasks;
import pl.kaszaq.howfastyouaregoing.cycletime.CycleTimeComputer;

public class CycleTimeExample {

    public static void main(String[] args) {
        AgileClient agileClient = AgileClientProvider.createClient();
        runExample(agileClient);

    }

    private static void runExample(AgileClient agileClient) {
        LocalDate from = LocalDate.of(2011, Month.JULY, 1);
        int daysAverage = 30;
        LocalDate to = LocalDate.of(2014, Month.JANUARY, 1);
        AgileProject agileProject = agileClient.getAgileProject("MYPROJECTID");
        String[] cycleTimeStatuses = {"In Progress", "Ready for Testing"};
        final HashSet<String> finalStatuses = Sets.newHashSet("Closed");

        SortedMap<LocalDate, Double> cycleTime = CycleTimeComputer.calulcateCycleTime(agileProject, hasSubtasks().negate(), finalStatuses, cycleTimeStatuses);

        System.out.println(
                "\tCycle time for issues that do not have sub tasks in hours");
        for (LocalDate k = from; !k.isAfter(to); k = k.plusDays(daysAverage)) {
            OptionalDouble valueOptional = cycleTime.subMap(k.minusDays(daysAverage), k.plusDays(1)).values().stream()
                    .mapToDouble(val -> val)
                    .average();
            if (valueOptional.isPresent()) {
                System.out.println(k + "\t" + valueOptional.getAsDouble());
            }
        }

    }
}
package pl.kaszaq.howfastYouArego.examples;
导入com.google.common.collect.set;
导入java.time.LocalDate;
导入java.time.Month;
导入java.util.HashSet;
导入java.util.OptionalDouble;
导入java.util.SortedMap;
导入pl.kaszaq.howfastYouArego.agile.AgileClient;
导入pl.kaszaq.howfastYouArego.agile.AgileProject;
导入静态pl.kaszaq.howfastYouArego.agile.IssuePredicates.hasSubtasks;
导入pl.kaszaq.howfastYouArego.cycletime.CycleTimeComputer;
公共类CycleTimeExample{
公共静态void main(字符串[]args){
AgileClient AgileClient=AgileClientProvider.createClient();
runExample(agileClient);
}
私有静态void运行示例(AgileClient AgileClient){
LocalDate from=LocalDate.of(2011年7月1日);
int daysAverage=30;
LocalDate to=LocalDate.of(2014年1月1日);
AgileProject AgileProject=agileClient.getAgileProject(“MYPROJECTID”);
字符串[]cycleTimeStatuses={“正在进行”,“准备测试”};
final HashSet finalstatus=Sets.newHashSet(“已关闭”);
SortedMap cycleTime=CycleTimeComputer.calulcateCycleTime(agileProject,hasSubtasks().negate(),FinalStatus,CycleTimestStatus);
System.out.println(
“\t没有子任务的问题的循环时间(以小时为单位”);
for(LocalDate k=from;!k.isAfter(to);k=k.plusDays(daysAverage)){
OptionalDouble-valueOptional=cycleTime.subMap(k.minusDays(daysAverage),k.plusDays(1)).values().stream()
.mapToDouble(val->val)
.average();
if(valueOptional.isPresent()){
System.out.println(k+“\t”+valueOptional.getAsDouble());
}
}
}
}

“”提供expand=changelog查询参数后提供历史数据。它返回json响应,请参阅。然后,您需要解析响应、提取数据并进行计算


或者,你也可以尝试为你进行解析和计算的Marketplace应用程序。您可以尝试针对这一特定需求开发的软件。

Hi@barmi,感谢您提供有关状态加载项时间的提示。我试过了,它实际上满足了我们的大部分需求,但是用户体验很差。因此,我选择继续使用我自己的程序来呈现数据。不过我已经接受了你的回答。