高木のブログ

Togglのデータがちゃんと同期されているかチェックする仕組みを作った

2022/01/16

意識高い系エンジニアなので、自己研鑽に使った時間を Toggl で記録して、Pixela で可視化している
しかし、TogglのAPIで値が取れず、グラフの更新ができていないことがある
これはTogglのiPhoneアプリが、Togglのサーバーとデータ同期できていないことが原因になっている(同期がうまくいかない原因はわからない)

一旦ログアウトしてログインし直すと同期できるようになるんだけど、同期されていない分は消えてしまう
リカバリーは、ログアウトする前にスクショを取ってバックアップして、手動で入力し直すというアナログな方法を取っている

同期できてないことに気付くのが遅れれば遅れるほどリカバリーが大変になるので、早めに気付きたい
ということで、GitHub Actionsを使って気付ける仕組みを作った

実装

Rubyスクリプト

直近3日のデータを見て、何もなかったらコケるようにした雑実装
コケたらGitHub Actionsのメール通知機能で気が付ける仕組み

app.rb
require 'dotenv/load'
require 'base64'
require 'faraday'
require 'json'

API_ENDPOINT = 'https://api.track.toggl.com/reports/api/v2'
USER_AGENT = 'toggl-sync-status-check (https://github.com/ytkg/toggl-sync-status-check)'

url = "#{API_ENDPOINT}/summary"
params = {
  user_agent: USER_AGENT,
  workspace_id: ENV['TOGGL_WORKSPACE_ID'],
  since: Date.today - 2,
  until: Date.today
}
headers = { 'Authorization' => "Basic #{Base64.encode64("#{ENV['TOGGL_API_TOKEN']}:api_token")}" }
response = Faraday.get(url, params, headers)

raise 'No data.' if JSON.parse(response.body, symbolize_names: true)[:data].empty?

p :ok

GitHub Actions ワークフロー

毎日0時0分に動くようにした
0時に実行すると当日分はデータがないので、チェックしてるのは実質2日分か

.github/workflows/ruby.yml
name: Ruby

on:
  workflow_dispatch:
  schedule:
    - cron:  '0 0 * * *'
jobs:
  ruby:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/[email protected]
    - name: Set up Ruby
      uses: ruby/setup-[email protected]
      with:
        ruby-version: 2.7
    - name: Install dependencies
      run: bundle install
    - name: Run script
      env:
        TOGGL_API_TOKEN: ${{ secrets.TOGGL_API_TOKEN }}
        TOGGL_WORKSPACE_ID: ${{ secrets.TOGGL_WORKSPACE_ID }}
      run: bundle exec ruby app.rb

リポジトリ

ytkg/toggl-sync-status-check - GitHub

おわりに

アプリを再起動して、同期(Pull-to-Refresh)を何回も試したら成功することがわかったので必要なくなったかも
Rubyでサクッと作ったけど、どうせなら勉強のためにDenoで作ればよかったな
workflow_dispatch: で画面から実行できるという知見を得たから良いとしよう


ytkg

Written by ytkg, Twitter, GitHub