| #!/usr/bin/env python3 |
| import sys |
| import argparse |
| |
| PARSER = argparse.ArgumentParser() |
| PARSER.add_argument('n', type=int) |
| PARSER.add_argument('--dots', action='store_true') |
| PARSER.add_argument('-m', '--message-size', type=int, default=200) |
| PARSER.add_argument('-d', '--data-size', type=int, default=4000) |
| PARSER.add_argument('--data-type', choices={'random', 'simple'}) |
| OPTIONS = PARSER.parse_args() |
| |
| template = """\ |
| __CURSOR=s=6863c726210b4560b7048889d8ada5c5;i=3e931;b=f446871715504074bf7049ef0718fa93;m={m:x};t=4fd05c |
| __REALTIME_TIMESTAMP={realtime_ts} |
| __MONOTONIC_TIMESTAMP={monotonic_ts} |
| _BOOT_ID=f446871715504074bf7049ef0718fa93 |
| _TRANSPORT=syslog |
| PRIORITY={priority} |
| SYSLOG_FACILITY={facility} |
| SYSLOG_IDENTIFIER=/USR/SBIN/CRON |
| MESSAGE={message} |
| _UID=0 |
| _GID=0 |
| _MACHINE_ID=69121ca41d12c1b69a7960174c27b618 |
| _HOSTNAME=hostname |
| SYSLOG_PID=25721 |
| _PID=25721 |
| _SOURCE_REALTIME_TIMESTAMP={source_realtime_ts} |
| DATA={data} |
| """ |
| |
| m = 0x198603b12d7 |
| realtime_ts = 1404101101501873 |
| monotonic_ts = 1753961140951 |
| source_realtime_ts = 1404101101483516 |
| priority = 3 |
| facility = 6 |
| |
| src = open('/dev/urandom', 'rb') |
| |
| bytes = 0 |
| counter = 0 |
| |
| for i in range(OPTIONS.n): |
| message = src.read(OPTIONS.message_size) |
| message = repr(message)[2:-1] |
| |
| if OPTIONS.data_type == 'random': |
| data = repr(src.read(OPTIONS.data_size)) |
| else: |
| # keep the pattern non-repeating so we get a different blob every time |
| data = '{:0{}}'.format(counter, OPTIONS.data_size) |
| counter += 1 |
| |
| entry = template.format(m=m, |
| realtime_ts=realtime_ts, |
| monotonic_ts=monotonic_ts, |
| source_realtime_ts=source_realtime_ts, |
| priority=priority, |
| facility=facility, |
| message=message, |
| data=data) |
| m += 1 |
| realtime_ts += 1 |
| monotonic_ts += 1 |
| source_realtime_ts += 1 |
| |
| bytes += len(entry) |
| |
| print(entry) |
| |
| if OPTIONS.dots: |
| print('.', file=sys.stderr, end='', flush=True) |
| |
| if OPTIONS.dots: |
| print(file=sys.stderr) |
| print('Wrote {} bytes'.format(bytes), file=sys.stderr) |