feat: docker auto upgrade

This commit is contained in:
Nick
2019-09-22 16:32:39 -04:00
parent 766eebbe2f
commit d0dc300a59
9 changed files with 273 additions and 44 deletions

View File

@@ -7,6 +7,7 @@ const path = require('path')
const fs = require('fs-extra')
const moment = require('moment')
const graphHelper = require('../../helpers/graph')
const Docker = require('dockerode')
/* global WIKI */
@@ -20,13 +21,13 @@ const dbTypes = {
module.exports = {
Query: {
async system() { return {} }
async system () { return {} }
},
Mutation: {
async system() { return {} }
async system () { return {} }
},
SystemQuery: {
flags() {
flags () {
return _.transform(WIKI.config.flags, (result, value, key) => {
result.push({ key, value })
}, [])
@@ -34,7 +35,7 @@ module.exports = {
async info() { return {} }
},
SystemMutation: {
async updateFlags(obj, args, context) {
async updateFlags (obj, args, context) {
WIKI.config.flags = _.transform(args.flags, (result, row) => {
_.set(result, row.key, row.value)
}, {})
@@ -44,7 +45,7 @@ module.exports = {
responseResult: graphHelper.generateSuccess('System Flags applied successfully')
}
},
async resetTelemetryClientId(obj, args, context) {
async resetTelemetryClientId (obj, args, context) {
try {
WIKI.telemetry.generateClientId()
await WIKI.configSvc.saveToDb(['telemetry'])
@@ -55,7 +56,7 @@ module.exports = {
return graphHelper.generateError(err)
}
},
async setTelemetry(obj, args, context) {
async setTelemetry (obj, args, context) {
try {
_.set(WIKI.config, 'telemetry.isEnabled', args.enabled)
WIKI.telemetry.enabled = args.enabled
@@ -66,22 +67,44 @@ module.exports = {
} catch (err) {
return graphHelper.generateError(err)
}
},
async performUpgrade (obj, args, context) {
try {
const dockerEngine = new Docker({ socketPath: '/var/run/docker.sock' })
await dockerEngine.run('containrrr/watchtower', ['--cleanup', '--run-once', 'wiki'], process.stdout, {
HostConfig: {
AutoRemove: true,
Mounts: [
{
Target: '/var/run/docker.sock',
Source: '/var/run/docker.sock',
Type: 'bind'
}
]
}
})
return {
responseResult: graphHelper.generateSuccess('Upgrade has started.')
}
} catch (err) {
return graphHelper.generateError(err)
}
}
},
SystemInfo: {
configFile() {
configFile () {
return path.join(process.cwd(), 'config.yml')
},
cpuCores() {
cpuCores () {
return os.cpus().length
},
currentVersion() {
currentVersion () {
return WIKI.version
},
dbType() {
dbType () {
return _.get(dbTypes, WIKI.config.db.type, 'Unknown DB')
},
async dbVersion() {
async dbVersion () {
let version = 'Unknown Version'
switch (WIKI.config.db.type) {
case 'mariadb':
@@ -102,26 +125,26 @@ module.exports = {
}
return version
},
dbHost() {
dbHost () {
if (WIKI.config.db.type === 'sqlite') {
return WIKI.config.db.storage
} else {
return WIKI.config.db.host
}
},
hostname() {
hostname () {
return os.hostname()
},
latestVersion() {
latestVersion () {
return WIKI.system.updates.version
},
latestVersionReleaseDate() {
latestVersionReleaseDate () {
return moment.utc(WIKI.system.updates.releaseDate)
},
nodeVersion() {
nodeVersion () {
return process.version.substr(1)
},
async operatingSystem() {
async operatingSystem () {
let osLabel = `${os.type()} (${os.platform()}) ${os.release()} ${os.arch()}`
if (os.platform() === 'linux') {
const osInfo = await getos()
@@ -136,27 +159,30 @@ module.exports = {
}
return os.platform()
},
ramTotal() {
ramTotal () {
return filesize(os.totalmem())
},
telemetry() {
telemetry () {
return WIKI.telemetry.enabled
},
telemetryClientId() {
telemetryClientId () {
return WIKI.config.telemetry.clientId
},
workingDirectory() {
async upgradeCapable () {
return fs.pathExists('/var/run/docker.sock')
},
workingDirectory () {
return process.cwd()
},
async groupsTotal() {
async groupsTotal () {
const total = await WIKI.models.groups.query().count('* as total').first().pluck('total')
return _.toSafeInteger(total)
},
async pagesTotal() {
async pagesTotal () {
const total = await WIKI.models.pages.query().count('* as total').first().pluck('total')
return _.toSafeInteger(total)
},
async usersTotal() {
async usersTotal () {
const total = await WIKI.models.users.query().count('* as total').first().pluck('total')
return _.toSafeInteger(total)
}

View File

@@ -33,6 +33,8 @@ type SystemMutation {
setTelemetry(
enabled: Boolean!
): DefaultResponse @auth(requires: ["manage:system"])
performUpgrade: DefaultResponse @auth(requires: ["manage:system"])
}
# -----------------------------------------------
@@ -67,6 +69,7 @@ type SystemInfo {
ramTotal: String @auth(requires: ["manage:system"])
telemetry: Boolean @auth(requires: ["manage:system"])
telemetryClientId: String @auth(requires: ["manage:system"])
upgradeCapable: Boolean @auth(requires: ["manage:system"])
usersTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:groups", "write:groups", "manage:users", "write:users"])
workingDirectory: String @auth(requires: ["manage:system"])
}