|
|
|
@ -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
|
|
|
|
|