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/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
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
リポジトリ
おわりに
アプリを再起動して、同期(Pull-to-Refresh)を何回も試したら成功することがわかったので必要なくなったかも
Rubyでサクッと作ったけど、どうせなら勉強のためにDenoで作ればよかったな
workflow_dispatch:
で画面から実行できるという知見を得たから良いとしよう