forked from redis/node-redis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtime-series.js
126 lines (106 loc) · 4.13 KB
/
time-series.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Add data to a Redis TimeSeries and query it.
// Requires the RedisTimeSeries module: https://redistimeseries.io/
import { createClient } from 'redis';
import { TimeSeriesDuplicatePolicies, TimeSeriesEncoding, TimeSeriesAggregationType } from '@node-redis/time-series';
async function timeSeries() {
const client = createClient();
await client.connect();
await client.del('mytimeseries');
try {
// Create a timeseries
// https://oss.redis.com/redistimeseries/commands/#tscreate
const created = await client.ts.create('mytimeseries', {
RETENTION: 86400000, // 1 day in milliseconds
ENCODING: TimeSeriesEncoding.UNCOMPRESSED, // No compression
DUPLICATE_POLICY: TimeSeriesDuplicatePolicies.BLOCK // No duplicates
});
if (created === 'OK') {
console.log('Created timeseries.');
} else {
console.log('Error creating timeseries :(');
process.exit(1);
}
let value = Math.floor(Math.random() * 1000) + 1; // Random data point value
let currentTimestamp = 1640995200000; // Jan 1 2022 00:00:00
let num = 0;
while (num < 10000) {
// Add a new value to the timeseries, providing our own timestamp:
// https://oss.redis.com/redistimeseries/commands/#tsadd
await client.ts.add('mytimeseries', currentTimestamp, value);
console.log(`Added timestamp ${currentTimestamp}, value ${value}.`);
num += 1;
value = Math.floor(Math.random() * 1000) + 1; // Get another random value
currentTimestamp += 1000; // Move on one second.
}
// Add multiple values to the timeseries in round trip to the server:
// https://oss.redis.com/redistimeseries/commands/#tsmadd
const response = await client.ts.mAdd([{
key: 'mytimeseries',
timestamp: currentTimestamp + 60000,
value: Math.floor(Math.random() * 1000) + 1
}, {
key: 'mytimeseries',
timestamp: currentTimestamp + 120000,
value: Math.floor(Math.random() * 1000) + 1
}]);
// response = array of timestamps added by TS.MADD command.
if (response.length === 2) {
console.log('Added 2 entries to timeseries with TS.MADD.');
}
// Update timeseries retention with TS.ALTER:
// https://oss.redis.com/redistimeseries/commands/#tsalter
const alterResponse = await client.ts.alter('mytimeseries', {
RETENTION: 0 // Keep the entries forever
});
if (alterResponse === 'OK') {
console.log('Timeseries retention settings altered successfully.');
}
// Query the timeseries with TS.RANGE:
// https://oss.redis.com/redistimeseries/commands/#tsrangetsrevrange
const fromTimestamp = 1640995200000; // Jan 1 2022 00:00:00
const toTimestamp = 1640995260000; // Jan 1 2022 00:01:00
const rangeResponse = await client.ts.range('mytimeseries', fromTimestamp, toTimestamp, {
// Group into 10 second averages.
AGGREGATION: {
type: TimeSeriesAggregationType.AVERAGE,
timeBucket: 10000
}
});
console.log('RANGE RESPONSE:');
// rangeResponse looks like:
// [
// { timestamp: 1640995200000, value: 356.8 },
// { timestamp: 1640995210000, value: 534.8 },
// { timestamp: 1640995220000, value: 481.3 },
// { timestamp: 1640995230000, value: 437 },
// { timestamp: 1640995240000, value: 507.3 },
// { timestamp: 1640995250000, value: 581.2 },
// { timestamp: 1640995260000, value: 600 }
// ]
console.log(rangeResponse);
// Get some information about the state of the timeseries.
// https://oss.redis.com/redistimeseries/commands/#tsinfo
const tsInfo = await client.ts.info('mytimeseries');
// tsInfo looks like this:
// {
// totalSamples: 1440,
// memoryUsage: 28904,
// firstTimestamp: 1641508920000,
// lastTimestamp: 1641595320000,
// retentionTime: 86400000,
// chunkCount: 7,
// chunkSize: 4096,
// chunkType: 'uncompressed',
// duplicatePolicy: 'block',
// labels: [],
// sourceKey: null,
// rules: []
// }
console.log('Timeseries info:');
console.log(tsInfo);
} catch (e) {
console.error(e);
}
await client.quit();
}
timeSeries();