From c8770b74c232aedfa4887b8015e12fb68d54eb9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roge=CC=81rio?= Date: Thu, 9 Apr 2020 16:50:11 -0300 Subject: [PATCH] improve readme logo --- README.md | 10 +++++----- img/clearly_logo.png | Bin 0 -> 16707 bytes img/clearly_logo_small.png | Bin 10908 -> 9231 bytes 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 img/clearly_logo.png diff --git a/README.md b/README.md index 5f8480e..51d90e0 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ See what `clearly` looks like: > > **Clearly** has received a major revamp in version 0.9, since its very near 1.0! \o/ > -> All code has been revisited, which took ~170 commits, ~70 files changed and ~2700 additions! `Clearly` is now more mature, more reliable and way more polished in general, with beautiful colors and complete error handling, making this new `Clearly` way more pleasant to use! +> All code has been revisited and several new features were implemented, which took ~170 commits, ~70 files changed and ~2700 additions! `Clearly` is now more mature, more reliable and way more polished in general, with beautiful colors and complete error handling, making this new `Clearly` way more pleasant to use! > > And there's also the unit tests, which were greatly streamlined. The suite has gone from ~2600 tests down to less than 700, while keeping 100% code coverage (branch-coverage)! The _PR_ is in https://github.com/rsalmei/clearly/pull/52 if you'd like to see it. > @@ -50,13 +50,13 @@ See what `clearly` looks like: ## Features -`clearly` enables you to: +`Clearly` enables you to: - Be informed of any and all tasks running, failing or just being enqueued, both in real time and stored; - if you enable `task_send_sent_event` in your code, you can track tasks even before they get into a worker! - Be informed of workers availability, knowing immediately if any goes down or up; - Filter tasks any way you want by several fields, both in real time and stored; - Debug the actual parameters the tasks were called with, and analyze their outcome, such as success results or failure tracebacks and retries; -- _Clearly_ see all types and representations of these parameters/outcomes with an advanced formatting system and syntax highlighting; +- All types and representations of those parameters and outcomes can be _clearly_ seen with the advanced formatting system and syntax highlighting; - Analyze metrics of your system. @@ -406,7 +406,7 @@ def metrics(self) -> None: - ~~split `Clearly` client and server, to allow an always-on server to run, with multiple clients connecting, without any of the shortcomings;~~ - ~~remove python 2 support~~ - ~~dockerize the server, to make its deploy way easier;~~ -- include a client command line mode, to be able to call it right from the shell; +- improve the client command line, to be able to call `capture()` and others right from the shell; - make the search pattern apply to args and kwargs too; - support to constrain search pattern to only some fields; - ability to hide sensitive information, directly in event listener; @@ -416,7 +416,7 @@ def metrics(self) -> None: --- ## Changelog: -- 0.9.1: fix reset() breaking protobuf serialization; also rename it to reset_tasks() +- 0.9.1: fix `reset()` breaking protobuf serialization; also rename it to `reset_tasks()` - 0.9.0: major code revamp with new internal flow of data, in preparation to the 1.0 milestone! Now there's two StreamingDispatcher instances, each with its own thread, to handle tasks and workers separately (reducing ifs, complexity and latency); include type annotation in all code; several clearlycli improvements: introduced the "!" instead of "negate", introduced display modes instead of "params, success and error", renamed `stats()` to `metrics()`, removed `task()` and improved `tasks()` to also retrieve tasks by uuid, general polish in all commands and error handling; worker states reengineered, and heartbeats now get through to the client; unified the streaming and stored events filtering; refactor some code with high cyclomatic complexity; include the so important version number in both server and client initializations; adds a new stylish logo; friendlier errors in general; fix a connection leak, where streaming clients were not being disconnected; included an env var to configure default display modes; streamlined the test system, going from ~2600 tests down to less than 700, while keeping the same 100% branch coverage (removed fixtures combinations which didn't make sense); requires Python 3.6+ - 0.8.3: extended user friendliness of gRPC errors to all client rpc methods; last version to support Python 3.5 - 0.8.2: reduce docker image size; user friendlier gRPC errors on client capture (with --debug to raise actual exception); nicer client autocomplete (no clearly package or clearly dir are shown) diff --git a/img/clearly_logo.png b/img/clearly_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f4775f77f79c224bec9eb53d63d82b2848f5d596 GIT binary patch literal 16707 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 literal 0 HcmV?d00001 diff --git a/img/clearly_logo_small.png b/img/clearly_logo_small.png index 3c786e1ba26ef68f8c0b8eb1703633e894f8d416..4a175d483a5d2d6149218a0b5c049348771c0da8 100644 GIT binary patch delta 5341 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 delta 7032 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 NmRFOjl6m{#KLB9_smTBU