Maildir形式のメールボックスの統計情報を出力するツール(maildir-stats)を作りました

Dovecot+Postfixで構成されたメールサーバ上のメール容量を計測したくて、Maildir形式のメールボックスの統計情報を出力するツールmaildir-stats をGoで作りました。

1ユーザ分の情報を出力するuserコマンドと、全ユーザの情報を出良くするusersコマンドをサブコマンドとして提供しています。

user

1ユーザ分のMaildirを指定します。
サマリの情報+フォルダ毎、年毎、月毎の情報を出力できます。

$ maildir-stats user -d /home/user1/Maildir -f -y -m

[Summary]
Number of mails : 10
Total size      : 3,340 byte

[Folder]
  Name   | Number of mails | Total size(byte)  
---------+-----------------+-------------------
         |               4 |               10  
  A      |               2 |               30  
  B      |               2 |              300  
  C      |               0 |                0  
  XXXXXX |               2 |            3,000  

[Year]
  Year | Number of mails | Total size(byte)  
-------+-----------------+-------------------
  2022 |               3 |            3,003  
  2023 |               7 |              337  

[Month]
  Month   | Number of mails | Total size(byte)  
----------+-----------------+-------------------
  2022-11 |               1 |            2,000  
  2022-12 |               2 |            1,003  
  2023-01 |               3 |              320  
  2023-02 |               2 |                5  
  2023-03 |               2 |               12  

users

ユーザのホームディレクトリからのMaildir名を指定します。ユーザの情報は /etc/passwd から取得します。
サマリの情報+ユーザ毎、年毎、月毎の情報を出力できます。

$ maildir-stats users -d Maildir -u -y -m

[Summary]
Number of mails : 11
Total size      : 6,321 byte

[User]
  Name  | Number of mails | Total size(byte)  
--------+-----------------+-------------------
  user1 |               6 |               21  
  user2 |               2 |              300  
  user3 |               3 |            6,000  
  user4 |               0 |                0  

[Year]
  Year | Number of mails | Total size(byte)  
-------+-----------------+-------------------
  2021 |               2 |              300  
  2022 |               6 |            3,014  
  2023 |               3 |            3,007  

[Month]
  Month   | Number of mails | Total size(byte)  
----------+-----------------+-------------------
  2021-12 |               2 |              300  
  2022-11 |               3 |            1,006  
  2022-12 |               3 |            2,008  
  2023-01 |               2 |            3,003  
  2023-02 |               1 |                4  

おわりに

詳しいオプションなどはREADMEをご参照ください。

Redmine: View customize plugin の v3.3.0 をリリースしました

View customize plugin の v3.3.0 をリリースしました。

挿入位置として「チケット一覧のコンテキストメニュー」を追加しています。(マージリクエストをいただきました)

コンテキストメニューに対してカスタマイズする際には、下記のサンプルのような感じでちょっと面倒だったのですが、、

$(function() {

  // Replace the show function in jQuery to add processing when the context menu is shown
  jQuery.fn._show = jQuery.fn.show;

  jQuery.fn.show = function() {
    if (this.attr('id') == 'context-menu') {
      const a = $('#context-menu a[href*="status_id%5D=6"]');
      a.attr('href', a.attr('href') + '&issue%5Bfixed_version_id%5D=none');
    }

    return jQuery.fn._show.apply(this, arguments);
  };
});

下記のようにシンプルに書くことができます。

const a = $('#context-menu a[href*="status_id%5D=6"]');
a.attr('href', a.attr('href') + '&issue%5Bfixed_version_id%5D=none');

2022年音楽振り返り

2020、21年に引き続き、2022年に聴いた音楽を振り返ってみます。
アーティストをさん付けで書くか相変わらず迷うのですが、ここでは敬称略で、、

Spotifyの2022まとめは下記のような感じでした。
Spotifyで聴いた時間は72,088分ということで、2021年から下がりました。5月から仕事で出社が増えたのが影響してます。

  • トップアーティスト
    1. eill
    2. クボタカイ
    3. asmi
    4. Rin音
    5. Eve
  • トップソング
    1. 23 (eill)
    2. Call me (asmi)
    3. なんでもないよ、 (マカロニえんぴつ)
    4. What's up (Rin音、クボタカイ、asmi、A夏目)
    5. palette (eill)

eill

2020年に一番聴いていたeillが、2022年も一番になりました。

