feat: utilities - cache

This commit is contained in:
Nick 2019-07-06 17:06:42 -04:00
parent 13f172978f
commit dc4fa9b31e
10 changed files with 126 additions and 11 deletions

View File

@ -149,7 +149,7 @@
v-flex.text-xs-right(xs5).caption.grey--text.text-darken-2 {{ page.updatedAt | moment('calendar') }}
v-timeline-item(hide-dot, small)
.body-1 ...
v-btn.mx-0(outline, color='grey') View Full History
v-btn.mx-0(outline, color='grey', :href='`/h/` + page.locale + `/` + page.path') View Full History
.body-1 ...
v-timeline-item(color='pink', small)
v-layout(justify-space-between)

View File

@ -3,27 +3,83 @@
v-toolbar(flat, color='primary', dark, dense)
.subheading {{ $t('admin:utilities.cacheTitle') }}
v-card-text
v-subheader.pl-0 Flush Pages Cache
.body-1 Pages are cached to disk for better performance. You can flush the cache to force all content to be fetched from the DB again.
v-btn(outline, color='primary').ml-0.mt-3
v-icon(left) build
span Proceed
v-divider.my-3
v-subheader.pl-0 Flush Assets Cache
.body-1 Assets such as images and other files are cached to disk for better performance. You can flush the cache to force all assets to be fetched from the DB again.
v-btn(outline, color='primary').ml-0.mt-3
v-subheader.pl-0 Flush Pages and Assets Cache
.body-1 Pages and Assets are cached to disk for better performance. You can flush the cache to force all content to be fetched from the DB again.
v-btn(outline, color='primary', @click='flushCache', :disabled='loading').ml-0.mt-3
v-icon(left) build
span Proceed
v-divider.my-3
v-subheader.pl-0 Flush Temporary Uploads
.body-1 New uploads are temporarily saved to disk while they are being processed. They are automatically deleted after processing, but you can force an immediate cleanup using this tool.
v-btn(outline, color='primary').ml-0.mt-3
.body-1.red--text Note that performing this action while an upload is in progress can result in a failed upload.
v-btn(outline, color='primary', @click='flushUploads', :disabled='loading').ml-0.mt-3
v-icon(left) build
span Proceed
</template>
<script>
import _ from 'lodash'
import utilityCacheFlushCacheMutation from 'gql/admin/utilities/utilities-mutation-cache-flushcache.gql'
import utilityCacheFlushUploadsMutation from 'gql/admin/utilities/utilities-mutation-cache-flushuploads.gql'
export default {
data() {
return {
loading: false
}
},
methods: {
async flushCache() {
this.loading = true
this.$store.commit(`loadingStart`, 'admin-utilities-cache-flushCache')
try {
const respRaw = await this.$apollo.mutate({
mutation: utilityCacheFlushCacheMutation
})
const resp = _.get(respRaw, 'data.pages.flushCache.responseResult', {})
if (resp.succeeded) {
this.$store.commit('showNotification', {
message: 'Cache flushed successfully.',
style: 'success',
icon: 'check'
})
} else {
throw new Error(resp.message)
}
} catch (err) {
this.$store.commit('pushGraphError', err)
}
this.$store.commit(`loadingStop`, 'admin-utilities-cache-flushCache')
this.loading = false
},
async flushUploads() {
this.loading = true
this.$store.commit(`loadingStart`, 'admin-utilities-cache-flushUploads')
try {
const respRaw = await this.$apollo.mutate({
mutation: utilityCacheFlushUploadsMutation
})
const resp = _.get(respRaw, 'data.assets.flushTempUploads.responseResult', {})
if (resp.succeeded) {
this.$store.commit('showNotification', {
message: 'Temporary Uploads flushed successfully.',
style: 'success',
icon: 'check'
})
} else {
throw new Error(resp.message)
}
} catch (err) {
this.$store.commit('pushGraphError', err)
}
this.$store.commit(`loadingStop`, 'admin-utilities-cache-flushUploads')
this.loading = false
}
}
}
</script>

View File

@ -0,0 +1,12 @@
mutation {
pages {
flushCache {
responseResult {
succeeded
errorCode
slug
message
}
}
}
}

View File

@ -0,0 +1,12 @@
mutation {
assets {
flushTempUploads {
responseResult {
succeeded
errorCode
slug
message
}
}
}
}

View File

@ -154,6 +154,19 @@ module.exports = {
} catch (err) {
return graphHelper.generateError(err)
}
},
/**
* Flush Temporary Uploads
*/
async flushTempUploads(obj, args, context) {
try {
await WIKI.models.assets.flushTempUploads()
return {
responseResult: graphHelper.generateSuccess('Temporary Uploads have been flushed successfully.')
}
} catch (err) {
return graphHelper.generateError(err)
}
}
}
// File: {

View File

@ -85,6 +85,16 @@ module.exports = {
responseResult: graphHelper.generateSuccess('Page has been updated.'),
page
}
},
async flushCache(obj, args, context) {
try {
await WIKI.models.pages.flushCache()
return {
responseResult: graphHelper.generateSuccess('Pages Cache has been flushed successfully.')
}
} catch (err) {
return graphHelper.generateError(err)
}
}
},
Page: {

View File

@ -44,6 +44,8 @@ type AssetMutation {
deleteAsset(
id: Int!
): DefaultResponse @auth(requires: ["manage:system", "manage:assets"])
flushTempUploads: DefaultResponse @auth(requires: ["manage:system"])
}
# -----------------------------------------------

View File

@ -71,6 +71,8 @@ type PageMutation {
delete(
id: Int!
): DefaultResponse @auth(requires: ["delete:pages", "manage:system"])
flushCache: DefaultResponse @auth(requires: ["manage:system"])
}
# -----------------------------------------------

View File

@ -164,4 +164,8 @@ module.exports = class Asset extends Model {
res.sendStatus(404)
}
}
static async flushTempUploads() {
return fs.emptyDir(path.join(process.cwd(), `data/uploads`))
}
}

View File

@ -417,6 +417,10 @@ module.exports = class Page extends Model {
return fs.remove(path.join(process.cwd(), `data/cache/${page.hash}.bin`))
}
static async flushCache() {
return fs.emptyDir(path.join(process.cwd(), `data/cache`))
}
static cleanHTML(rawHTML = '') {
return striptags(rawHTML || '')
.replace(emojiRegex(), '')