const Beeminder = require('./Beeminder.js') const Marvin = require('./Marvin.js') const fs = require('fs') const BEEMINDER_TOKEN = fs.readFileSync("./beeminder-token", 'utf8').trim() const {DateTime, Interval, Duration} = require('luxon') function sleep(n) { return new Promise((resolve, reject) => { setTimeout(resolve, n) }) } function dateToInterval(d="today") { const now = DateTime.local() let retDate if (d == "today") { retDate = now.startOf('day') } else if (d == "yesterday") { retDate = now.startOf('day').minus({days: 1}) } else { retDate = DateTime.fromISO(d) } return Interval.fromDateTimes(retDate.startOf('day'), retDate.endOf('day')) } if (require.main === module) { (async function() { const m = new Marvin() const interval = dateToInterval(process.argv.length > 2 ? process.argv[2] : 'today') const tasks = await (m.root.category('Tweag').then(tweag => tweag.tasksOverlapping(interval))) const value = Duration.sum(tasks.map(task => task.timeSpentOn(interval))).as('hours') const b = new Beeminder(BEEMINDER_TOKEN) const goal = b.user("me").goal("loonslaven") const daystamp = interval.start.toFormat('yyyyMMdd') const post_data = { daystamp, value, requestid: daystamp, comment: "from marvin" } console.log(post_data) console.log(await goal.create_datapoint(post_data)) await sleep(2000) console.log((await goal.info()).safesum) })() }