| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- const _ = require('lodash')
 
- const { createApolloFetch } = require('apollo-fetch')
 
- const Bugsnag = require('@bugsnag/js')
 
- const { v4: uuid } = require('uuid')
 
- const os = require('os')
 
- const fs = require('fs-extra')
 
- /* global WIKI */
 
- module.exports = {
 
-   enabled: false,
 
-   init() {
 
-     Bugsnag.start({
 
-       apiKey: WIKI.data.telemetry.BUGSNAG_ID,
 
-       appType: 'server',
 
-       appVersion: WIKI.version,
 
-       autoDetectErrors: false,
 
-       autoTrackSessions: false,
 
-       hostname: _.get(WIKI.config, 'telemetry.clientId', uuid()),
 
-       enabledReleaseStages: ['production'],
 
-       releaseStage: WIKI.IS_DEBUG ? 'development' : 'production',
 
-       projectRoot: WIKI.ROOTPATH,
 
-       logger: null,
 
-       onError: (report) => {
 
-         if (!WIKI.telemetry.enabled) { return false }
 
-       }
 
-     })
 
-     WIKI.telemetry = this
 
-     if (_.get(WIKI.config, 'telemetry.isEnabled', false) === true && WIKI.config.offline !== true) {
 
-       this.enabled = true
 
-       this.sendInstanceEvent('STARTUP')
 
-     }
 
-   },
 
-   sendError(err) {
 
-     Bugsnag.notify(err)
 
-   },
 
-   sendEvent(eventCategory, eventAction, eventLabel) {
 
-     // TODO
 
-   },
 
-   async sendInstanceEvent(eventType) {
 
-     if (WIKI.devMode) { return }
 
-     try {
 
-       const apollo = createApolloFetch({
 
-         uri: WIKI.config.graphEndpoint
 
-       })
 
-       // Platform detection
 
-       let platform = 'LINUX'
 
-       let isDockerized = false
 
-       let osname = `${os.type()} ${os.release()}`
 
-       switch (os.platform()) {
 
-         case 'win32':
 
-           platform = 'WINDOWS'
 
-           break
 
-         case 'darwin':
 
-           platform = 'MACOS'
 
-           break
 
-         default:
 
-           platform = 'LINUX'
 
-           isDockerized = await fs.pathExists('/.dockerenv')
 
-           if (isDockerized) {
 
-             osname = 'Docker'
 
-           }
 
-           break
 
-       }
 
-       // DB Version detection
 
-       let dbVersion = 'Unknown'
 
-       switch (WIKI.config.db.type) {
 
-         case 'mariadb':
 
-         case 'mysql':
 
-           const resultMYSQL = await WIKI.models.knex.raw('SELECT VERSION() as version;')
 
-           dbVersion = _.get(resultMYSQL, '[0][0].version', 'Unknown')
 
-           break
 
-         case 'mssql':
 
-           const resultMSSQL = await WIKI.models.knex.raw('SELECT @@VERSION as version;')
 
-           dbVersion = _.get(resultMSSQL, '[0].version', 'Unknown')
 
-           break
 
-         case 'postgres':
 
-           dbVersion = _.get(WIKI.models, 'knex.client.version', 'Unknown')
 
-           break
 
-         case 'sqlite':
 
-           dbVersion = _.get(WIKI.models, 'knex.client.driver.VERSION', 'Unknown')
 
-           break
 
-       }
 
-       let arch = os.arch().toUpperCase()
 
-       if (['ARM', 'ARM64', 'X32', 'X64'].indexOf(arch) < 0) {
 
-         arch = 'OTHER'
 
-       }
 
-       // Send Event
 
-       const respStrings = await apollo({
 
-         query: `mutation (
 
-           $version: String!
 
-           $platform: TelemetryPlatform!
 
-           $os: String!
 
-           $architecture: TelemetryArchitecture!
 
-           $dbType: TelemetryDBType!
 
-           $dbVersion: String!
 
-           $nodeVersion: String!
 
-           $cpuCores: Int!
 
-           $ramMBytes: Int!,
 
-           $clientId: String!,
 
-           $event: TelemetryInstanceEvent!
 
-           ) {
 
-           telemetry {
 
-             instance(
 
-               version: $version
 
-               platform: $platform
 
-               os: $os
 
-               architecture: $architecture
 
-               dbType: $dbType
 
-               dbVersion: $dbVersion
 
-               nodeVersion: $nodeVersion
 
-               cpuCores: $cpuCores
 
-               ramMBytes: $ramMBytes
 
-               clientId: $clientId
 
-               event: $event
 
-             ) {
 
-               responseResult {
 
-                 succeeded
 
-                 errorCode
 
-                 slug
 
-                 message
 
-               }
 
-             }
 
-           }
 
-         }`,
 
-         variables: {
 
-           version: WIKI.version,
 
-           platform,
 
-           os: osname,
 
-           architecture: arch,
 
-           dbType: WIKI.config.db.type.toUpperCase(),
 
-           dbVersion,
 
-           nodeVersion: process.version.substr(1),
 
-           cpuCores: os.cpus().length,
 
-           ramMBytes: Math.round(os.totalmem() / 1024 / 1024),
 
-           clientId: WIKI.config.telemetry.clientId,
 
-           event: eventType
 
-         }
 
-       })
 
-       const telemetryResponse = _.get(respStrings, 'data.telemetry.instance.responseResult', { succeeded: false, message: 'Unexpected Error' })
 
-       if (!telemetryResponse.succeeded) {
 
-         WIKI.logger.warn('Failed to send instance telemetry: ' + telemetryResponse.message)
 
-       } else {
 
-         WIKI.logger.info('Telemetry is active: [ OK ]')
 
-       }
 
-     } catch (err) {
 
-       WIKI.logger.warn(err)
 
-     }
 
-   },
 
-   generateClientId() {
 
-     _.set(WIKI.config, 'telemetry.clientId', uuid())
 
-     return WIKI.config.telemetry.clientId
 
-   }
 
- }
 
 
  |