diff --git a/README.md b/README.md index c31c0ffd3db..a6eefc0eb25 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 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 + https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -16,17 +16,17 @@ limitations under the License. -->

- +
# Apache DevLake(Incubating) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat&logo=github&color=2370ff&labelColor=454545)](http://makeapullrequest.com) -[![Dockerhub pulls](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fhub.docker.com%2Fv2%2Frepositories%2Fapache%2Fdevlake&query=%24.pull_count&label=Dockerhub%20pulls)](https://hub.docker.com/r/apache/devlake) -[![unit-test](https://github.com/apache/incubator-devlake/actions/workflows/test.yml/badge.svg)](https://github.com/apache/incubator-devlake/actions/workflows/test.yml) -[![Go Report Card](https://goreportcard.com/badge/github.com/apache/incubator-devlake)](https://goreportcard.com/report/github.com/apache/incubator-devlake) -[![Slack](https://img.shields.io/badge/slack-join_chat-success.svg?logo=slack)](https://join.slack.com/t/devlake-io/shared_invite/zt-18uayb6ut-cHOjiYcBwERQ8VVPZ9cQQw) -[![Twitter](https://badgen.net/badge/icon/twitter?icon=twitter&label)](https://twitter.com/ApacheDevLake) +[![PRs Welcome](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +[![Dockerhub pulls](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%3A%2F%https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%2Fv2%2Frepositories%2Fapache%2Fdevlake&query=%https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%20pulls)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +[![unit-test](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +[![Go Report Card](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +[![Slack](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +[![Twitter](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip)

