lnav/release/loggen.py
2022-07-07 10:05:06 -07:00

173 lines
3.6 KiB
Python
Executable File

#! /usr/bin/env python3
import os
import sys
import time
import uuid
import shutil
import random
import datetime
SYSLOG_DATE_FMT = "%b %d %H:%M:%S"
ACCESS_LOG_DATE_FMT = "%d/%b/%Y:%H:%M:%S"
GENERIC_DATE_FMT = "%Y-%m-%dT%H:%M:%S.%%s"
TEST_ADDRESSES = [
"192.0.2.55",
#"192.0.2.123",
"192.0.2.33",
#"192.0.2.2",
]
TEST_USERNAMES = [
"bob@example.com",
"-",
"-",
"-",
"-",
"-",
"-",
]
TEST_METHODS = [
"GET",
"GET",
"GET",
"GET",
"GET",
"GET",
"PUT",
]
TEST_URLS = [
"/index.html",
"/index.html",
"/index.html",
"/features.html",
"/images/compass.jpg",
"/obj/1234",
"/obj/1235?foo=bar",
"/obj/1236?search=demo&start=1",
]
TEST_VERSIONS = [
"HTTP/1.0",
"HTTP/1.0",
"HTTP/1.1",
]
TEST_STATUS = [
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
404,
500
]
TEST_REFERRERS = [
"-",
"-",
"-",
"-",
"-",
"-",
"http://lnav.org/download.html",
]
TEST_AGENTS = [
"-",
"-",
"-",
"-",
"Apache-HttpClient/4.2.3 (java 1.5)",
"Apache-HttpClient/4.2.3 (java 1.5)",
"Apache-HttpClient/4.2.3 (java 1.5)",
"Apache-HttpClient/4.2.3 (java 1.5)",
"Apache-HttpClient/4.2.3 (java 1.5)",
]
def access_log_msgs():
while True:
now = datetime.datetime.now()
ts = now - datetime.timedelta(seconds=1)
yield '%s - %s [%s +0000] "%s %s %s" %s %s "%s" "%s"\n' % (
random.choice(TEST_ADDRESSES),
random.choice(TEST_USERNAMES),
ts.strftime(ACCESS_LOG_DATE_FMT),
random.choice(TEST_METHODS),
random.choice(TEST_URLS),
random.choice(TEST_VERSIONS),
random.choice(TEST_STATUS),
random.randint(16, 1024 * 1024),
random.choice(TEST_REFERRERS),
random.choice(TEST_AGENTS)
)
TEST_PROCS = [
"server[123]",
"server[123]",
"server[123]",
"server[121]",
"server[124]",
"server[123]",
"worker[61456]",
"worker[61456]",
"worker[61457]",
]
TEST_MSGS = [
"Handling request %s" % uuid.uuid4(),
"Handling request %s" % uuid.uuid4(),
"Handling request %s" % uuid.uuid4(),
"Successfully started helper",
"Reading from device: /dev/hda",
"Received packet from %s" % random.choice(TEST_ADDRESSES),
"Received packet from %s" % random.choice(TEST_ADDRESSES),
"Received packet from %s" % random.choice(TEST_ADDRESSES),
]
def syslog_msgs():
while True:
yield '%s frontend3 %s: %s\n' % (
datetime.datetime.now().strftime(SYSLOG_DATE_FMT),
random.choice(TEST_PROCS),
random.choice(TEST_MSGS),
)
try:
shutil.rmtree("/tmp/demo")
os.makedirs("/tmp/demo")
except OSError:
pass
FILES = [
("/tmp/demo/access_log", access_log_msgs()),
("/tmp/demo/messages", syslog_msgs()),
]
while True:
for fname, gen in FILES:
for i in range(random.randrange(0, 4)):
with open(fname, "a+") as fp:
if random.uniform(0.0, 1.0) < 0.01:
line = next(gen)
prefix = line[:50]
suffix = line[50:]
fp.write(prefix)
time.sleep(random.uniform(0.5, 0.6))
fp.write(suffix)
else:
fp.write(next(gen))
# if random.uniform(0.0, 1.0) < 0.010:
# fp.truncate(0)
time.sleep(random.uniform(0.01, 0.02))
#if random.uniform(0.0, 1.0) < 0.001:
# os.remove(fname)