Files
medusa-store/packages/medusa-telemetry/src/store.js
Sebastian Rindom cfe19f7f9d feat: medusa-telemetry (#328)
* feat: adds a telemetry package to collect anonymous usage data

* fix: update telemetry host

* fix: adds medusa telemetry --disable

* fix: add tracking of link,login,new

* fix: interactively collect db credentials

* fix: require seed file

* fix: removes tracking from reporter
2021-08-05 12:23:05 +02:00

60 lines
1.2 KiB
JavaScript

import path from "path"
import Configstore from "configstore"
import InMemConfig from "./util/in-memory-config"
import OutboxStore from "./util/outbox-store"
import isTruthy from "./util/is-truthy"
class Store {
constructor() {
try {
this.config_ = new Configstore(`medusa`, {}, { globalConfigPath: true })
} catch (e) {
this.config_ = new InMemConfig()
}
const baseDir = path.dirname(this.config_.path)
this.outbox_ = new OutboxStore(baseDir)
this.disabled_ = isTruthy(process.env.MEDUSA_DISABLE_TELEMETRY)
}
getQueueSize() {
return this.outbox_.getSize()
}
getQueueCount() {
return this.outbox_.getCount()
}
addEvent(event) {
if (this.disabled_) {
return
}
const eventString = JSON.stringify(event)
return this.outbox_.appendToBuffer(eventString + `\n`)
}
async flushEvents(handler) {
return await this.outbox_.startFlushEvents(async eventData => {
const events = eventData
.split(`\n`)
.filter(e => e && e.length > 2)
.map(e => JSON.parse(e))
return await handler(events)
})
}
getConfig(path) {
return this.config_.get(path)
}
setConfig(path, val) {
return this.config_.set(path, val)
}
}
export default Store