Skip to content

Commit

Permalink
feat: utilities - cache
Browse files Browse the repository at this point in the history
  • Loading branch information
NGPixel committed Jul 6, 2019
1 parent 13f1729 commit dc4fa9b
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 11 deletions.
2 changes: 1 addition & 1 deletion client/components/admin/admin-pages-edit.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
76 changes: 66 additions & 10 deletions client/components/admin/admin-utilities-cache.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
mutation {
pages {
flushCache {
responseResult {
succeeded
errorCode
slug
message
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
mutation {
assets {
flushTempUploads {
responseResult {
succeeded
errorCode
slug
message
}
}
}
}
13 changes: 13 additions & 0 deletions server/graph/resolvers/asset.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
10 changes: 10 additions & 0 deletions server/graph/resolvers/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
2 changes: 2 additions & 0 deletions server/graph/schemas/asset.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ type AssetMutation {
deleteAsset(
id: Int!
): DefaultResponse @auth(requires: ["manage:system", "manage:assets"])

flushTempUploads: DefaultResponse @auth(requires: ["manage:system"])
}

# -----------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions server/graph/schemas/page.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ type PageMutation {
delete(
id: Int!
): DefaultResponse @auth(requires: ["delete:pages", "manage:system"])

flushCache: DefaultResponse @auth(requires: ["manage:system"])
}

# -----------------------------------------------
Expand Down
4 changes: 4 additions & 0 deletions server/models/assets.js
Original file line number Diff line number Diff line change
Expand Up @@ -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`))
}
}
4 changes: 4 additions & 0 deletions server/models/pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(), '')
Expand Down

0 comments on commit dc4fa9b

Please sign in to comment.