marvin-minder/index.js

49 lines
1.6 KiB
JavaScript

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)
})()
}