そーだいなるらくがき帳

そーだいが自由気侭に更新します。

Mackerelを使ってタスクの見える化をした話

f:id:Soudai:20171012181154p:plain

MackerelチームのCREはTrelloを使ってタスク管理をしている。
なので最近はTrelloのAPIを使って業務効率の改善などやっている。

soudai.hatenablog.com

上記のような定例作業意外にもメールを返すことなど多いのでそういう細かいタスクもTrelloに登録するスタイル。
そうするとタスクの増える時間帯と消化が捗る時間帯、一日の対応量などが見たくなる。
もちろん、Trelloに課金するとそういった機能もあるのだけど折角なのでMackerelのサービスメトリックに投稿してみた。
例の如くGoogle Apps Scriptで送っている。
GASは定期実行出来るので取り敢えずは5分に一回登録してる。
ソースコードはこちら。

var scriptProp =  PropertiesService.getScriptProperties().getProperties();
var trelloKey = scriptProp.TRELLO_API_KEY;
var trelloToken = scriptProp.TRELLO_TOKEN;
var trelloTodoListId = scriptProp.TRELLO_TODO_LIST_ID;
var trelloDoneListId = scriptProp.TRELLO_DONE_LIST_ID;
var trelloBaseURL = scriptProp.TRELLO_BASE_URL;
var mackerelApiKey = scriptProp.MACKEREL_API_KEY;
var trelloIdMembers = scriptProp.TRELLO_ID_MEMBER;
var serviceName = scriptProp.SERVICE_NAME;

function main() {

  var epoch = Date.now() / 1000;

  var TrelloTodo = getTrelloCardCount(trelloTodoListId);  
  var TrelloDone = getTrelloCardCount(trelloDoneListId);

  var todoCount = Object.keys(JSON.parse(TrelloTodo)).length;
  var doneCount = Object.keys(JSON.parse(TrelloDone)).length;

  var payload = [
    {"name" : "Trello.todo", "time" : epoch, "value" : todoCount},
    {"name" : "Trello.done", "time" : epoch, "value" : doneCount}
  ];

  var mackerelPostRes = postMackerelServiceMetric(mackerelApiKey, serviceName, payload);
  Logger.log(mackerelPostRes)
}

function postMackerelServiceMetric(apiKey, serviceName, payload) {

  var url = "https://mackerel.io/api/v0/services/" + serviceName + "/tsdb";
  return UrlFetchApp.fetch(
    url,
    {
    "contentType" : "application/json",
    "method" : "post",
    "headers" : {
      "X-Api-Key" : apiKey
    },
    "payload" : JSON.stringify(payload),
    "muteHttpExceptions" : true
    }
  );
}


function getTrelloCardCount(trelloListId) {
  
  var url = trelloBaseURL + 'lists/' + trelloListId + '/cards/?fields=name&key=' + trelloKey + '&token=' + trelloToken;

  var options = {
    'method' : 'get',
    'muteHttpExceptions' : true
  }

  return UrlFetchApp.fetch(url, options);
}

関数で分けてるのでGAS経由でMackerelにサービスメトリックを投げたい人とかの参考になれば。
Mackerelに投げるメリットは以下のような物がある。

  • タスクが溜まってたらアラート出せる
  • 簡単に差分表示と切り替えれる
  • グラフの扱いが簡単
  • サービスメトリックはフリープランでも使える!

mackerel.io

ちょっと mackerel-client-gas はあってもいいかなーって気持ちにはなったので気が向いたら作る。