Consolidate Cloudflare API in single module
This commit is contained in:
		
							
								
								
									
										38
									
								
								server/CloudflareAPI.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								server/CloudflareAPI.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | require('isomorphic-fetch') | ||||||
|  | const invariant = require('invariant') | ||||||
|  |  | ||||||
|  | const CloudflareEmail = process.env.CLOUDFLARE_EMAIL | ||||||
|  | const CloudflareKey = process.env.CLOUDFLARE_KEY | ||||||
|  |  | ||||||
|  | invariant( | ||||||
|  |   CloudflareEmail, | ||||||
|  |   'Missing the $CLOUDFLARE_EMAIL environment variable' | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | invariant( | ||||||
|  |   CloudflareKey, | ||||||
|  |   'Missing the $CLOUDFLARE_KEY environment variable' | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | function get(path, headers) { | ||||||
|  |   return fetch(`https://api.cloudflare.com/client/v4${path}`, { | ||||||
|  |     method: 'GET', | ||||||
|  |     headers: Object.assign({}, headers, { | ||||||
|  |       'X-Auth-Email': CloudflareEmail, | ||||||
|  |       'X-Auth-Key': CloudflareKey | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function getJSON(path, headers) { | ||||||
|  |   return get(path, headers).then(function (res) { | ||||||
|  |     return res.json() | ||||||
|  |   }).then(function (data) { | ||||||
|  |     return data.result | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | module.exports = { | ||||||
|  |   get, | ||||||
|  |   getJSON | ||||||
|  | } | ||||||
| @ -1,4 +1,3 @@ | |||||||
| require('isomorphic-fetch') |  | ||||||
| const parseURL = require('url').parse | const parseURL = require('url').parse | ||||||
| const invariant = require('invariant') | const invariant = require('invariant') | ||||||
| const gunzip = require('gunzip-maybe') | const gunzip = require('gunzip-maybe') | ||||||
| @ -7,30 +6,21 @@ const redis = require('redis') | |||||||
| const startOfDay = require('date-fns/start_of_day') | const startOfDay = require('date-fns/start_of_day') | ||||||
| const addDays = require('date-fns/add_days') | const addDays = require('date-fns/add_days') | ||||||
| const PackageURL = require('./PackageURL') | const PackageURL = require('./PackageURL') | ||||||
|  | const CloudflareAPI = require('./CloudflareAPI') | ||||||
| const { | const { | ||||||
|   createDayKey, |   createDayKey, | ||||||
|   createHourKey |   createHourKey | ||||||
| } = require('./StatsServer') | } = require('./StatsServer') | ||||||
|  |  | ||||||
| const CloudflareEmail = process.env.CLOUDFLARE_EMAIL |  | ||||||
| const CloudflareKey = process.env.CLOUDFLARE_KEY |  | ||||||
| const RedisURL = process.env.OPENREDIS_URL | const RedisURL = process.env.OPENREDIS_URL | ||||||
|  |  | ||||||
| invariant( |  | ||||||
|   CloudflareEmail, |  | ||||||
|   'Missing the $CLOUDFLARE_EMAIL environment variable' |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| invariant( |  | ||||||
|   CloudflareKey, |  | ||||||
|   'Missing the $CLOUDFLARE_KEY environment variable' |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| invariant( | invariant( | ||||||
|   RedisURL, |   RedisURL, | ||||||
|   'Missing the $OPENREDIS_URL environment variable' |   'Missing the $OPENREDIS_URL environment variable' | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | const db = redis.createClient(RedisURL) | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Domains we want to analyze. |  * Domains we want to analyze. | ||||||
|  */ |  */ | ||||||
| @ -44,27 +34,18 @@ const DomainNames = [ | |||||||
|  */ |  */ | ||||||
| const LogWindowSeconds = 30 | const LogWindowSeconds = 30 | ||||||
|  |  | ||||||
| const db = redis.createClient(RedisURL) | function getZones(domain) { | ||||||
|  |   return CloudflareAPI.getJSON(`/zones?name=${domain}`) | ||||||
| const getZones = (domain) => |  | ||||||
|   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(data => data.result) |  | ||||||
|  |  | ||||||
| const getLogs = (zoneId, startTime, endTime) => | function getLogs(zoneId, startTime, endTime) { | ||||||
|   fetch(`https://api.cloudflare.com/client/v4/zones/${zoneId}/logs/requests?start=${startTime}&end=${endTime}`, { |   return CloudflareAPI.get( | ||||||
|     method: 'GET', |     `/zones/${zoneId}/logs/requests?start=${startTime}&end=${endTime}`, | ||||||
|     headers: { |     { 'Accept-Encoding': 'gzip' } | ||||||
|       'X-Auth-Email': CloudflareEmail, |   ).then(function (res) { | ||||||
|       'X-Auth-Key': CloudflareKey, |     return res.body.pipe(gunzip()) | ||||||
|       'Accept-Encoding': 'gzip' |   }) | ||||||
| } | } | ||||||
|   }).then(res => res.body.pipe(gunzip())) |  | ||||||
|  |  | ||||||
| const toSeconds = (millis) => | const toSeconds = (millis) => | ||||||
|   Math.floor(millis / 1000) |   Math.floor(millis / 1000) | ||||||
|  | |||||||
| @ -1,32 +1,22 @@ | |||||||
| require('isomorphic-fetch') |  | ||||||
| const redis = require('redis') | const redis = require('redis') | ||||||
| const addDays = require('date-fns/add_days') | const addDays = require('date-fns/add_days') | ||||||
| const invariant = require('invariant') | const invariant = require('invariant') | ||||||
|  | const CloudflareAPI = require('./CloudflareAPI') | ||||||
| const { | const { | ||||||
|   createDayKey, |   createDayKey, | ||||||
|   createHourKey, |   createHourKey, | ||||||
|   createMinuteKey |   createMinuteKey | ||||||
| } = require('./StatsServer') | } = require('./StatsServer') | ||||||
|  |  | ||||||
| const CloudflareEmail = process.env.CLOUDFLARE_EMAIL |  | ||||||
| const CloudflareKey = process.env.CLOUDFLARE_KEY |  | ||||||
| const RedisURL = process.env.OPENREDIS_URL | const RedisURL = process.env.OPENREDIS_URL | ||||||
|  |  | ||||||
| invariant( |  | ||||||
|   CloudflareEmail, |  | ||||||
|   'Missing the $CLOUDFLARE_EMAIL environment variable' |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| invariant( |  | ||||||
|   CloudflareKey, |  | ||||||
|   'Missing the $CLOUDFLARE_KEY environment variable' |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| invariant( | invariant( | ||||||
|   RedisURL, |   RedisURL, | ||||||
|   'Missing the $OPENREDIS_URL environment variable' |   'Missing the $OPENREDIS_URL environment variable' | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | const db = redis.createClient(RedisURL) | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Domains we want to analyze. |  * Domains we want to analyze. | ||||||
|  */ |  */ | ||||||
| @ -35,27 +25,13 @@ const DomainNames = [ | |||||||
|   'npmcdn.com' |   'npmcdn.com' | ||||||
| ] | ] | ||||||
|  |  | ||||||
| const db = redis.createClient(RedisURL) | function getZones(domain) { | ||||||
|  |   return CloudflareAPI.getJSON(`/zones?name=${domain}`) | ||||||
| const getZones = (domain) => |  | ||||||
|   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(data => data.result) |  | ||||||
|  |  | ||||||
| const getZoneAnalyticsDashboard = (zoneId, since) => | function getZoneAnalyticsDashboard(zoneId, since) { | ||||||
|   fetch(`https://api.cloudflare.com/client/v4/zones/${zoneId}/analytics/dashboard?since=${since}&continuous=true`, { |   return CloudflareAPI.getJSON(`/zones/${zoneId}/analytics/dashboard?since=${since}&continuous=true`) | ||||||
|     method: 'GET', |  | ||||||
|     headers: { |  | ||||||
|       'X-Auth-Email': CloudflareEmail, |  | ||||||
|       'X-Auth-Key': CloudflareKey |  | ||||||
| } | } | ||||||
|   }).then(res => res.json()) |  | ||||||
|     .then(data => data.result) |  | ||||||
|  |  | ||||||
| const oneSecond = 1000 | const oneSecond = 1000 | ||||||
| const oneMinute = oneSecond * 60 | const oneMinute = oneSecond * 60 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user