From 8e2cd2bf29638b551a803c53b8e54ff9882fd29f Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 10:41:04 +0300 Subject: [PATCH 1/6] added --all-stdout option --- cron_sentry/runner.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/cron_sentry/runner.py b/cron_sentry/runner.py index 161efe6..9e7ca90 100644 --- a/cron_sentry/runner.py +++ b/cron_sentry/runner.py @@ -23,7 +23,7 @@ epilog=('The Sentry server address can also be specified through ' + 'the SENTRY_DSN environment variable ' + '(and the --dsn option can be omitted).'), - usage='cron-sentry [-h] [--dsn SENTRY_DSN] [-M STRING_MAX_LENGTH] [--quiet] [--report-all] [--version] cmd [arg ...]', + usage='cron-sentry [-h] [--dsn SENTRY_DSN] [-M STRING_MAX_LENGTH] [--quiet] [--report-all] [--all-stdout] [--version] cmd [arg ...]', ) parser.add_argument( '--dsn', @@ -54,6 +54,12 @@ default=False, help='Report to Sentry even if the task has succeeded', ) +parser.add_argument( + '--all-stdout', + action='store_true', + default=False, + help='Send all stderr/stdout to stdout regardless of max message length', +) parser.add_argument( 'cmd', nargs=REMAINDER, @@ -125,7 +131,8 @@ def run(args=argv[1:]): string_max_length=opts.string_max_length, quiet=opts.quiet, extra=_extra_from_env(environ), - report_all=opts.report_all + report_all=opts.report_all, + all_stdout=opts.all_stdout ) sys.exit(runner.run()) else: @@ -135,13 +142,14 @@ def run(args=argv[1:]): class CommandReporter(object): - def __init__(self, cmd, dsn, string_max_length, quiet=False, extra=None, report_all=False): + def __init__(self, cmd, dsn, string_max_length, quiet=False, extra=None, report_all=False, all_stdout=False): self.dsn = dsn self.command = cmd self.string_max_length = string_max_length self.quiet = quiet self.extra = {} self.report_all = report_all + self.all_stdout = all_stdout if extra is not None: self.extra = extra @@ -165,8 +173,12 @@ def run(self): self.report(exit_status, last_lines_stdout, last_lines_stderr, elapsed) if not self.quiet: - sys.stdout.write(last_lines_stdout) - sys.stderr.write(last_lines_stderr) + if self.all_stdout: + sys.stdout.write(self._get_all_lines(stdout)) + sys.stderr.write(self._get_all_lines(stderr)) + else: + sys.stdout.write(last_lines_stdout) + sys.stderr.write(last_lines_stderr) return exit_status @@ -210,3 +222,7 @@ def _get_last_lines(self, buf): buf.seek(-(self.string_max_length - 3), SEEK_END) last_lines = '...' + buf.read().decode('utf-8') return last_lines + + def _get_all_lines(self, buf): + buf.seek(0) + return buf.read().decode('utf-8') From 0f051306d8c65e1ba6a7f3a18a8f47f09aaf221e Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 10:54:54 +0300 Subject: [PATCH 2/6] changed --all-stdout option to --output-all This option outputs stdout and stderr, output-all is a better name for it and also matches well with report-all option --- cron_sentry/runner.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cron_sentry/runner.py b/cron_sentry/runner.py index 9e7ca90..a3ef56f 100644 --- a/cron_sentry/runner.py +++ b/cron_sentry/runner.py @@ -23,7 +23,7 @@ epilog=('The Sentry server address can also be specified through ' + 'the SENTRY_DSN environment variable ' + '(and the --dsn option can be omitted).'), - usage='cron-sentry [-h] [--dsn SENTRY_DSN] [-M STRING_MAX_LENGTH] [--quiet] [--report-all] [--all-stdout] [--version] cmd [arg ...]', + usage='cron-sentry [-h] [--dsn SENTRY_DSN] [-M STRING_MAX_LENGTH] [--quiet] [--report-all] [--output-all] [--version] cmd [arg ...]', ) parser.add_argument( '--dsn', @@ -55,7 +55,7 @@ help='Report to Sentry even if the task has succeeded', ) parser.add_argument( - '--all-stdout', + '--output-all', action='store_true', default=False, help='Send all stderr/stdout to stdout regardless of max message length', @@ -132,7 +132,7 @@ def run(args=argv[1:]): quiet=opts.quiet, extra=_extra_from_env(environ), report_all=opts.report_all, - all_stdout=opts.all_stdout + stdout_all=opts.output_all ) sys.exit(runner.run()) else: @@ -142,14 +142,14 @@ def run(args=argv[1:]): class CommandReporter(object): - def __init__(self, cmd, dsn, string_max_length, quiet=False, extra=None, report_all=False, all_stdout=False): + def __init__(self, cmd, dsn, string_max_length, quiet=False, extra=None, report_all=False, output_all=False): self.dsn = dsn self.command = cmd self.string_max_length = string_max_length self.quiet = quiet self.extra = {} self.report_all = report_all - self.all_stdout = all_stdout + self.output_all = output_all if extra is not None: self.extra = extra @@ -173,7 +173,7 @@ def run(self): self.report(exit_status, last_lines_stdout, last_lines_stderr, elapsed) if not self.quiet: - if self.all_stdout: + if self.output_all: sys.stdout.write(self._get_all_lines(stdout)) sys.stderr.write(self._get_all_lines(stderr)) else: From f9bdd85880d68fe3507e2d8c86068a8fd747d1d2 Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 10:57:54 +0300 Subject: [PATCH 3/6] changed all-stdout option to output-all --- cron_sentry/runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cron_sentry/runner.py b/cron_sentry/runner.py index a3ef56f..1bc6ad0 100644 --- a/cron_sentry/runner.py +++ b/cron_sentry/runner.py @@ -132,7 +132,7 @@ def run(args=argv[1:]): quiet=opts.quiet, extra=_extra_from_env(environ), report_all=opts.report_all, - stdout_all=opts.output_all + output_all=opts.output_all ) sys.exit(runner.run()) else: From 2cd48f05617a25cf55549e090f91bbb75622bfe5 Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 11:04:04 +0300 Subject: [PATCH 4/6] added --output-all option usage message --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index 377ea46..3ff13f4 100644 --- a/README.rst +++ b/README.rst @@ -31,6 +31,8 @@ Usage -q, --quiet Suppress all command output --version show program's version number and exit --report-all Report to Sentry even if the task has succeeded + --output-all Send all stderr/stdout to stdout regardless of max + message length The Sentry server address can also be specified through the SENTRY_DSN environment variable (and the --dsn option can be omitted). From 6fbbb43a7b3ba112704001234ef357e2a9018421 Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 11:05:27 +0300 Subject: [PATCH 5/6] fixed output-all message --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 3ff13f4..1fec561 100644 --- a/README.rst +++ b/README.rst @@ -31,7 +31,7 @@ Usage -q, --quiet Suppress all command output --version show program's version number and exit --report-all Report to Sentry even if the task has succeeded - --output-all Send all stderr/stdout to stdout regardless of max + --output-all Send all stderr/stdout output regardless of max message length The Sentry server address can also be specified through the SENTRY_DSN From 6fe0cbca57bab00e0c64f8fe2f70509b8faad4f6 Mon Sep 17 00:00:00 2001 From: Mehmet Tolga Avcioglu Date: Mon, 12 Jul 2021 11:06:08 +0300 Subject: [PATCH 6/6] fixed output-all message --- cron_sentry/runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cron_sentry/runner.py b/cron_sentry/runner.py index 1bc6ad0..36eadba 100644 --- a/cron_sentry/runner.py +++ b/cron_sentry/runner.py @@ -58,7 +58,7 @@ '--output-all', action='store_true', default=False, - help='Send all stderr/stdout to stdout regardless of max message length', + help='Send all stderr/stdout output regardless of max message length', ) parser.add_argument( 'cmd',