feat: add analytics page data caching
This commit is contained in:
@@ -2,6 +2,7 @@ const KvConst = {
|
|||||||
AUTH_INFO: 'auth-uid:',
|
AUTH_INFO: 'auth-uid:',
|
||||||
SETTING: 'setting:',
|
SETTING: 'setting:',
|
||||||
SEND_DAY_COUNT: 'send_day_count:',
|
SEND_DAY_COUNT: 'send_day_count:',
|
||||||
|
ANALYSIS_ECHARTS: 'analysis_echarts:',
|
||||||
PUBLIC_KEY: "public_key:"
|
PUBLIC_KEY: "public_key:"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import verifyRecordService from './service/verify-record-service';
|
|||||||
import emailService from './service/email-service';
|
import emailService from './service/email-service';
|
||||||
import kvObjService from './service/kv-obj-service';
|
import kvObjService from './service/kv-obj-service';
|
||||||
import oauthService from "./service/oauth-service";
|
import oauthService from "./service/oauth-service";
|
||||||
|
import analysisService from './service/analysis-service';
|
||||||
export default {
|
export default {
|
||||||
async fetch(req, env, ctx) {
|
async fetch(req, env, ctx) {
|
||||||
|
|
||||||
@@ -24,9 +25,15 @@ export default {
|
|||||||
},
|
},
|
||||||
email: email,
|
email: email,
|
||||||
async scheduled(c, env, ctx) {
|
async scheduled(c, env, ctx) {
|
||||||
|
if (c.cron === '*/30 * * * *') {
|
||||||
|
await analysisService.refreshEchartsCache({ env })
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await verifyRecordService.clearRecord({ env })
|
await verifyRecordService.clearRecord({ env })
|
||||||
await userService.resetDaySendCount({ env })
|
await userService.resetDaySendCount({ env })
|
||||||
await emailService.completeReceiveAll({ env })
|
await emailService.completeReceiveAll({ env })
|
||||||
await oauthService.clearNoBindOathUser({ env })
|
await oauthService.clearNoBindOathUser({ env })
|
||||||
|
await analysisService.refreshEchartsCache({ env })
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,7 +9,30 @@ import { toUtc } from '../utils/date-uitil';
|
|||||||
const analysisService = {
|
const analysisService = {
|
||||||
|
|
||||||
async echarts(c, params) {
|
async echarts(c, params) {
|
||||||
|
const cacheKey = this.echartsCacheKey(params);
|
||||||
|
const cache = await c.env.kv.get(cacheKey, { type: 'json' });
|
||||||
|
|
||||||
|
if (cache) {
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.refreshEchartsCacheByKey(c, cacheKey);
|
||||||
|
},
|
||||||
|
|
||||||
|
async refreshEchartsCacheByKey(c, cacheKey) {
|
||||||
|
const params = this.echartsParamsByCacheKey(cacheKey);
|
||||||
|
const data = await this.queryEcharts(c, params);
|
||||||
|
await c.env.kv.put(cacheKey, JSON.stringify(data));
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
|
||||||
|
async refreshEchartsCache(c) {
|
||||||
|
const { keys } = await c.env.kv.list({ prefix: kvConst.ANALYSIS_ECHARTS });
|
||||||
|
|
||||||
|
await Promise.all(keys.map(key => this.refreshEchartsCacheByKey(c, key.name)));
|
||||||
|
},
|
||||||
|
|
||||||
|
async queryEcharts(c, params) {
|
||||||
|
|
||||||
const { timeZone } = params;
|
const { timeZone } = params;
|
||||||
|
|
||||||
@@ -84,6 +107,16 @@ const analysisService = {
|
|||||||
return {date: day,total}
|
return {date: day,total}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
echartsCacheKey(params = {}) {
|
||||||
|
return kvConst.ANALYSIS_ECHARTS + encodeURIComponent(params.timeZone || 'UTC');
|
||||||
|
},
|
||||||
|
|
||||||
|
echartsParamsByCacheKey(cacheKey) {
|
||||||
|
return {
|
||||||
|
timeZone: decodeURIComponent(cacheKey.replace(kvConst.ANALYSIS_ECHARTS, ''))
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user