diff --git a/scripts/show-log.js b/scripts/show-log.js index 366e951..8e8898e 100644 --- a/scripts/show-log.js +++ b/scripts/show-log.js @@ -5,39 +5,39 @@ const CloudflareEmail = process.env.CLOUDFLARE_EMAIL const CloudflareKey = process.env.CLOUDFLARE_KEY const RayID = process.argv[2] -invariant( - CloudflareEmail, - 'Missing the $CLOUDFLARE_EMAIL environment variable' -) +invariant(CloudflareEmail, 'Missing the $CLOUDFLARE_EMAIL environment variable') -invariant( - CloudflareKey, - 'Missing the $CLOUDFLARE_KEY environment variable' -) +invariant(CloudflareKey, 'Missing the $CLOUDFLARE_KEY environment variable') invariant( RayID, 'Missing the RAY_ID argument; use `heroku run node show-log.js RAY_ID`' ) -const getZones = (domain) => - fetch(`https://api.cloudflare.com/client/v4/zones?name=${domain}`, { +function getZones(domain) { + return fetch(`https://api.cloudflare.com/client/v4/zones?name=${domain}`, { method: 'GET', headers: { 'X-Auth-Email': CloudflareEmail, 'X-Auth-Key': CloudflareKey } - }).then(res => res.json()) + }) + .then(res => res.json()) .then(data => data.result) +} -const getLog = (zoneId, rayId) => - fetch(`https://api.cloudflare.com/client/v4/zones/${zoneId}/logs/requests/${rayId}`, { - method: 'GET', - headers: { - 'X-Auth-Email': CloudflareEmail, - 'X-Auth-Key': CloudflareKey +function getLog(zoneId, rayId) { + return fetch( + `https://api.cloudflare.com/client/v4/zones/${zoneId}/logs/requests/${rayId}`, + { + method: 'GET', + headers: { + 'X-Auth-Email': CloudflareEmail, + 'X-Auth-Key': CloudflareKey + } } - }).then(res => res.status === 404 ? 'NOT FOUND' : res.json()) + ).then(res => (res.status === 404 ? 'NOT FOUND' : res.json())) +} getZones('unpkg.com').then(zones => { getLog(zones[0].id, RayID).then(entry => { diff --git a/scripts/show-stats.js b/scripts/show-stats.js index 780a228..f4afd51 100644 --- a/scripts/show-stats.js +++ b/scripts/show-stats.js @@ -1,67 +1,57 @@ const subDays = require('date-fns/sub_days') const prettyBytes = require('pretty-bytes') const table = require('text-table') -const { - sumKeys, - sumTopScores, - createDayKey -} = require('../server/StatsServer') -const now = new Date +const StatsAPI = require('../server/StatsAPI') +const now = new Date() -const createRange = (start, end) => { +function createRange(start, end) { const range = [] - - while (start < end) - range.push(start++) - + while (start < end) range.push(start++) return range } -const createPastDays = (n) => - createRange(1, n + 1).map(days => subDays(now, days)).reverse() +function createPastDays(n) { + return createRange(1, n + 1) + .map(days => subDays(now, days)) + .reverse() +} const pastSevenDays = createPastDays(7) const pastThirtyDays = createPastDays(30) Promise.all([ - sumKeys(pastSevenDays.map(date => `stats-requests-${createDayKey(date)}`)), - sumKeys(pastSevenDays.map(date => `stats-bandwidth-${createDayKey(date)}`)), - sumKeys(pastThirtyDays.map(date => `stats-requests-${createDayKey(date)}`)), - sumKeys(pastThirtyDays.map(date => `stats-bandwidth-${createDayKey(date)}`)) + StatsAPI.sumKeys( + pastSevenDays.map(date => `stats-requests-${StatsAPI.createDayKey(date)}`) + ), + StatsAPI.sumKeys( + pastSevenDays.map(date => `stats-bandwidth-${StatsAPI.createDayKey(date)}`) + ), + StatsAPI.sumKeys( + pastThirtyDays.map(date => `stats-requests-${StatsAPI.createDayKey(date)}`) + ), + StatsAPI.sumKeys( + pastThirtyDays.map(date => `stats-bandwidth-${StatsAPI.createDayKey(date)}`) + ) ]).then(results => { console.log('\n## Summary') + console.log('Requests this week: %s', results[0].toLocaleString()) + console.log('Bandwidth this week: %s', prettyBytes(results[1])) + console.log('Requests this month: %s', results[2].toLocaleString()) + console.log('Bandwidth this month: %s', prettyBytes(results[3])) - console.log( - 'Requests this week: %s', - results[0].toLocaleString() - ) - - console.log( - 'Bandwidth this week: %s', - prettyBytes(results[1]) - ) - - console.log( - 'Requests this month: %s', - results[2].toLocaleString() - ) - - console.log( - 'Bandwidth this month: %s', - prettyBytes(results[3]) - ) - - sumTopScores(pastSevenDays.map(date => `stats-packageRequests-${createDayKey(date)}`)).then(topPackages => { + StatsAPI.sumTopScores( + pastSevenDays.map( + date => `stats-packageRequests-${StatsAPI.createDayKey(date)}` + ) + ).then(topPackages => { console.log('\n## Top Packages This Week') topPackages.forEach(result => { result[1] = result[1].toLocaleString() }) - console.log( - table(topPackages) - ) + console.log(table(topPackages)) process.exit() }) diff --git a/server/StatsServer.js b/server/StatsAPI.js similarity index 100% rename from server/StatsServer.js rename to server/StatsAPI.js diff --git a/server/createStatsServer.js b/server/createStatsServer.js index dc00a0e..37e477c 100644 --- a/server/createStatsServer.js +++ b/server/createStatsServer.js @@ -2,28 +2,32 @@ const express = require('express') const subDays = require('date-fns/sub_days') const startOfDay = require('date-fns/start_of_day') const startOfSecond = require('date-fns/start_of_second') -const StatsServer = require('./StatsServer') +const StatsAPI = require('./StatsAPI') function serveArbitraryStats(req, res) { const now = startOfSecond(new Date()) const since = req.query.since ? new Date(req.query.since) : subDays(now, 30) const until = req.query.until ? new Date(req.query.until) : now - if (isNaN(since.getTime())) + if (isNaN(since.getTime())) { return res.status(403).send({ error: '?since is not a valid date' }) + } - if (isNaN(until.getTime())) + if (isNaN(until.getTime())) { return res.status(403).send({ error: '?until is not a valid date' }) + } - if (until <= since) + if (until <= since) { return res .status(403) .send({ error: '?until date must come after ?since date' }) + } - if (until > now) + if (until > now) { return res.status(403).send({ error: '?until must be a date in the past' }) + } - StatsServer.getStats(since, until, function(error, stats) { + StatsAPI.getStats(since, until, (error, stats) => { if (error) { console.error(error) res.status(500).send({ error: 'Unable to fetch stats' }) @@ -42,7 +46,7 @@ function servePastDaysStats(days, req, res) { const until = startOfDay(new Date()) const since = subDays(until, days) - StatsServer.getStats(since, until, function(error, stats) { + StatsAPI.getStats(since, until, (error, stats) => { if (error) { console.error(error) res.status(500).send({ error: 'Unable to fetch stats' }) diff --git a/server/ingestLogs.js b/server/ingestLogs.js index 309a215..55cdd7b 100644 --- a/server/ingestLogs.js +++ b/server/ingestLogs.js @@ -3,9 +3,10 @@ const startOfDay = require('date-fns/start_of_day') const addDays = require('date-fns/add_days') const validateNPMPackageName = require('validate-npm-package-name') const parsePackageURL = require('./utils/parsePackageURL') -const cf = require('./CloudflareAPI') +const CloudflareAPI = require('./CloudflareAPI') +const StatsAPI = require('./StatsAPI') + const db = require('./RedisClient') -const { createDayKey } = require('./StatsServer') /** * Domains we want to analyze. @@ -55,7 +56,7 @@ function computeCounters(stream) { const nextDay = startOfDay(addDays(date, 1)) const sevenDaysLater = getSeconds(addDays(nextDay, 7)) const thirtyDaysLater = getSeconds(addDays(nextDay, 30)) - const dayKey = createDayKey(date) + const dayKey = StatsAPI.createDayKey(date) const clientRequest = entry.clientRequest const edgeResponse = entry.edgeResponse @@ -138,7 +139,7 @@ function ingestLogs(zone, startSeconds, endSeconds) { const startFetchTime = Date.now() resolve( - cf.getLogs(zone.id, startSeconds, endSeconds).then(stream => { + CloudflareAPI.getLogs(zone.id, startSeconds, endSeconds).then(stream => { const endFetchTime = Date.now() console.log( @@ -226,7 +227,7 @@ function startZone(zone) { takeATurn() } -Promise.all(DomainNames.map(cf.getZones)).then(results => { +Promise.all(DomainNames.map(CloudflareAPI.getZones)).then(results => { const zones = results.reduce((memo, zones) => { return memo.concat(zones) })