diff --git a/controllers/statsController.js b/helpers/statsHelpers.js similarity index 59% rename from controllers/statsController.js rename to helpers/statsHelpers.js index 68215767..9dc41645 100644 --- a/controllers/statsController.js +++ b/helpers/statsHelpers.js @@ -38,7 +38,7 @@ module.exports = { logger.error('Sequelize error >>', error); }); }, - sendGoogleAnalytics (action, headers, ip, originalUrl) { + sendGoogleAnalyticsEvent (action, headers, ip, originalUrl) { const visitorId = ip.replace(/\./g, '-'); const visitor = ua(googleApiKey, visitorId, { strictCidFormat: false, https: true }); let params; @@ -52,15 +52,6 @@ module.exports = { ul : headers['accept-language'], }; break; - case 'PUBLISH': - params = { - ec : 'publish', - ea : originalUrl, - uip: ip, - ua : headers['user-agent'], - ul : headers['accept-language'], - }; - break; default: break; } visitor.event(params, (err) => { @@ -69,40 +60,29 @@ module.exports = { } }); }, - getTrendingClaims (startDate) { - logger.debug('retrieving trending'); - return new Promise((resolve, reject) => { - // get the raw requests data - db.getTrendingFiles(startDate) - .then(fileArray => { - let claimsPromiseArray = []; - if (fileArray) { - fileArray.forEach(file => { - claimsPromiseArray.push(db.Claim.resolveClaim(file.name, file.claimId)); - }); - return Promise.all(claimsPromiseArray); - } - }) - .then(claimsArray => { - resolve(claimsArray); - }) - .catch(error => { - reject(error); - }); - }); - }, - getRecentClaims () { - logger.debug('retrieving most recent claims'); - return new Promise((resolve, reject) => { - // get the raw requests data - db.File.getRecentClaims() - .then(results => { - resolve(results); - }) - .catch(error => { - logger.error('sequelize error', error); - reject(error); - }); + sendGoogleAnalyticsTiming (action, headers, ip, originalUrl, startTime, endTime) { + const visitorId = ip.replace(/\./g, '-'); + const visitor = ua(googleApiKey, visitorId, { strictCidFormat: false, https: true }); + const publishDurration = endTime - startTime; + let params; + switch (action) { + case 'PUBLISH': + params = { + userTimingCategory : 'lbrynet', + userTimingVariableName: 'publish', + userTimingTime : publishDurration, + uip : ip, + ua : headers['user-agent'], + ul : headers['accept-language'], + }; + break; + default: break; + } + visitor.timing(params, (err) => { + if (err) { + logger.error('Google Analytics Event Error >>', err); + } + logger.info(`publish completed successfully in ${publishDurration}ms`); }); }, }; diff --git a/routes/api-routes.js b/routes/api-routes.js index bd9ac3e1..c22f19cb 100644 --- a/routes/api-routes.js +++ b/routes/api-routes.js @@ -7,6 +7,7 @@ const { checkClaimNameAvailability, checkChannelAvailability, publish } = requir const { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js'); const { createPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, parsePublishApiChannel } = require('../helpers/publishHelpers.js'); const errorHandlers = require('../helpers/errorHandlers.js'); +const { sendGoogleAnalyticsTiming } = require('../helpers/statsHelpers.js'); const { authenticateIfNoUserToken } = require('../auth/authentication.js'); function addGetResultsToFileData (fileInfo, getResult) { @@ -124,9 +125,11 @@ module.exports = (app) => { }); }); // route to run a publish request on the daemon - app.post('/api/claim-publish', multipartMiddleware, ({ body, files, ip, originalUrl, user }, res) => { + app.post('/api/claim-publish', multipartMiddleware, ({ body, files, headers, ip, originalUrl, user }, res) => { logger.debug('api/claim-publish body:', body); logger.debug('api/claim-publish files:', files); + const publishStartTime = Date.now(); + logger.debug('publish request started @', publishStartTime); let name, fileName, filePath, fileType, nsfw, license, title, description, thumbnail, channelName, channelPassword; // validate the body and files of the request try { @@ -168,6 +171,9 @@ module.exports = (app) => { lbryTx: result, }, }); + const publishEndTime = Date.now(); + logger.debug('publish request completed @', publishEndTime); + sendGoogleAnalyticsTiming('PUBLISH', headers, ip, originalUrl, publishStartTime, publishEndTime); }) .catch(error => { errorHandlers.handleApiError(originalUrl, ip, error, res); diff --git a/views/partials/maintenanceBanner.handlebars b/views/partials/maintenanceBanner.handlebars new file mode 100644 index 00000000..2adb7536 --- /dev/null +++ b/views/partials/maintenanceBanner.handlebars @@ -0,0 +1,4 @@ +
+

Hi there! Spee.ch is currently undergoing maintenance, and as a result publishing may be disabled. Please visit our discord channel for updates.

+
diff --git a/views/partials/releaseBanner.handlebars b/views/partials/releaseBanner.handlebars deleted file mode 100644 index e23a60a5..00000000 --- a/views/partials/releaseBanner.handlebars +++ /dev/null @@ -1,3 +0,0 @@ -
- Hi there! You've stumbled upon the new version of Spee<h, launching soon! Send us your feedback in our discord -
\ No newline at end of file