From 8c055477522c67613c2a7181c35bf69bd4ff6c6f Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Tue, 12 Oct 2021 20:49:41 +0200 Subject: [PATCH] Add Wakatime Fetch Stats --- app/Tasks/StatsTask.ts | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 app/Tasks/StatsTask.ts diff --git a/app/Tasks/StatsTask.ts b/app/Tasks/StatsTask.ts new file mode 100644 index 0000000..325c4d8 --- /dev/null +++ b/app/Tasks/StatsTask.ts @@ -0,0 +1,48 @@ +import Logger from "@ioc:Adonis/Core/Logger"; +import Env from "@ioc:Adonis/Core/Env"; +import axios from "axios"; +import DevelopmentHour from "App/Models/DevelopmentHour"; + +const MS = 1000 * 5 * 60 // 5 min +let taskId + +interface StatsResponse { + grand_total: { + total_seconds: number + } + range: { + date: string + } +} + +async function getDevelopmentHours(): Promise { + const response = await axios.get<{ data: StatsResponse[]}>(`https://wakatime.com/share/@${Env.get('WAKATIME_USER')}/${Env.get('WAKATIME_ID')}.json`) + if (response.status === 200) { + const mapped_stats = response.data.data.map((item: StatsResponse) => { + return { + seconds: item.grand_total.total_seconds, date: item.range.date + } + }) + + for (const data of mapped_stats) { + await DevelopmentHour.updateOrCreate({ + date: data.date.split('T')[0] + }, { + date: data.date.split('T')[0], + seconds: data.seconds + }) + } + } +} + +export async function Activate(): Promise { + Logger.info(`Starting task runner for getting development hours [every ${MS} ms]`) + await getDevelopmentHours() + taskId = setInterval(getDevelopmentHours, MS) + return +} + +export function ShutDown(): void { + clearInterval(taskId) + Logger.info(`Shutdown task runner for getting development hours`) +}