sources/page-opened/page-opened.mjs
import analytics from "../../google_analytics.app.mjs"; import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; import utils from "../../common/utils.mjs"; export default { key: "google_analytics-page-opened", version: "0.1.1", name: "New Page Opened", description: "Emit new event when a page is viewed", type: "source", dedupe: "unique", props: { analytics, db: "$.service.db", timer: { type: "$.interface.timer", default: { intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, }, }, viewId: { propDefinition: [ analytics, "viewId", ], }, }, hooks: { async deploy() { const startDate = utils.monthAgo(); this._setStartDate(startDate); await this.processEvent(); }, }, methods: { _getPageViews() { return this.db.get("pageViews"); }, _setPageViews(pageViews) { this.db.set("pageViews", pageViews); }, _getStartDate() { return this.db.get("startDate"); }, _setStartDate(startDate) { this.db.set("startDate", startDate); }, generateMeta(pageViews, startDate) { const ts = Date.now(); return { id: ts, summary: `${pageViews} page views since ${startDate}`, ts, }; }, async processEvent() { const startDate = this._getStartDate(); const data = { resource: { reportRequests: [ { viewId: this.viewId, dateRanges: [ { startDate, endDate: "today", }, ], metrics: [ { expression: "ga:pageviews", }, ], }, ], }, }; const { data: report } = await this.analytics.queryReports(data); const previousPageViews = this._getPageViews(); const pageViews = report.reports[0].data.totals[0].values[0]; if (!previousPageViews || pageViews > previousPageViews) { this._setPageViews(pageViews); const meta = this.generateMeta(pageViews, startDate); this.$emit(report, meta); } }, }, async run() { await this.processEvent(); }, };