mirror of
https://github.com/tstack/lnav.git
synced 2024-09-11 21:07:39 +03:00
226 lines
6.1 KiB
Python
Executable File
226 lines
6.1 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"] * 20 +
|
|
["192.0.2.44"] * 20 +
|
|
["192.0.2.3"] * 40 +
|
|
["192.0.2.100"] * 10 +
|
|
["192.0.2.122"] * 30 +
|
|
["192.0.2.42"] * 100
|
|
)
|
|
|
|
TEST_USERNAMES = [
|
|
"bob@example.com",
|
|
"bob@example.com",
|
|
"bob@example.com",
|
|
"combatcarl@example.com",
|
|
"combatcarl@example.com",
|
|
"combatcarl@example.com",
|
|
"combatcarl@example.com",
|
|
"combatcarl@example.com",
|
|
"combatcarl@example.com",
|
|
"-",
|
|
"-",
|
|
"-",
|
|
"-",
|
|
"-",
|
|
"-",
|
|
]
|
|
|
|
TEST_METHODS = [
|
|
"GET",
|
|
"GET",
|
|
"GET",
|
|
"GET",
|
|
"GET",
|
|
"GET",
|
|
"PUT",
|
|
]
|
|
|
|
PATH_COMPS = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua".split()
|
|
|
|
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",
|
|
]
|
|
|
|
for index in range(0, 50):
|
|
path_list = []
|
|
for count in range(random.randint(2, 8)):
|
|
path_list.append(random.choice(PATH_COMPS))
|
|
TEST_URLS.append("/".join(path_list))
|
|
|
|
TEST_VERSIONS = [
|
|
"HTTP/1.0",
|
|
"HTTP/1.0",
|
|
"HTTP/1.1",
|
|
]
|
|
|
|
TEST_STATUS = [
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
200,
|
|
404,
|
|
404,
|
|
404,
|
|
404,
|
|
403,
|
|
403,
|
|
403,
|
|
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)",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
|
|
"Roku4640X/DVP-7.70 (297.70E04154A)",
|
|
"Roku4640X/DVP-7.70 (297.70E04154A)",
|
|
"Roku4640X/DVP-7.70 (297.70E04154A)",
|
|
]
|
|
|
|
START_TIME = datetime.datetime.fromtimestamp(1692700000)
|
|
ACCESS_LOG_CURR_TIME = START_TIME
|
|
SYSLOG_LOG_CURR_TIME = START_TIME
|
|
|
|
|
|
def access_log_msgs():
|
|
global ACCESS_LOG_CURR_TIME
|
|
while True:
|
|
ACCESS_LOG_CURR_TIME += datetime.timedelta(seconds=random.randrange(1, 5))
|
|
yield '%s - %s [%s +0000] "%s %s %s" %s %s "%s" "%s"\n' % (
|
|
random.choice(TEST_ADDRESSES),
|
|
random.choice(TEST_USERNAMES),
|
|
ACCESS_LOG_CURR_TIME.strftime(ACCESS_LOG_DATE_FMT),
|
|
random.choice(TEST_METHODS),
|
|
random.choice(TEST_URLS),
|
|
random.choice(TEST_VERSIONS),
|
|
random.choice(TEST_STATUS),
|
|
int(random.lognormvariate(1, 1) * 1000),
|
|
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():
|
|
global SYSLOG_LOG_CURR_TIME
|
|
while True:
|
|
SYSLOG_LOG_CURR_TIME += datetime.timedelta(seconds=random.randrange(1, 5))
|
|
yield '%s frontend3 %s: %s\n' % (
|
|
SYSLOG_LOG_CURR_TIME.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()),
|
|
]
|
|
|
|
COUNTER = 0
|
|
while COUNTER < 5000:
|
|
loop_inc = datetime.timedelta(seconds=random.weibullvariate(1, 1.5) * 500)
|
|
ACCESS_LOG_CURR_TIME += loop_inc
|
|
SYSLOG_LOG_CURR_TIME += loop_inc
|
|
for fname, gen in FILES:
|
|
for i in range(random.randrange(4, 8)):
|
|
COUNTER += 1
|
|
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)
|