Skip to content

Commit 47dfe3e

Browse files
committed
Show fixed-interval and admin-edited schedules on the homepage
django-ox 1.2.0 runs schedules on a cron or a fixed interval, declared in settings or edited in the Django admin. The feature list now says so. The waitlist, thanks and support text name [email protected]. The Pro batches line describes the callback, and the claiming line names the databases that use SKIP LOCKED.
1 parent 1455064 commit 47dfe3e

2 files changed

Lines changed: 21 additions & 18 deletions

File tree

‎index.html‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ <h1>The production worker for Django Tasks</h1>
4141
development only. <strong><span data-brand>Oxpull</span></strong> stores the queue in the
4242
database you already run and executes tasks with a separate worker process. No broker,
4343
no Redis, nothing new to operate.</p>
44-
<p class="hero-sub">The part that matters: <code>enqueue()</code> is a plain INSERT on your
44+
<p class="hero-sub"><code>enqueue()</code> is a plain INSERT on your
4545
default connection, so a task enqueued inside <code>transaction.atomic()</code> commits
4646
or rolls back together with your business data. A broker cannot share your database
4747
transaction. There is no window where an order exists without its email task, and no
@@ -70,8 +70,8 @@ <h2>Measured, not promised</h2>
7070
37,804 tasks, including nine minutes in which a worker was SIGKILLed every 20 to
7171
45 seconds. Every task reached a terminal state, no task ran twice in this run,
7272
and every interrupted execution was re-executed inside the documented bound.
73-
Execution is at-least-once: a worker killed after the work finished but before
74-
the result was recorded leaves that task to run again, and the harness asserts
73+
Execution is at-least-once. A worker killed after the work finished but before
74+
the result was recorded leaves that task to run again. The harness asserts
7575
that a second execution is only ever attributable to a kill.</p>
7676
<p class="caveat">No-op benchmarks flatter every queue, so read these as relative, not as
7777
capacity planning. The full methodology, every run, and the raw per-sample data ship in
@@ -89,12 +89,12 @@ <h3><span data-package>django-ox</span> <span class="tag">BSD-3 &middot; free fo
8989
<ul>
9090
<li>Durable queue in your existing database</li>
9191
<li>Transactional enqueue</li>
92-
<li>At-least-once execution, SKIP LOCKED claiming</li>
92+
<li>At-least-once execution, SKIP LOCKED claiming on PostgreSQL and MySQL 8</li>
9393
<li>Retries with backoff, per-attempt tracebacks</li>
9494
<li>Reaper for tasks from dead workers</li>
9595
<li>Graceful drain on SIGTERM</li>
9696
<li>Priorities, deferred tasks, multiple queues</li>
97-
<li>Recurring schedules, cron syntax</li>
97+
<li>Recurring schedules, cron or fixed interval, in settings or the Django admin</li>
9898
<li>Pruning command for finished rows</li>
9999
<li>Stats API and health command</li>
100100
</ul>
@@ -108,15 +108,15 @@ <h3><span data-package>django-ox</span> <span class="tag">BSD-3 &middot; free fo
108108
<div class="tier pro-tier">
109109
<h3><span data-brand>Oxpull</span> Pro <span class="tag">commercial license</span></h3>
110110
<ul>
111-
<li>Batches: enqueue many, track as one</li>
111+
<li>Batches: group tasks, with a callback when every member is settled</li>
112112
<li>Unique tasks (deduplication)</li>
113113
<li>Rate limiting</li>
114114
<li>Email support from the maintainer</li>
115115
<li>Requires Django 6.0 or later</li>
116116
</ul>
117-
<p class="note">All three are built and tested. Not yet on sale: the purchase path is still
118-
being set up, and the waitlist below is how to hear when it opens. Delivered from a private
119-
package index using credentials issued per company, with no licence key and no runtime check
117+
<p class="note">All three are built and tested. Pro is not on sale yet, and the waitlist
118+
below is how to hear when it opens. Delivered from a private
119+
package index using credentials issued per company, with no license key and no runtime check
120120
to break your production. Install stays <code>pip install</code>.</p>
121121
</div>
122122
</div>
@@ -136,7 +136,8 @@ <h2>Pricing, and the waitlist</h2>
136136
</form>
137137
<p id="form-error" hidden>That didn't go through. Check the address and try again.</p>
138138
<p class="privacy">Your email is used only to tell you when Pro launches. Reply
139-
"remove" and it is deleted.</p>
139+
"remove", or write to <a href="mailto:[email protected]">[email protected]</a>,
140+
and it is deleted.</p>
140141
</div>
141142
</section>
142143

@@ -146,28 +147,29 @@ <h2>Questions you should ask</h2>
146147
<h3>What is the license situation?</h3>
147148
<p>The worker itself, <span data-package>django-ox</span>, is BSD 3-Clause and stays
148149
that way. Pro is separate code under a commercial license, sold per company. The free
149-
tier is not a demo; it is the backend the docs mean when they say production systems
150+
tier is not a demo. It is the backend the docs mean when they say production systems
150151
need a durable queue and a worker process.</p>
151152

152153
<h3>When does this ship?</h3>
153154
<p>The open source worker is live: <code>pip install django-ox</code>, with
154155
<a href="https://oxpull.com/django-ox/">documentation here</a>. Pro is built and
155-
tested; what is left is the purchase path. Waitlist email is the announcement channel.</p>
156+
tested. What is left is the purchase path. Waitlist email is the announcement channel.</p>
156157

157158
<h3>Who is behind it?</h3>
158159
<p>An independent software vendor with one product: this one. You will know who
159160
maintains it, contracts get signed under the company name, and support answers come
160161
from the person who wrote the code.</p>
161162

162163
<h3>What does support look like?</h3>
163-
<p>Open source: GitHub issues, taken seriously. Pro: email support from
164-
the maintainer. If your procurement needs a PO and an invoice instead of a card,
165-
say so on the waitlist; invoiced purchasing is planned alongside self-serve.</p>
164+
<p>Open source support is on GitHub issues. Pro comes with email support from
165+
the maintainer at <a href="mailto:[email protected]">[email protected]</a>. If your
166+
procurement needs a PO and an invoice instead of a card, write to that address.
167+
Invoiced purchasing is planned alongside self-serve.</p>
166168

167169
<h3>Do I need Pro to run production?</h3>
168170
<p>No. Durability, retries, the reaper, and graceful shutdown are all in the free
169171
worker, and so are the stats API and the health command. Pro adds three
170-
things the free tier does not do: batching, deduplication and rate limiting.
172+
things the free tier does not do: batches, deduplication and rate limiting.
171173
Support comes with it. Pro needs Django 6.0 or later. The free worker also
172174
runs on Django 5.2 LTS through the <code>django-tasks</code> backport, and
173175
Pro does not.</p>

‎thanks.html‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919

2020
<main class="thanks">
2121
<h1>You're on the list</h1>
22-
<p>Expect one email: when Pro opens. Nothing else, ever, and a reply
23-
saying "remove" deletes your address. Meanwhile the open source worker is live:
22+
<p>You'll get one email, when Pro opens, and nothing else, ever. Reply "remove" to it, or
23+
write to <a href="mailto:[email protected]">[email protected]</a> at any time, and your
24+
address is deleted. Meanwhile the open source worker is live:
2425
<code>pip install django-ox</code>.</p>
2526
<p><a href="index.html">Back to the page</a></p>
2627
</main>

0 commit comments

Comments
 (0)