mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
loki: devenv: improved fake data generator (#63237)
This commit is contained in:
parent
eedcd7d5b1
commit
117bff6459
@ -1,3 +1,3 @@
|
||||
FROM node:16-alpine
|
||||
FROM node:18-alpine
|
||||
|
||||
COPY data.js /home/node/data.js
|
@ -113,21 +113,41 @@ function logFmtLine(item) {
|
||||
return parts.join(' ');
|
||||
}
|
||||
|
||||
const SLEEP_ANGLE_STEP = Math.PI / 200;
|
||||
let sleepAngle = 0;
|
||||
function getNextSineWaveSleepDuration() {
|
||||
sleepAngle += SLEEP_ANGLE_STEP;
|
||||
return Math.trunc(1000 * Math.abs(Math.sin(sleepAngle)));
|
||||
const DAYS = 7;
|
||||
const POINTS_PER_DAY = 1000;
|
||||
|
||||
// it's important to have good "delays" between
|
||||
// log-line-timestamps, because the "density" of log-lines
|
||||
// is what gives the loki metric queries shape.
|
||||
function calculateDelays(pointsCount) {
|
||||
const delays = [];
|
||||
for(let i=0;i<pointsCount; i+=1) {
|
||||
const delay = Math.random();
|
||||
delays.push(delay);
|
||||
}
|
||||
// now, i want to normalize the delays-array, so that the sum of
|
||||
// all it's items adds up to `1`.
|
||||
const allDelays = delays.reduce((acc, current) => acc + current, 0);
|
||||
|
||||
for(let i=0;i<delays.length; i++) {
|
||||
delays[i] = delays[i] / allDelays
|
||||
}
|
||||
|
||||
return delays;
|
||||
}
|
||||
|
||||
|
||||
async function main() {
|
||||
for (let step = 0; step < 300; step++) {
|
||||
await sleep(getNextSineWaveSleepDuration());
|
||||
const timestampMs = new Date().getTime();
|
||||
const item = getRandomLogItem(step + 1)
|
||||
lokiSendLogLine(timestampMs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'});
|
||||
lokiSendLogLine(timestampMs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'});
|
||||
}
|
||||
const delays = calculateDelays(DAYS * POINTS_PER_DAY);
|
||||
const timeRange = DAYS * 24 * 60 * 60 * 1000;
|
||||
let timestampMs = new Date().getTime() - timeRange;
|
||||
for(let i =0; i < delays.length; i++ ) { // i cannot do a forEach because of the `await` inside
|
||||
const delay = delays[i];
|
||||
timestampMs += Math.trunc(delay * timeRange);
|
||||
const item = getRandomLogItem(i + 1)
|
||||
await lokiSendLogLine(timestampMs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'});
|
||||
await lokiSendLogLine(timestampMs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'});
|
||||
};
|
||||
}
|
||||
|
||||
// when running in docker, we catch the needed stop-signal, to shutdown fast
|
||||
|
Loading…
Reference in New Issue
Block a user