ヌーラボ backlogエンタープライズで最近アクセスしていないユーザーの一覧を取得する。

backlogエンタープライズはユーザー数による課金になっているので、アクセスしていないユーザーについては削除を行いたい場合があります。 ただ、backlogのAPIは貧弱で、画面からは最終ログイン日時が取れるのにAPIからは最終ログイン日時が取れない、APIを使用して取得できるユーザーのアクティビティ情報は自分が参加しているプロジェクトに参加しているユーザーしか取れない等問題があって、使い物にならないので直接DBにSQLを発行します。

データベースへの接続方法はエンタープライズのインストール時に作成した設定ファイルを参照すればわかるので、DBには接続してSQLを発行できる前提で話をします。

なお、完全にダーティーハックの世界だし、ヌーラボのbacklogはテーブル設計については公開していないので、正しいかどうかの保証はありません。 また、gitの読み取り専用ユーザーとして運用している場合、APIの読み取りのみ使用しているユーザーについては調べがつかなかったので、CIで自動的に何かやってる場合は注意が必要です。 gitにコミットをしている場合は課題IDを入れてれば大丈夫(なはず)。

以下の2つのSQLを発行します。

//最近作られたわけではない1回もログインしていないユーザーの一覧
select id, user_id, last_login_time from users 
where last_login_time is null and created < date_sub(now(), interval 10 day) and disabled = '0' order by user_id asc;

//最近1年にログインしてない、もしくはアクティビティがないユーザー
select id, user_id, last_login_time from users 
where last_login_time <= date_sub(now(), interval 1 year) and disabled = '0' and id not in (select user_id from  project_activity_notify where created > date_sub(now(), interval 1 year)) order by user_id asc;

後はAPI使って削除するだけ。 usersテーブルのIDとしてのuser_idとusersテーブルのuser_idが紛らわしいので注意してくださいね。