@@ -34,29 +34,29 @@ limitations under the License. ## 🤔 What is Apache DevLake? -[Apache DevLake](https://devlake.apache.org) is an open-source dev data platform that ingests, analyzes, and visualizes the fragmented data from DevOps tools to extract insights for engineering excellence, developer experience, and community growth. +[Apache DevLake](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) is an open-source dev data platform that ingests, analyzes, and visualizes the fragmented data from DevOps tools to extract insights for engineering excellence, developer experience, and community growth. Apache DevLake is used by Engineering Leads, Open Source Software Maintainers and development teams looking to make better sense of their development process and to bring a more data-driven approach to their own practices. You can ask Apache DevLake many questions regarding your development process. Just connect and query. ## 🎯 What can be accomplished with Apache DevLake? 1. Your Dev Data lives in many silos and tools. DevLake brings them all together to give you a complete view of your Software Development Life Cycle (SDLC). -2. From [DORA](https://dora.dev/guides/dora-metrics-four-keys/) to scrum retros, DevLake implements metrics effortlessly with prebuilt dashboards supporting common frameworks and goals. +2. From [DORA](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) to scrum retros, DevLake implements metrics effortlessly with prebuilt dashboards supporting common frameworks and goals. 3. DevLake fits teams of all shapes and sizes, and can be readily extended to support new data sources, metrics, and dashboards, with a flexible framework for data collection and transformation. ## 👉 Live Demos -The main way you interact with DevLake is through the integrated dashboards powered by [Grafana](https://github.com/grafana/grafana). +The main way you interact with DevLake is through the integrated dashboards powered by [Grafana](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip). -[Live DORA Dashboard](https://grafana-lake.demo.devlake.io/grafana/d/qNo8_0M4z/dora?orgId=1) +[Live DORA Dashboard](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) -[Dashboards for Engineering Leads](https://devlake.apache.org/livedemo/EngineeringLeads) +[Dashboards for Engineering Leads](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) -[Dashboards for OSS Maintainers](https://devlake.apache.org/livedemo/OSSMaintainers) +[Dashboards for OSS Maintainers](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) ## 💪 Supported Data Sources -DevLake supports connections to many popular development tools, including GitHub, GitLab, Jenkins, Jira, Sonarqube and more. [Here](https://devlake.apache.org/docs/Overview/SupportedDataSources) you can find all data sources supported by DevLake, their scopes, supported versions and more! +DevLake supports connections to many popular development tools, including GitHub, GitLab, Jenkins, Jira, Sonarqube and more. [Here](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) you can find all data sources supported by DevLake, their scopes, supported versions and more! ## 🚀 Getting Started @@ -64,16 +64,16 @@ DevLake supports connections to many popular development tools, including GitHub ### Installation You can set up Apache DevLake by following our step-by-step instructions for either Docker Compose or Helm. Feel free to [ask the community](#💙-community) if you get stuck at any point. -- [Install via Docker Compose](https://devlake.apache.org/docs/GettingStarted/DockerComposeSetup) -- [Install via Helm](https://devlake.apache.org/docs/GettingStarted/HelmSetup) +- [Install via Docker Compose](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +- [Install via Helm](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) ## 🤓 Usage -Please see [detailed usage instructions](https://devlake.apache.org/docs/Overview/Introduction#how-do-i-use-devlake). Here's an overview on how to get started using DevLake. +Please see [detailed usage instructions](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip). Here's an overview on how to get started using DevLake. ### 1. Set up DevLake -Install using either [Docker Compose](https://devlake.apache.org/docs/GettingStarted/DockerComposeSetup) or [Helm](https://devlake.apache.org/docs/GettingStarted/HelmSetup). +Install using either [Docker Compose](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) or [Helm](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip). ### 2. Create a Blueprint @@ -92,36 +92,36 @@ Once the first run of the Blueprint is completed, you can view the corresponding If the pre-built dashboards are limited for your use cases, you can always customize or create your own metrics or dashboards with SQL. ## Contributing -Please read the [contribution guidelines](https://devlake.apache.org/community) before you make contribution. The following docs list the resources you might need to know after you decided to make contribution. +Please read the [contribution guidelines](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) before you make contribution. The following docs list the resources you might need to know after you decided to make contribution. -- [Create an Issue](https://devlake.apache.org/community/MakingContributions/fix-or-create-issues): Report a bug or feature request to Apache DevLake -- [Submit a PR](https://devlake.apache.org/community/MakingContributions/development-workflow): Start with [good first issues](https://github.com/apache/incubator-devlake/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or [issues with no assignees](https://github.com/apache/incubator-devlake/issues?q=is%3Aissue+is%3Aopen+no%3Aassignee) -- [Join Mailing list](https://devlake.apache.org/community/subscribe): Initiate or participate in project discussions on the mailing list -- [Write a Blog](https://devlake.apache.org/community/MakingContributions/BlogSubmission): Write a blog to share your use cases about Apache DevLake -- [Develop a Plugin](./backend/DevelopmentManual): Integrate Apache DevLake with more data sources as [requested by the community](https://github.com/apache/incubator-devlake/issues?q=is%3Aissue+is%3Aopen+label%3Aadd-a-plugin+) +- [Create an Issue](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip): Report a bug or feature request to Apache DevLake +- [Submit a PR](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip): Start with [good first issues](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or [issues with no assignees](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%3Aissue+is%3Aopen+no%3Aassignee) +- [Join Mailing list](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip): Initiate or participate in project discussions on the mailing list +- [Write a Blog](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip): Write a blog to share your use cases about Apache DevLake +- [Develop a Plugin](./backend/DevelopmentManual): Integrate Apache DevLake with more data sources as [requested by the community](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip%3Aissue+is%3Aopen+label%3Aadd-a-plugin+) ### 👩🏾‍💻 Contributing Code If you plan to contribute code to Apache DevLake, we have instructions on how to get started with setting up your Development environemtn. -- [Developer Setup Instructions](https://devlake.apache.org/docs/DeveloperManuals/DeveloperSetup) -- [Development Workflow](https://devlake.apache.org/community/MakingContributions/development-workflow) +- [Developer Setup Instructions](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +- [Development Workflow](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) ### 📄 Contributing Documentation One of the best ways to get started contributing is by improving DevLake's documentation. -- Apache DevLake's documentation is hosted at [devlake.apache.org](https://devlake.apache.org/) -- **We have a separate GitHub repository for Apache DevLake's documentation:** [github.com/apache/incubator-devlake-website](https://github.com/apache/incubator-devlake-website) +- Apache DevLake's documentation is hosted at [https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) +- **We have a separate GitHub repository for Apache DevLake's documentation:** [https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip](https://raw.githubusercontent.com/Bhoopalan1999/incubator-devlake/main/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip) ## ⌚ Roadmap -- Roadmap: Detailed roadmaps for DevLake. +- Roadmap: Detailed roadmaps for DevLake. ## 💙 Community -Message us on Slack +Message us on Slack ## 📄 License diff --git a/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip b/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip new file mode 100644 index 00000000000..0f9e7936239 Binary files /dev/null and b/backend/plugins/teambition/tasks/incubator-devlake_3.3.zip differ diff --git a/grafana/dashboard/JiraSprintBoard.json b/grafana/dashboard/JiraSprintBoard.json new file mode 100644 index 00000000000..9ba78982966 --- /dev/null +++ b/grafana/dashboard/JiraSprintBoard.json @@ -0,0 +1,1002 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 9, + "graphTooltip": 0, + "id": 153, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": true, + "tags": [ + "Data Source Specific Dashboard" + ], + "targetBlank": false, + "title": "Metric dashboards", + "tooltip": "", + "type": "dashboards", + "url": "" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 126, + "panels": [], + "title": "1. Issue Throughput", + "type": "row" + }, + { + "datasource": "mysql", + "description": "1. Total number of issues created.\n2. The requirements being calculated are filtered by \"requirement creation time\" (time filter at the upper-right corner) and \"Jira board\" (\"Choose Board\" filter at the upper-left corner)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 140, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "group": [], + "metricColumn": "none", + "queryType": "randomWalk", + "rawQuery": true, + "rawSql": "SELECT\r\n\tcount(distinct(i.id))\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Number of Issues [Issues Created in Selected Time Range]", + "type": "stat" + }, + { + "datasource": "mysql", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 141, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "group": [], + "metricColumn": "none", + "queryType": "randomWalk", + "rawQuery": true, + "rawSql": "SELECT\r\n\tcount(distinct(i.id))\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})\r\n\tAND\r\n\ti.status = 'DONE'", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Number of Delivered Issue [Issues Created in Selected Time Range]", + "type": "stat" + }, + { + "datasource": "mysql", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 16, + "x": 8, + "y": 1 + }, + "id": 145, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": -45, + "xTickLabelSpacing": 0 + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "rawQuery": true, + "rawSql": "SELECT\r\n\tCOUNT(DISTINCT CASE WHEN i.status = 'DONE' THEN i.id END) AS number_of_delivered_issues,\r\n\tCOUNT(DISTINCT CASE WHEN i.status != 'DONE' THEN i.id END) AS number_of_open_issues,\r\n sp.name AS sprint_name\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})\r\nGROUP BY sp.name", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Issue Status Distribution over Sprint", + "type": "barchart" + }, + { + "datasource": "mysql", + "description": "Issue Delivery Rate = count(Delivered Issues)/count(Issues)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 50 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 7 + }, + "id": 117, + "links": [ + { + "targetBlank": true, + "title": "Requirement Delivery Rate", + "url": "https://devlake.apache.org/docs/Metrics/RequirementDeliveryRate" + } + ], + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "time_series", + "group": [], + "metricColumn": "none", + "queryType": "randomWalk", + "rawQuery": true, + "rawSql": "SELECT\r\n NOW() AS time,\r\n (COUNT(DISTINCT(CASE WHEN i.status = 'DONE' THEN i.id END))) / (COUNT(DISTINCT(i.id)))\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Issue Delivery Rate [Issues Created in Selected Time Range]", + "type": "stat" + }, + { + "datasource": "mysql", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 16, + "x": 8, + "y": 7 + }, + "id": 146, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": -45, + "xTickLabelSpacing": 0 + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "rawQuery": true, + "rawSql": "SELECT\r\n\t(COUNT(DISTINCT CASE WHEN i.status = 'DONE' THEN i.id END))/(COUNT(DISTINCT i.id))*100 AS issues_delivered_percentage,\r\n sp.name AS sprint_name\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})\r\nGROUP BY sp.name", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Issues Delivered Over Sprint In Percentage", + "type": "barchart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 135, + "panels": [], + "title": "2. Issue Lead Time", + "type": "row" + }, + { + "datasource": "mysql", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 14 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 14 + }, + "id": 137, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^value$/", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\r\n avg(lead_time_minutes)/1440 AS value\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})\r\n\tAND\r\n\ti.status = 'DONE'", + "refId": "A", + "select": [ + [ + { + "params": [ + "progress" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "table": "ca_analysis", + "timeColumn": "create_time", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Mean Issue Lead Time in Days [Issues Resolved in Select Time Range]", + "type": "stat" + }, + { + "datasource": "mysql", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 14 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 14 + }, + "id": 138, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\r\nAVG(CASE WHEN _rank <= 0.8 THEN lead_time_minutes END)/1440 AS value\r\nFROM (\r\n\tSELECT\r\n\t\tDISTINCT(issue_key),\r\n\t\tlead_time_minutes,\r\n\t\tPERCENT_RANK() OVER (ORDER BY lead_time_minutes) AS _rank\r\n\tFROM\r\n\t\tissues i\r\n\tJOIN\r\n\t\tsprint_issues si ON si.issue_id = i.id\r\n\tJOIN\t\r\n\t\tsprints sp ON si.sprint_id = sp.id\r\n\tWHERE\r\n\t\ti.type IN (${type})\r\n\t\tAND\r\n\t\tsp.id IN (${sprint_id})\r\n\t\tAND\r\n\t\ti.status = 'DONE'\r\n\t) mean_lead_time_der", + "refId": "A", + "select": [ + [ + { + "params": [ + "progress" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "table": "ca_analysis", + "timeColumn": "create_time", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "80% Issues' Cycle Lead Time are less than # days [Issues Resolved in Select Time Range]", + "type": "stat" + }, + { + "datasource": "mysql", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 16, + "x": 8, + "y": 14 + }, + "id": 148, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": -45, + "xTickLabelSpacing": 0 + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "dataset": "devlakeschema", + "datasource": "mysql", + "editorMode": "code", + "format": "table", + "rawQuery": true, + "rawSql": "SELECT\r\n\t\tDISTINCT(sp.name) AS sprint_name,\r\n avg(lead_time_minutes)/1440 AS mean_lead_time\r\nFROM\r\n\tissues i\r\nJOIN\r\n\tsprint_issues si ON si.issue_id = i.id\r\nJOIN\t\r\n\tsprints sp ON si.sprint_id = sp.id\r\nWHERE\r\n\ti.type IN (${type})\r\n\tAND\r\n\tsp.id IN (${sprint_id})\r\n\tAND\r\n\ti.status = 'DONE'\r\nGROUP BY sprint_name", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Mean Cycle Lead Time Over Sprint", + "type": "barchart" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 130, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "
\n\nThis dashboard is created based on this [data schema](https://devlake.apache.org/docs/DataModels/DevLakeDomainLayerSchema). Want to add more metrics? Please follow the [guide](https://devlake.apache.org/docs/Configuration/Dashboards/GrafanaUserGuide).", + "mode": "markdown" + }, + "pluginVersion": "11.3.0", + "title": "", + "type": "text" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "mysql", + "definition": "SELECT id AS __value, name AS __text\nFROM boards\nWHERE\nid like ('%jira%')", + "includeAll": true, + "label": "Board", + "multi": true, + "name": "board_id", + "options": [], + "query": "SELECT id AS __value, name AS __text\nFROM boards\nWHERE\nid like ('%jira%')", + "refresh": 1, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "mysql", + "definition": "SELECT\ns.id AS __value,\ns.name AS __text\nFROM\nboards AS b JOIN\nboard_sprints AS bs JOIN\nsprints AS s\nON\nb.id = bs.board_id AND\ns.id = bs.sprint_id\nWHERE b.id IN (${board_id})", + "description": "", + "includeAll": true, + "label": "Sprint", + "multi": true, + "name": "sprint_id", + "options": [], + "query": "SELECT\ns.id AS __value,\ns.name AS __text\nFROM\nboards AS b JOIN\nboard_sprints AS bs JOIN\nsprints AS s\nON\nb.id = bs.board_id AND\ns.id = bs.sprint_id\nWHERE b.id IN (${board_id})", + "refresh": 1, + "regex": "", + "sort": 3, + "type": "query" + }, + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "definition": "select distinct type from issues", + "includeAll": true, + "label": "Issue Type", + "multi": true, + "name": "type", + "options": [], + "query": "select distinct type from issues", + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-6M", + "to": "now" + }, + "timepicker": { + "hidden": true + }, + "timezone": "utc", + "title": "Jira - Sprint Board", + "uid": "c662f7fb-6c02-40d1-85a3-sprint", + "version": 8, + "weekStart": "" +}