2018年11月27日火曜日

embulk-output-chart を作ったけどあんまりうれしくなかった話

mikoto2000/embulk-output-chart を作っていろいろ遊ぼうとしたけれど、そもそも機能が足りないという感じであんまりうれしくなかった。

環境

やろうとしたこと

vim/vim-history リポジトリから、日ごとのコミット数をグラフにした(したかった)。

作業記録

概要としてはこんな感じ。

  1. vim-history リポジトリをクローン
  2. git log を xml として出力
  3. xml から sqlite に取り込み
  4. sqlite に集計クエリを投げつつチャート表示

vim-history リポジトリをクローン

git clone https://github.com/vim/vim-history.git
cd vim-history

git log を xml として出力

メッセージのエスケープ問題を回避するため、 xml の CDATA を活用することにした。

練習用に、今回使わない情報も入れている。 必要に応じて追加削除修正する感じで。

date は、書いた時の日付ということで、 author date のほうを取得している。

echo "<xml>"$(git log --pretty=format:'<commit><hash><![CDATA[%H]]></hash><subject><![CDATA[%f]]></subject><body><![CDATA[%b]]></body><author><![CDATA[%aN]]></author><commiter><![CDATA[%cN]]></commiter><author><![CDATA[%aN]]></author><date><![CDATA[%aI]]></date></commit>')"</xml>" > history_tmp.xml

xml から sqlite に取り込み

必要プラグインのインストール

embulk.bat gem install embulk-parser-xml embulk-output-jdbc

sqlite 用 jar ファイルのダウンロード

Maven リポジトリから sqlite-jdbc-3.25.2.jar をダウンロードしてカレントディレクトリに配置。

設定ファイル記述

in:
  type: file
  path_prefix: ./history_tmp.xml
  parser:
    type: xpath
    root: //commit
    schema:
      - {path: hash, name: hash, type: string}
      - {path: author, name: author, type: string}
      - {path: date, name: date, type: string, timestamp_format: "%Y-%m-%dT%H:%M:%S.%L%z", timezone: "+0000"}
      - {path: body, name: body, type: string}
out:
  type: jdbc
  driver_path: './sqlite-jdbc-3.25.2.jar'
  driver_class: 'org.sqlite.JDBC'
  url: 'jdbc:sqlite:vim_history.sqlite3'
  table: vim_history
  mode: 'replace'
  create_table_constraint: PRIMARY KEY(hash)

embulk 実行

embulk.bat run .\xml2sqlite.yml

sqlite に集計クエリを投げつつチャート表示

必要プラグインのインストール

embulk.bat gem install embulk-input-jdbc

embulk-output-chart のクローン

gem 化されていないので、 git clone で持ってきてビルドする。

git clone https://github.com/mikoto2000/embulk-output-chart.git ..\embulk-output-chart
cd ..\embulk-output-chart
.\gradlew.bat package
cd ..\vim-history

設定ファイル記述

exec:
  max_threads: 1
  min_output_tasks: 1
out:
  type: chart
  chart_type: LINE
  x_axis_name: Date
  x_axis_type: NUMBER
  y_axis_name: Commit
  y_axis_type: NUMBER
  serieses:
    - {name: "commit count", x: d_date, y: count}
in:
  type: jdbc
  driver_path: './sqlite-jdbc-3.25.2.jar'
  driver_class: 'org.sqlite.JDBC'
  url: 'jdbc:sqlite:vim_history.sqlite3'
  query: select cast(strftime('%s', date(date), 'utc') as long) as d_date, count(date) as count from vim_history group by d_date;
  column_options:
    d_date:
      value_type: long
    count:
      value_type: long

チャート表示実行

..\..\embulk\embulk.bat run -L ..\embulk-output-chart .\sqlite2chart.yml

はい。

まー、そうですね...。残念ですねという感じで。

今後に向けて

  • Date Axis が欲しい
    • カスタムラベルとかでごまかせるかな?
  • 表示範囲調整機能が欲しい
  • 集計が SQL 任せなのつらい
  • 画像保存できないとダメでは???

以上。ぼちぼちやっていきましょう。(そもそもチャート表示して嬉しいの?ということは考えてはいけない)

0 件のコメント:

コメントを投稿