Improve chart performance (#7360)

* wip

* wip

* wip

* wip

* wip

* Update chart.ts

* wip

* Improve server performance

* wip

* wip
This commit is contained in:
syuilo 2021-03-18 11:17:05 +09:00 committed by GitHub
parent 0d19c2d42e
commit 4f249159d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 889 additions and 161 deletions

View file

@ -72,7 +72,7 @@ describe('Chart', () => {
testUniqueChart = new TestUniqueChart();
clock = lolex.install({
now: new Date('2000-01-01 00:00:00')
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0))
});
done();
});
@ -85,6 +85,7 @@ describe('Chart', () => {
it('Can updates', async(async () => {
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -105,9 +106,10 @@ describe('Chart', () => {
},
});
}));
it('Can updates (dec)', async(async () => {
await testChart.decrement();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -154,6 +156,7 @@ describe('Chart', () => {
await testChart.increment();
await testChart.increment();
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -177,10 +180,12 @@ describe('Chart', () => {
it('Can updates at different times', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('01:00:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -202,12 +207,45 @@ describe('Chart', () => {
});
}));
// 仕様上はこうなってほしいけど、実装は難しそうなのでskip
/*
it('Can updates at different times without save', async(async () => {
await testChart.increment();
clock.tick('01:00:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
assert.deepStrictEqual(chartHours, {
foo: {
dec: [0, 0, 0],
inc: [1, 1, 0],
total: [2, 1, 0]
},
});
assert.deepStrictEqual(chartDays, {
foo: {
dec: [0, 0, 0],
inc: [2, 0, 0],
total: [2, 0, 0]
},
});
}));
*/
it('Can padding', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('02:00:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -232,6 +270,7 @@ describe('Chart', () => {
// 要求された範囲にログがひとつもない場合でもパディングできる
it('Can padding from past range', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('05:00:00');
@ -259,8 +298,12 @@ describe('Chart', () => {
// Issue #3190
it('Can padding from past range 2', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('05:00:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, null);
const chartDays = await testChart.getChart('day', 3, null);
@ -284,10 +327,12 @@ describe('Chart', () => {
it('Can specify offset', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('01:00:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, new Date(Date.UTC(2000, 0, 1, 0, 0, 0)));
const chartDays = await testChart.getChart('day', 3, new Date(Date.UTC(2000, 0, 1, 0, 0, 0)));
@ -313,10 +358,12 @@ describe('Chart', () => {
clock.tick('00:30:00');
await testChart.increment();
await testChart.save();
clock.tick('01:30:00');
await testChart.increment();
await testChart.save();
const chartHours = await testChart.getChart('hour', 3, new Date(Date.UTC(2000, 0, 1, 0, 0, 0)));
const chartDays = await testChart.getChart('day', 3, new Date(Date.UTC(2000, 0, 1, 0, 0, 0)));
@ -341,6 +388,7 @@ describe('Chart', () => {
describe('Grouped', () => {
it('Can updates', async(async () => {
await testGroupedChart.increment('alice');
await testGroupedChart.save();
const aliceChartHours = await testGroupedChart.getChart('hour', 3, null, 'alice');
const aliceChartDays = await testGroupedChart.getChart('day', 3, null, 'alice');
@ -386,6 +434,7 @@ describe('Chart', () => {
await testUniqueChart.uniqueIncrement('alice');
await testUniqueChart.uniqueIncrement('alice');
await testUniqueChart.uniqueIncrement('bob');
await testUniqueChart.save();
const chartHours = await testUniqueChart.getChart('hour', 3, null);
const chartDays = await testUniqueChart.getChart('day', 3, null);
@ -428,6 +477,7 @@ describe('Chart', () => {
it('Can resync (2)', async(async () => {
await testChart.increment();
await testChart.save();
clock.tick('01:00:00');