fix: use new telemetry endpoint
This commit is contained in:
parent
14beb949d9
commit
71be4660bf
@ -1,9 +1,9 @@
|
||||
const _ = require('lodash')
|
||||
const request = require('request-promise')
|
||||
const { createApolloFetch } = require('apollo-fetch')
|
||||
const bugsnag = require('@bugsnag/node')
|
||||
const { v4: uuid } = require('uuid')
|
||||
const qs = require('querystring')
|
||||
const os = require('os')
|
||||
const fs = require('fs-extra')
|
||||
|
||||
/* global WIKI */
|
||||
|
||||
@ -30,67 +30,127 @@ module.exports = {
|
||||
|
||||
if (_.get(WIKI.config, 'telemetry.isEnabled', false) === true && WIKI.config.offline !== true) {
|
||||
this.enabled = true
|
||||
this.sendOSInfo()
|
||||
this.sendInstanceEvent('STARTUP')
|
||||
}
|
||||
},
|
||||
sendOSInfo() {
|
||||
this.sendBatchEvents([
|
||||
{
|
||||
eventCategory: 'node-version',
|
||||
eventAction: process.version
|
||||
},
|
||||
{
|
||||
eventCategory: 'os-platform',
|
||||
eventAction: os.platform()
|
||||
},
|
||||
{
|
||||
eventCategory: 'cpu-cores',
|
||||
eventAction: os.cpus().length
|
||||
},
|
||||
{
|
||||
eventCategory: 'db-type',
|
||||
eventAction: WIKI.config.db.type
|
||||
}
|
||||
])
|
||||
},
|
||||
sendError(err) {
|
||||
this.client.notify(err)
|
||||
},
|
||||
sendEvent(eventCategory, eventAction, eventLabel) {
|
||||
this.sendBatchEvents([{
|
||||
eventCategory,
|
||||
eventAction,
|
||||
eventLabel
|
||||
}])
|
||||
// TODO
|
||||
},
|
||||
sendBatchEvents(events) {
|
||||
if (!this.enabled || WIKI.IS_DEBUG) { return false }
|
||||
request({
|
||||
method: 'POST',
|
||||
url: WIKI.data.telemetry.GA_REMOTE,
|
||||
headers: {
|
||||
'Content-type': 'text/plain'
|
||||
},
|
||||
body: events.map(ev => {
|
||||
return qs.stringify({
|
||||
v: 1, // API version
|
||||
tid: WIKI.data.telemetry.GA_ID, // Tracking ID
|
||||
aip: 1, // Anonymize IP
|
||||
ds: 'server', // Data source
|
||||
cid: WIKI.telemetry.cid, // Client ID
|
||||
t: 'event', // Hit Type
|
||||
ec: ev.eventCategory, // Event Category
|
||||
ea: ev.eventAction, // Event Action
|
||||
el: ev.eventLabel // Event Label
|
||||
})
|
||||
}).join('\n')
|
||||
}).then(resp => {
|
||||
if (resp.status !== 200) {
|
||||
WIKI.logger.warn('Unable to send analytics telemetry request.')
|
||||
async sendInstanceEvent(eventType) {
|
||||
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
|
||||
}
|
||||
}, err => {
|
||||
WIKI.logger.warn('Unable to send analytics telemetry request.')
|
||||
})
|
||||
|
||||
// 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())
|
||||
|
@ -134,7 +134,7 @@ module.exports = () => {
|
||||
|
||||
// Init Telemetry
|
||||
WIKI.kernel.initTelemetry()
|
||||
WIKI.telemetry.sendEvent('setup', 'install-start')
|
||||
// WIKI.telemetry.sendEvent('setup', 'install-start')
|
||||
|
||||
// Basic checks
|
||||
if (!semver.satisfies(process.version, '>=10.12')) {
|
||||
@ -269,7 +269,7 @@ module.exports = () => {
|
||||
await WIKI.models.searchEngines.refreshSearchEnginesFromDisk()
|
||||
await WIKI.models.searchEngines.query().patch({ isEnabled: true }).where('key', 'db')
|
||||
|
||||
WIKI.telemetry.sendEvent('setup', 'install-loadedmodules')
|
||||
// WIKI.telemetry.sendEvent('setup', 'install-loadedmodules')
|
||||
|
||||
// Load storage targets
|
||||
await WIKI.models.storage.refreshTargetsFromDisk()
|
||||
@ -326,13 +326,17 @@ module.exports = () => {
|
||||
})
|
||||
|
||||
WIKI.logger.info('Setup is complete!')
|
||||
WIKI.telemetry.sendEvent('setup', 'install-completed')
|
||||
// WIKI.telemetry.sendEvent('setup', 'install-completed')
|
||||
res.json({
|
||||
ok: true,
|
||||
redirectPath: '/',
|
||||
redirectPort: WIKI.config.port
|
||||
}).end()
|
||||
|
||||
if (WIKI.config.telemetry.isEnabled) {
|
||||
await WIKI.telemetry.sendInstanceEvent('INSTALL')
|
||||
}
|
||||
|
||||
WIKI.config.setup = false
|
||||
|
||||
WIKI.logger.info('Stopping Setup...')
|
||||
|
Loading…
Reference in New Issue
Block a user