This commit is contained in:
		
						commit
						c0192129da
					
				|  | @ -146,3 +146,24 @@ export const newEndpoint = (endpointOpts: EndpointOptions, fn: Handler) => { | ||||||
|     }, |     }, | ||||||
|   } as EndpointDefinition |   } as EndpointDefinition | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export const newEndpointNoAuth = ( | ||||||
|  |   endpointOpts: EndpointOptions, | ||||||
|  |   fn: (req: Request) => Promise<Output> | ||||||
|  | ) => { | ||||||
|  |   const opts = Object.assign({}, DEFAULT_OPTS, endpointOpts) | ||||||
|  |   return { | ||||||
|  |     opts, | ||||||
|  |     handler: async (req: Request, res: Response) => { | ||||||
|  |       log(`${req.method} ${req.url} ${JSON.stringify(req.body)}`) | ||||||
|  |       try { | ||||||
|  |         if (opts.method !== req.method) { | ||||||
|  |           throw new APIError(405, `This endpoint supports only ${opts.method}.`) | ||||||
|  |         } | ||||||
|  |         res.status(200).json(await fn(req)) | ||||||
|  |       } catch (e) { | ||||||
|  |         writeResponseError(e, res) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   } as EndpointDefinition | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ export * from './on-create-user' | ||||||
| export * from './on-create-bet' | export * from './on-create-bet' | ||||||
| export * from './on-create-comment-on-contract' | export * from './on-create-comment-on-contract' | ||||||
| export * from './on-view' | export * from './on-view' | ||||||
| export * from './update-metrics' | export { updateMetrics } from './update-metrics' | ||||||
| export * from './update-stats' | export * from './update-stats' | ||||||
| export * from './update-loans' | export * from './update-loans' | ||||||
| export * from './backup-db' | export * from './backup-db' | ||||||
|  | @ -77,6 +77,7 @@ import { getcurrentuser } from './get-current-user' | ||||||
| import { acceptchallenge } from './accept-challenge' | import { acceptchallenge } from './accept-challenge' | ||||||
| import { createpost } from './create-post' | import { createpost } from './create-post' | ||||||
| import { savetwitchcredentials } from './save-twitch-credentials' | import { savetwitchcredentials } from './save-twitch-credentials' | ||||||
|  | import { updatemetrics } from './update-metrics' | ||||||
| 
 | 
 | ||||||
| const toCloudFunction = ({ opts, handler }: EndpointDefinition) => { | const toCloudFunction = ({ opts, handler }: EndpointDefinition) => { | ||||||
|   return onRequest(opts, handler as any) |   return onRequest(opts, handler as any) | ||||||
|  | @ -106,6 +107,7 @@ const getCurrentUserFunction = toCloudFunction(getcurrentuser) | ||||||
| const acceptChallenge = toCloudFunction(acceptchallenge) | const acceptChallenge = toCloudFunction(acceptchallenge) | ||||||
| const createPostFunction = toCloudFunction(createpost) | const createPostFunction = toCloudFunction(createpost) | ||||||
| const saveTwitchCredentials = toCloudFunction(savetwitchcredentials) | const saveTwitchCredentials = toCloudFunction(savetwitchcredentials) | ||||||
|  | const updateMetricsFunction = toCloudFunction(updatemetrics) | ||||||
| 
 | 
 | ||||||
| export { | export { | ||||||
|   healthFunction as health, |   healthFunction as health, | ||||||
|  | @ -133,4 +135,5 @@ export { | ||||||
|   saveTwitchCredentials as savetwitchcredentials, |   saveTwitchCredentials as savetwitchcredentials, | ||||||
|   addCommentBounty as addcommentbounty, |   addCommentBounty as addcommentbounty, | ||||||
|   awardCommentBounty as awardcommentbounty, |   awardCommentBounty as awardcommentbounty, | ||||||
|  |   updateMetricsFunction as updatemetrics, | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,11 @@ | ||||||
| import * as functions from 'firebase-functions' | import * as functions from 'firebase-functions' | ||||||
| import * as admin from 'firebase-admin' | import * as admin from 'firebase-admin' | ||||||
| import { groupBy, isEmpty, keyBy, last, sortBy } from 'lodash' | import { groupBy, isEmpty, keyBy, last, sortBy } from 'lodash' | ||||||
|  | import fetch from 'node-fetch' | ||||||
|  | 
 | ||||||
| import { getValues, log, logMemory, writeAsync } from './utils' | import { getValues, log, logMemory, writeAsync } from './utils' | ||||||
| import { Bet } from '../../common/bet' | import { Bet } from '../../common/bet' | ||||||
| import { Contract, CPMM } from '../../common/contract' | import { Contract, CPMM } from '../../common/contract' | ||||||
| 
 |  | ||||||
| import { PortfolioMetrics, User } from '../../common/user' | import { PortfolioMetrics, User } from '../../common/user' | ||||||
| import { DAY_MS } from '../../common/util/time' | import { DAY_MS } from '../../common/util/time' | ||||||
| import { getLoanUpdates } from '../../common/loans' | import { getLoanUpdates } from '../../common/loans' | ||||||
|  | @ -20,13 +21,35 @@ import { | ||||||
| import { getProbability } from '../../common/calculate' | import { getProbability } from '../../common/calculate' | ||||||
| import { Group } from '../../common/group' | import { Group } from '../../common/group' | ||||||
| import { batchedWaitAll } from '../../common/util/promise' | import { batchedWaitAll } from '../../common/util/promise' | ||||||
|  | import { newEndpointNoAuth } from './api' | ||||||
|  | import { getFunctionUrl } from '../../common/api' | ||||||
| 
 | 
 | ||||||
| const firestore = admin.firestore() | const firestore = admin.firestore() | ||||||
| 
 | 
 | ||||||
| export const updateMetrics = functions | export const updateMetrics = functions.pubsub | ||||||
|   .runWith({ memory: '8GB', timeoutSeconds: 540 }) |   .schedule('every 15 minutes') | ||||||
|   .pubsub.schedule('every 15 minutes') |   .onRun(async () => { | ||||||
|   .onRun(updateMetricsCore) |     const response = await fetch(getFunctionUrl('updatemetrics'), { | ||||||
|  |       headers: { | ||||||
|  |         'Content-Type': 'application/json', | ||||||
|  |       }, | ||||||
|  |       method: 'POST', | ||||||
|  |       body: JSON.stringify({}), | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     const json = await response.json() | ||||||
|  | 
 | ||||||
|  |     if (response.ok) console.log(json) | ||||||
|  |     else console.error(json) | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  | export const updatemetrics = newEndpointNoAuth( | ||||||
|  |   { timeoutSeconds: 2000, memory: '8GiB', minInstances: 0 }, | ||||||
|  |   async (_req) => { | ||||||
|  |     await updateMetricsCore() | ||||||
|  |     return { success: true } | ||||||
|  |   } | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| export async function updateMetricsCore() { | export async function updateMetricsCore() { | ||||||
|   console.log('Loading users') |   console.log('Loading users') | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user