如果将Metabase与OpenProject整合,可能会创建出最强大的仪表盘

为什么写了?

    • 趣味で調べたことを職場で参照したい

 

    • もしかすると参考になる人がいるかもしれない

 

    OpenProject と Metabase の可能性に震えたから

准备OpenProject

OpenProject是一个基于Web的项目管理系统,用于非地理限制的团队协作。

首先,根据官方说明,OpenProject的安装方法有以下三种:
由于使用docker(-compose)较为方便,因此我打算尝试使用这种方式进行安装。

    • DEB/RPM packages

既存のマシンなどへ直接インストール(推奨)

docker

docker-compose で起動

Installation with Univention Corporate Server

VMイメージを入手

安装 OpenProject | OpenProject 帮助和文档
https://docs.openproject.org/installation-and-operations/installation/

官方明确提到了两种使用 Docker 进行安装的方法。
我将尝试使用推荐的第一种方法。

    • One container per process

WebやDBなどの機能ごとにコンテナを分けます(推奨)

All-in-one container

1つのコンテナで全ての機能を賄います

使用Docker安装OpenProject | OpenProject帮助与文档
https://docs.openproject.org/installation-and-operations/installation/docker/

首先,在本地进行试运行只需按照上述页面,并执行以下命令即可启动(非常简单!)。但由于想要与 Metabase 结合使用,所以在启动之前需要编辑 docker-compose.yml 文件。

# docker-compose.yml などを取得する
git clone --depth=1 --branch=stable/10 https://github.com/opf/openproject
# docker-compose.yml のあるディレクトリへ移動する
cd openproject
# デタッチモードで起動
docker-compose up -d

当阅读docker-compose.yml文件时,可以看出其主要元素如下所示。
现在,我们尝试添加Metabase到此处。

deployment1.png

Metabase的准备工作

元数据库是一种简单且开放源码的方式,可以让公司内的任何人提问并从数据中学习。

通过编辑docker-compose.yml文件,添加Metabase,使其具有以下配置。

deployment2.png

然后生成的docker-compose.yml文件如下。
使用docker-compose up -d命令启动,OpenProject将在http://localhost:8080/上运行,而Metabase将在http://localhost:3000/上运行。可能需要等待一段时间才能完成Metabase的启动。

version: "3.7"

networks:
  frontend:
  backend:
  metabase-backend:

volumes:
  pgdata:
  opdata:
  metabase-pgdata:

x-op-restart-policy: &restart_policy
  restart: unless-stopped
x-op-image: &image
  image: openproject/community:${TAG:-10}
x-op-app: &app
  <<: *image
  <<: *restart_policy
  environment:
    - "RAILS_CACHE_STORE=memcache"
    - "OPENPROJECT_CACHE__MEMCACHE__SERVER=cache:11211"
    - "OPENPROJECT_RAILS__RELATIVE__URL__ROOT=${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
    - "DATABASE_URL=postgres://postgres:p4ssw0rd@db/openproject"
    - "USE_PUMA=true"
    # set to true to enable the email receiving feature. See ./docker/cron for more options
    - "IMAP_ENABLED=false"
  volumes:
    - "opdata:/var/openproject/assets"
  depends_on:
    - db
    - cache
x-mb-app: &mb-app
  image: metabase/metabase
  <<: *restart_policy
  environment:
    - "MB_DB_TYPE=postgres"
    - "MB_DB_DBNAME=metabase"
    - "MB_DB_PORT=5432"
    - "MB_DB_USER=postgres"
    - "MB_DB_PASS=p4ssw0rd"
    - "MB_DB_HOST=metabase-db"
  depends_on:
    - db
    - metabase-db

services:
  db:
    image: postgres:10
    <<: *restart_policy
    stop_grace_period: "3s"
    volumes:
      - "pgdata:/var/lib/postgresql/data"
    environment:
      - POSTGRES_PASSWORD=p4ssw0rd
      - POSTGRES_DB=openproject
    networks:
      - backend

  cache:
    image: memcached
    <<: *restart_policy
    networks:
      - backend

  proxy:
    <<: *image
    <<: *restart_policy
    command: "./docker/proxy"
    ports:
      - "8080:80"
    environment:
      - APP_HOST=web
      - "OPENPROJECT_RAILS__RELATIVE__URL__ROOT=${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
    depends_on:
      - web
    networks:
      - frontend

  web:
    <<: *app
    command: "./docker/web"
    networks:
      - frontend
      - backend

  worker:
    <<: *app
    command: "./docker/worker"
    networks:
      - backend

  cron:
    <<: *app
    command: "./docker/cron"
    networks:
      - backend

  seeder:
    <<: *app
    command: "./docker/seeder"
    restart: on-failure
    networks:
      - backend

  metabase-app:
    <<: *mb-app
    ports:
      - "3000:3000"
    networks:
      - backend
      - metabase-backend

  metabase-db:
    image: postgres:10
    <<: *restart_policy
    stop_grace_period: "3s"
    volumes:
      - "metabase-pgdata:/var/lib/postgresql/data"
    environment:
      - POSTGRES_PASSWORD=p4ssw0rd
      - POSTGRES_DB=metabase
    networks:
      - metabase-backend

当Metabase启动后,在初始设置时应该注册OpenProject的数据库。
“名称”可以任意命名,而”数据库用户名”和”端口”采用postgres的默认设置,但其他项从docker-compose.yml文件的db服务配置中读取并填写。(请注意,此处仅提供一种翻译选项,因为翻译结果可能存在多种表达方式,不过根据上下文,本翻译应相对贴切。)

Screenshot_2020-04-26 Metabase.png

解析 OpenProject 的数据库架构

由于尚未完全理解,因此将随时更新。

OpenProject存储工作包(相当于Redmine中的票据概念)的表,在Metabase中以Work Packages这个名称显示(如果是以原始SQL进行引用,则称为work_packages)。这个表有许多列,但我们将关注下面列的内容。

    • Story Points

相対見積もり

Derived Estimated Hours

配下のタスクの見積もりの合計(時間単位)

首先,我制作了一个散点图,用于观察在为产品待办事项分配相对估算后,当我们开始执行任务并对其进行拆分后的时间估算是否相关(由于数据较少,所以不太美观)。

Screenshot_2020-04-26 Test · ダッシュボード · Metabase.png

我希望能使用以99%的概率按时交付项目的思路来显示项目的成功率。启用OpenProject的时间追踪功能后,可以输入任务执行所需的时间,但它不会直接反映在Work Packages表中,因此需要灵活提取。