feat: telemetry module
This commit is contained in:
		| @@ -37,19 +37,15 @@ module.exports = { | ||||
|  | ||||
|     appconfig = _.defaultsDeep(appconfig, appdata.defaults.config) | ||||
|  | ||||
|     // Check port | ||||
|  | ||||
|     if (appconfig.port < 1) { | ||||
|       appconfig.port = process.env.PORT || 80 | ||||
|     } | ||||
|  | ||||
|     // Convert booleans | ||||
|  | ||||
|     appconfig.public = (appconfig.public === true || _.toLower(appconfig.public) === 'true') | ||||
|  | ||||
|     // List authentication strategies | ||||
|     wiki.config = appconfig | ||||
|     wiki.data = appdata | ||||
|     wiki.version = require(path.join(wiki.ROOTPATH, 'package.json')).version | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|   | ||||
							
								
								
									
										63
									
								
								server/modules/telemetry.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								server/modules/telemetry.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| const axios = require('axios') | ||||
| const bugsnag = require('bugsnag') | ||||
| const path = require('path') | ||||
| const uuid = require('uuid/v4') | ||||
| const _ = require('lodash') | ||||
|  | ||||
| /* global wiki */ | ||||
|  | ||||
| module.exports = { | ||||
|   cid: '', | ||||
|   enabled: false, | ||||
|   init() { | ||||
|     this.cid = uuid() | ||||
|     bugsnag.register(wiki.data.telemetry.BUGSNAG_ID, { | ||||
|       appVersion: wiki.version, | ||||
|       autoNotify: false, | ||||
|       hostname: this.cid, | ||||
|       notifyReleaseStages: ['production'], | ||||
|       packageJSON: path.join(wiki.ROOTPATH, 'package.json'), | ||||
|       projectRoot: wiki.ROOTPATH, | ||||
|       useSSL: true | ||||
|     }) | ||||
|     bugsnag.onBeforeNotify((notification, originalError) => { | ||||
|       if (!this.enabled) { return false } | ||||
|     }) | ||||
|  | ||||
|     if (_.get(wiki.config, 'logging.telemetry', false) === true) { | ||||
|       this.enabled = true | ||||
|     } | ||||
|  | ||||
|     return this | ||||
|   }, | ||||
|   sendError(err) { | ||||
|     bugsnag.notify(err) | ||||
|   }, | ||||
|   sendEvent(eventCategory, eventAction, eventLabel) { | ||||
|     if (!this.enabled) { return false } | ||||
|     axios({ | ||||
|       method: 'post', | ||||
|       url: wiki.data.telemetry.GA_REMOTE, | ||||
|       headers: { | ||||
|         'Content-type': 'application/x-www-form-urlencoded' | ||||
|       }, | ||||
|       params: { | ||||
|         v: 1, // API version | ||||
|         tid: wiki.data.telemetry.GA_ID, // Tracking ID | ||||
|         aip: 1, // Anonymize IP | ||||
|         ds: 'server', // Data source | ||||
|         cid: this.cid, // Client ID | ||||
|         t: 'event', // Hit Type | ||||
|         ec: eventCategory, // Event Category | ||||
|         ea: eventAction, // Event Action | ||||
|         el: eventLabel // Event Label | ||||
|       } | ||||
|     }).then(resp => { | ||||
|       if (resp.status !== 200) { | ||||
|         wiki.logger.warn('Unable to send analytics telemetry request.') | ||||
|       } | ||||
|     }, err => { | ||||
|       wiki.logger.warn('Unable to send analytics telemetry request.') | ||||
|     }) | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user