メジャー1stアルバムがリリースされ、その後の HAPPY BIRTHDAY 2 ME、スキ、プレロマンス、フィナーレと、立て続けにまたまた良い曲がリリースされて、1年じゅう聴きまくっていました。

この3年間で一番聴いたアーティストで、それは今後も続きそうな気がします。それくらい、いろんな良い曲を届けてくれるアーティストです。

クボタカイ、asmi、Rin音

2021年に一番聴いていたクボタカイが2位になりました。続いてasmi、Rin音と、ROOFTOPが並びました。

ROOFTOPのアーティスト大好きなので、ほんとチームROOFTOPでライブやイベントやって欲しいです。(オフィスオーガスタのオーガスタキャンプみたいに)

2023年に向けて

今年はライブ行くぞ!!

親のカスタムフィールドの値に応じて、子のカスタムフィールドの表示/非表示を切り替え(Redmine View Customize Plugin)

下記問い合わせに対応して、親のカスタムフィールドの値に応じて、子のカスタムフィールドの表示/非表示を切り替えるサンプルを作成しました。

動作イメージ

https://github.com/onozaty/redmine-view-customize-scripts/raw/master/examples/0054.change_child_custom_field_visibility_by_parent_custom_filed/result.gif

コード内容は下記にまとめています。

チケット画面に返信ボタンを追加する(Redmine View Customize Plugin)

Redmine Advent Calendar 2022の9日目の記事になります。


先日の第23回redmine.tokyo勉強会のよこばさんの発表で話題になっていた返信ボタンプラグインですが、View customizeでも同じようなことができると思ったので、サンプルコードを書いてみました。

よこばさんの発表資料は下記になります。

コード内容

コード含め、設定内容等は下記のページにまとめています。

コードは下記のような感じです。

$(function () {
  const beforeAssignedTo = $('#issue_assigned_to_id').val();

  $('#content > .contextual a.icon-edit').each((index, element) => {
    const edit = $(element);
    const reply = $('<a>')
                    .addClass('icon icon-reply')
                    .text('Reply')
                    .attr('href', edit.attr('href'));
    edit.before(reply);

    reply.on('click', () => {
      let replyTo; 
      if (ViewCustomize.context.issue.lastUpdatedBy) {
        replyTo = ViewCustomize.context.issue.lastUpdatedBy.id;
      } else {
        replyTo = ViewCustomize.context.issue.author.id;
      }
      $('#issue_assigned_to_id').val(replyTo);

      showAndScrollTo('update', 'issue_notes');
      return false;
    });

    edit.on('click', () => {
      $('#issue_assigned_to_id').val(beforeAssignedTo);
    });
  });
});

最終更新者の情報があれば最終更新者を担当者へ、最終更新者の情報が無い(=新規に作られたまま)場合には作成者を担当者に設定する形にしています。 編集ボタンを押下時に元々の担当者に戻すようにしているのは、Reply→編集といった順番で押したときに担当者がReply時の状態のままになってしまうのを回避するためです。

それぞれの情報を画面から取れなくないのですが、めんどくさいコード(スクレイピング的なことしないとならない&Notesの表示順も気にする必要がある)になったので、ViewCustomize.contextとして取れるようにしました。(v3.2.0でリリース)

動作

Ichikawaさんが最終更新者になっている状態でReplyボタン押下した際の動きです。
担当者がYamadaさんからIchikawaさんに切り替わることがわかります。

https://raw.githubusercontent.com/onozaty/redmine-view-customize-scripts/master/examples/0053.add_reply_button/result.gif

Redmine issue assign notice plugin と組み合わせる

担当者が切り替わりながらやりとりが行われるため、担当者が変わった際に通知が飛ぶとさらに便利だと思います。

Redmine issue assign notice pluginを使うと、Slack, Rocket.Chat, Teams, Google Chat, Mattermost といったチャットツールに通知飛ばせるのでおすすめです!!

github.com

Redmine: View customize plugin の v3.2.0 をリリースしました

View customize plugin の v3.2.0 をリリースしました。

ViewCustomize.context に、チケットの作成者と最終更新者の情報を追加しています。

ViewCustomize = {
  "context": {
    "issue": {
      "id": 1,
      "author": {"id": 2, "name": "John Smith"},
      "lastUpdatedBy": {"id": 1, "name": "Redmine Admin"}
    }
  }
}

画面上から頑張って取れなくも無いのですが、かなり面倒なコードになるので、、
これ使ったサンプルコードも後ほど公開予定です。