This commit is contained in:
Correl Roush 2021-10-01 17:48:18 -04:00
parent aad6b904ea
commit ae2bf8dff4
23 changed files with 268 additions and 74 deletions

View file

@ -2,3 +2,6 @@
:ID: 1882370a-e4df-42a3-ab5a-32b650b754a6
:END:
#+title: Static Typing
A property of a [[id:c90b53a0-62f7-4115-a417-85e22f55d83d][Type System]] such that types are verified at compile time, with
the goal of removing the need for runtime checks.

View file

@ -18,7 +18,7 @@ A lisp dialect of [[id:cda9c620-fec5-4549-b979-22fc06819d77][Python]].
Disassembling the above code generates the following Python equivalent.
#+begin_src hy :exports results :cache yes :wrap src python
#+begin_src hy :exports results :eval no-export :cache yes :wrap src python
(disassemble
(quote
(do
@ -31,7 +31,7 @@ Disassembling the above code generates the following Python equivalent.
True)
#+end_src
#+RESULTS[08e5153ad26dcf0fd8ca2a7c041eb26268461381]:
#+RESULTS[1efb8b1b457cd5e9ece84633e21daf77ea8e8753]:
#+begin_src python
from dataclasses import dataclass

View file

@ -1 +0,0 @@
#+title: Test

View file

@ -0,0 +1,161 @@
:PROPERTIES:
:ID: 3cc8bd09-dd02-4950-8c89-a737f92809fd
:header-args:bash: :dir ~/sites-clean :exports both
:header-args:python: :exports results
:END:
#+title: Tracking progress of moving pages out of Sites
* Metrics
#+caption: Migrated controllers in the CP
#+begin_src python :var total=controller-count done=js-controller-count :results file
import matplotlib.pyplot as plt
total = float(total)
fig1, ax1 = plt.subplots()
ax1.pie(
[100 * (total - done) / total, 100 * done / total],
explode=[0.0, 0.1],
labels=["Legacy", "JavaScript"],
autopct="%1.1f%%",
shadow=True,
startangle=90,
)
ax1.axis("equal")
plt.title("Controller Types")
filename = "controllers-migrated-in-sites.png"
plt.savefig(filename)
return filename
#+end_src
#+RESULTS:
[[file:controllers-migrated-in-sites.png]]
** Controllers in Sites
#+caption: Identifying the total number of public controllers in the CP
#+name: controller-count
#+begin_src bash
grep -l AppController aweber_app/controllers/*_controller.php | wc -l
#+end_src
#+RESULTS: controller-count
: 85
** Controllers loading JavaScript applications
#+caption: Identifying the number of controllers loading JS applications
#+name: js-controller-count
#+begin_src bash
egrep -l '\bappName\b' aweber_app/controllers/*_controller.php | wc -l
#+end_src
#+RESULTS: js-controller-count
: 24
* Progress over time
#+caption: Percentage of controllers migrated over time
#+begin_src python :var progress=progress :results file
from datetime import date
import matplotlib.pyplot as plt
progress = [[date.fromisoformat(row[0]), 100.0 * row[2] / row[1]] for row in progress]
x = [p[0] for p in progress]
y = [p[1] for p in progress]
plt.plot(x, y)
plt.fill_between(x, y, alpha=0.3)
plt.gcf().autofmt_xdate()
plt.title("% Controllers Migrated Over Time")
filename = "controllers-migrated-in-sites-over-time.png"
plt.savefig(filename)
return filename
#+end_src
#+RESULTS:
[[file:controllers-migrated-in-sites-over-time.png]]
#+caption: Identifying the last tagged release each month
#+name: tags
#+begin_src bash :results silent :exports code
git log --tags \
--simplify-by-decoration \
--pretty="format:%as#%S" \
--after="2018-01-01" \
| sort -r -u -t- -k1,2 # Last tag of each month
#+end_src
#+caption: Gathering progress over time
#+name: progress
#+begin_src bash :noweb yes :cache yes :exports code
controller_total () {
<<controller-count>>
}
controller_done () {
<<js-controller-count>>
}
tags () {
<<tags>>
}
git checkout -q master
for taginfo in $(tags); do
date=$(echo $taginfo | cut -d '#' -f 1)
tag=$(echo $taginfo | cut -d '#' -f 2)
git checkout $tag
echo $date $(controller_total) $(controller_done)
done
git checkout -q master
#+end_src
#+RESULTS[b2f17a7946c030068f7ef85189b10bd0c5cb6a0a]: progress
| 2021-09-30 | 85 | 24 |
| 2021-08-31 | 85 | 23 |
| 2021-07-28 | 85 | 23 |
| 2021-06-28 | 85 | 23 |
| 2021-05-27 | 85 | 23 |
| 2021-04-28 | 85 | 23 |
| 2021-03-04 | 84 | 22 |
| 2021-02-25 | 84 | 22 |
| 2021-01-28 | 83 | 16 |
| 2020-12-29 | 83 | 16 |
| 2020-11-20 | 83 | 16 |
| 2020-10-29 | 83 | 16 |
| 2020-09-30 | 83 | 16 |
| 2020-08-27 | 83 | 16 |
| 2020-07-31 | 83 | 16 |
| 2020-06-30 | 82 | 15 |
| 2020-05-29 | 81 | 15 |
| 2020-04-30 | 81 | 15 |
| 2020-03-31 | 81 | 15 |
| 2020-02-28 | 81 | 15 |
| 2020-01-30 | 82 | 15 |
| 2019-12-18 | 82 | 15 |
| 2019-11-25 | 82 | 15 |
| 2019-10-31 | 81 | 14 |
| 2019-09-30 | 81 | 14 |
| 2019-08-27 | 81 | 14 |
| 2019-07-31 | 81 | 14 |
| 2019-06-27 | 81 | 14 |
| 2019-05-31 | 81 | 14 |
| 2019-04-26 | 80 | 13 |
| 2019-03-29 | 79 | 13 |
| 2019-02-28 | 78 | 12 |
| 2019-01-30 | 78 | 12 |
| 2018-12-27 | 77 | 10 |
| 2018-11-29 | 76 | 10 |
| 2018-10-31 | 75 | 9 |
| 2018-09-28 | 75 | 9 |
| 2018-08-31 | 74 | 8 |
| 2018-07-26 | 74 | 8 |
| 2018-06-29 | 73 | 6 |
| 2018-05-31 | 73 | 6 |
| 2018-04-30 | 73 | 6 |
| 2018-03-29 | 73 | 6 |
| 2018-02-28 | 73 | 6 |
| 2018-01-24 | 73 | 6 |

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="242px" preserveAspectRatio="none" style="width:554px;height:242px;" version="1.1" viewBox="0 0 554 242" width="554px" zoomAndPan="magnify"><defs><filter height="300%" id="f1g5bqu9vn3r6s" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#DDDDDD" height="230.5293" style="stroke:#A80036;stroke-width:1.0;" width="85" x="395.5" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="53" x="411.5" y="18.5684">Internal</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="132" x2="132" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="437.5" x2="437.5" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="515.5" x2="515.5" y1="60.7988" y2="198.041"/><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="45.8457">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="217.5762">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="73" x="399.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="59" x="406.5" y="45.8457">Core API</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="73" x="399.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="59" x="406.5" y="217.5762">Core API</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="486.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="493.5" y="45.8457">Stripe</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="486.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="493.5" y="217.5762">Stripe</text><polygon fill="#A80036" points="143,88.1094,133,92.1094,143,96.1094,139,92.1094" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="137" x2="514.5" y1="92.1094" y2="92.1094"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="359" x="149" y="87.3672">POST /stripe/webhooks (customer.subscription.updated)</text><polygon fill="#A80036" points="503.5,117.4199,513.5,121.4199,503.5,125.4199,507.5,121.4199" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="509.5" y1="121.4199" y2="121.4199"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="149" x="139" y="116.6777">Fetch product metadata</text><polygon fill="#A80036" points="426,146.7305,436,150.7305,426,154.7305,430,150.7305" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="432" y1="150.7305" y2="150.7305"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="282" x="139" y="145.9883">Remove tags from subscriber or unsubscribe</text><polygon fill="#A80036" points="503.5,176.041,513.5,180.041,503.5,184.041,507.5,180.041" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="509.5" y1="180.041" y2="180.041"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46" x="139" y="175.2988">200 OK</text><!--MD5=[ad97cdfe8b8290a77b1ba215f8dc6abf]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="242px" preserveAspectRatio="none" style="width:554px;height:242px;background:#FFFFFF;" version="1.1" viewBox="0 0 554 242" width="554px" zoomAndPan="magnify"><defs><filter height="300%" id="f1g5bqu9vn3r6s" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#DDDDDD" height="230.5293" style="stroke:#A80036;stroke-width:1.0;" width="85" x="395.5" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="53" x="411.5" y="18.5684">Internal</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="132" x2="132" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="437.5" x2="437.5" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="515.5" x2="515.5" y1="60.7988" y2="198.041"/><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="45.8457">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="217.5762">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="73" x="399.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="59" x="406.5" y="45.8457">Core API</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="73" x="399.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="59" x="406.5" y="217.5762">Core API</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="486.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="493.5" y="45.8457">Stripe</text><rect fill="#FEFECE" filter="url(#f1g5bqu9vn3r6s)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="486.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="493.5" y="217.5762">Stripe</text><polygon fill="#A80036" points="143,88.1094,133,92.1094,143,96.1094,139,92.1094" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="137" x2="514.5" y1="92.1094" y2="92.1094"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="359" x="149" y="87.3672">POST /stripe/webhooks (customer.subscription.updated)</text><polygon fill="#A80036" points="503.5,117.4199,513.5,121.4199,503.5,125.4199,507.5,121.4199" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="509.5" y1="121.4199" y2="121.4199"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="149" x="139" y="116.6777">Fetch product metadata</text><polygon fill="#A80036" points="426,146.7305,436,150.7305,426,154.7305,430,150.7305" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="432" y1="150.7305" y2="150.7305"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="282" x="139" y="145.9883">Remove tags from subscriber or unsubscribe</text><polygon fill="#A80036" points="503.5,176.041,513.5,180.041,503.5,184.041,507.5,180.041" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="509.5" y1="180.041" y2="180.041"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46" x="139" y="175.2988">200 OK</text><!--MD5=[550573097974f7680661b673e70c4d3c]
@startuml
participant "Stripe Payments (Unauthenticated)" as sp
box "Internal"
@ -12,7 +12,7 @@ sp -> capi : Remove tags from subscriber or unsubscribe
sp -> stripe : 200 OK
@enduml
PlantUML version 1.2021.00(Sun Jan 10 05:25:05 EST 2021)
PlantUML version 1.2021.10(Mon Aug 30 09:43:48 EDT 2021)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="242px" preserveAspectRatio="none" style="width:638px;height:242px;" version="1.1" viewBox="0 0 638 242" width="638px" zoomAndPan="magnify"><defs><filter height="300%" id="fd0b0cv41yrbd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#DDDDDD" height="230.5293" style="stroke:#A80036;stroke-width:1.0;" width="93" x="471.5" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="53" x="491.5" y="18.5684">Internal</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="132" x2="132" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="517.5" x2="517.5" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="599.5" x2="599.5" y1="60.7988" y2="198.041"/><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="45.8457">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="217.5762">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="81" x="475.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="482.5" y="45.8457">RabbitMQ</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="81" x="475.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="482.5" y="217.5762">RabbitMQ</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="570.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="577.5" y="45.8457">Stripe</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="570.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="577.5" y="217.5762">Stripe</text><polygon fill="#A80036" points="143,88.1094,133,92.1094,143,96.1094,139,92.1094" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="137" x2="598.5" y1="92.1094" y2="92.1094"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="330" x="149" y="87.3672">POST /stripe/webhooks (payment_intent.succeeded)</text><polygon fill="#A80036" points="506,117.4199,516,121.4199,506,125.4199,510,121.4199" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="512" y1="121.4199" y2="121.4199"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="215" x="139" y="116.6777">Sales tracking event (pageview.v4)</text><polygon fill="#A80036" points="506,146.7305,516,150.7305,506,154.7305,510,150.7305" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="512" y1="150.7305" y2="150.7305"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="362" x="139" y="145.9883">Payment succeeded event (stripe_payment_succeeded.v1)</text><polygon fill="#A80036" points="587.5,176.041,597.5,180.041,587.5,184.041,591.5,180.041" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="593.5" y1="180.041" y2="180.041"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46" x="139" y="175.2988">200 OK</text><!--MD5=[407d974f4df3412fe8be153d8bb2d58c]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="242px" preserveAspectRatio="none" style="width:638px;height:242px;background:#FFFFFF;" version="1.1" viewBox="0 0 638 242" width="638px" zoomAndPan="magnify"><defs><filter height="300%" id="fd0b0cv41yrbd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#DDDDDD" height="230.5293" style="stroke:#A80036;stroke-width:1.0;" width="93" x="471.5" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="53" x="491.5" y="18.5684">Internal</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="132" x2="132" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="517.5" x2="517.5" y1="60.7988" y2="198.041"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="599.5" x2="599.5" y1="60.7988" y2="198.041"/><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="45.8457">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="250" x="5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="236" x="12" y="217.5762">Stripe Payments (Unauthenticated)</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="81" x="475.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="482.5" y="45.8457">RabbitMQ</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="81" x="475.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="482.5" y="217.5762">RabbitMQ</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="570.5" y="25.3105"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="577.5" y="45.8457">Stripe</text><rect fill="#FEFECE" filter="url(#fd0b0cv41yrbd)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="54" x="570.5" y="197.041"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="577.5" y="217.5762">Stripe</text><polygon fill="#A80036" points="143,88.1094,133,92.1094,143,96.1094,139,92.1094" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="137" x2="598.5" y1="92.1094" y2="92.1094"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="330" x="149" y="87.3672">POST /stripe/webhooks (payment_intent.succeeded)</text><polygon fill="#A80036" points="506,117.4199,516,121.4199,506,125.4199,510,121.4199" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="512" y1="121.4199" y2="121.4199"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="215" x="139" y="116.6777">Sales tracking event (pageview.v4)</text><polygon fill="#A80036" points="506,146.7305,516,150.7305,506,154.7305,510,150.7305" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="512" y1="150.7305" y2="150.7305"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="362" x="139" y="145.9883">Payment succeeded event (stripe_payment_succeeded.v1)</text><polygon fill="#A80036" points="587.5,176.041,597.5,180.041,587.5,184.041,591.5,180.041" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="132" x2="593.5" y1="180.041" y2="180.041"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46" x="139" y="175.2988">200 OK</text><!--MD5=[75ac5feda4e5cecbf340b2717033f540]
@startuml
participant "Stripe Payments (Unauthenticated)" as sp
box "Internal"
@ -12,7 +12,7 @@ sp -> amqp : Payment succeeded event (stripe_payment_succeeded.v1)
sp -> stripe : 200 OK
@enduml
PlantUML version 1.2021.00(Sun Jan 10 05:25:05 EST 2021)
PlantUML version 1.2021.10(Mon Aug 30 09:43:48 EDT 2021)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="198px" preserveAspectRatio="none" style="width:269px;height:198px;" version="1.1" viewBox="0 0 269 198" width="269px" zoomAndPan="magnify"><defs><filter height="300%" id="fymc1q9d4g4fl" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="44" cy="32" fill="#000000" filter="url(#fymc1q9d4g4fl)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="89" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="89" x2="139" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="99.5" y="25.5352">New</text></g><g id="Paid"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="7" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="7" x2="57" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="17.5" y="152.5352">Paid</text></g><g id="Failed"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="61" x="166.5" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="166.5" x2="227.5" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="176.5" y="152.5352">Failed</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="198px" preserveAspectRatio="none" style="width:269px;height:198px;background:#FFFFFF;" version="1.1" viewBox="0 0 269 198" width="269px" zoomAndPan="magnify"><defs><filter height="300%" id="fymc1q9d4g4fl" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="44" cy="32" fill="#000000" filter="url(#fymc1q9d4g4fl)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="89" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="89" x2="139" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="99.5" y="25.5352">New</text></g><g id="Paid"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="7" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="7" x2="57" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="17.5" y="152.5352">Paid</text></g><g id="Failed"><rect fill="#FEFECE" filter="url(#fymc1q9d4g4fl)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="61" x="166.5" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="166.5" x2="227.5" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="176.5" y="152.5352">Failed</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
link *start to New--><path d="M54.12,32 C63.94,32 73.77,32 83.6,32 " fill="none" id="*start-to-New" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="88.74,32,79.74,28,83.74,32,79.74,36,88.74,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[248cfbdb1094300370a1d70a64b46375]
link New to Paid--><path d="M88.97,47.24 C65.13,61.06 32.39,80.83 29,87 C22.13,99.5 22.08,115.2 24.09,128.65 " fill="none" id="New-to-Paid" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="24.99,133.88,27.4157,124.3345,24.1472,128.9515,19.5301,125.6831,24.99,133.88" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="123" x="30" y="100.5684">Payment succeeded</text><!--MD5=[cb481be5d4f5cd6698b94d961c2951ad]
link New to Failed--><path d="M135.13,57.01 C142.72,66.12 151.11,76.77 158,87 C166.96,100.3 175.67,115.83 182.58,128.97 " fill="none" id="New-to-Failed" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="185.05,133.7,184.4397,123.8701,182.7401,129.2656,177.3446,127.5659,185.05,133.7" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="92" x="169" y="100.5684">Payment failed</text><!--MD5=[f72f4d324b90c1fdd622b8cfdc11261e]
link New to Failed--><path d="M135.13,57.01 C142.72,66.12 151.11,76.77 158,87 C166.96,100.3 175.67,115.83 182.58,128.97 " fill="none" id="New-to-Failed" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="185.05,133.7,184.4397,123.8701,182.7401,129.2656,177.3446,127.5659,185.05,133.7" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="92" x="169" y="100.5684">Payment failed</text><!--MD5=[8abc9306c2401283aba854e8dc9c7290]
@startuml
[*] -> New
New - -> Paid : Payment succeeded
New - -> Failed : Payment failed
@enduml
PlantUML version 1.2021.00(Sun Jan 10 05:25:05 EST 2021)
PlantUML version 1.2021.10(Mon Aug 30 09:43:48 EDT 2021)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="71px" preserveAspectRatio="none" style="width:235px;height:71px;" version="1.1" viewBox="0 0 235 71" width="235px" zoomAndPan="magnify"><defs><filter height="300%" id="ft23wx4e5csov" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="32" fill="#000000" filter="url(#ft23wx4e5csov)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#ft23wx4e5csov)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="61" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="61" x2="111" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="71.5" y="25.5352">New</text></g><g id="Fulfilled"><rect fill="#FEFECE" filter="url(#ft23wx4e5csov)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="75" x="146.5" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="146.5" x2="221.5" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="156.5" y="25.5352">Fulfilled</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="71px" preserveAspectRatio="none" style="width:235px;height:71px;background:#FFFFFF;" version="1.1" viewBox="0 0 235 71" width="235px" zoomAndPan="magnify"><defs><filter height="300%" id="ft23wx4e5csov" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="32" fill="#000000" filter="url(#ft23wx4e5csov)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#ft23wx4e5csov)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="61" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="61" x2="111" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="71.5" y="25.5352">New</text></g><g id="Fulfilled"><rect fill="#FEFECE" filter="url(#ft23wx4e5csov)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="75" x="146.5" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="146.5" x2="221.5" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="156.5" y="25.5352">Fulfilled</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
link *start to New--><path d="M26.12,32 C35.94,32 45.77,32 55.6,32 " fill="none" id="*start-to-New" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="60.74,32,51.74,28,55.74,32,51.74,36,60.74,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[5d9ac0cc099169aa53dab4ce2ad0bcdf]
link New to Fulfilled--><path d="M111.27,32 C121.27,32 131.27,32 141.27,32 " fill="none" id="New-to-Fulfilled" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="146.5,32,137.5,28,141.5,32,137.5,36,146.5,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[8337f11062fc7bb204c44793897c8040]
link New to Fulfilled--><path d="M111.27,32 C121.27,32 131.27,32 141.27,32 " fill="none" id="New-to-Fulfilled" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="146.5,32,137.5,28,141.5,32,137.5,36,146.5,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[021324cd1b3d5e354e6c41a5354a784f]
@startuml
[*] -> New
New -> Fulfilled
@enduml
PlantUML version 1.2021.00(Sun Jan 10 05:25:05 EST 2021)
PlantUML version 1.2021.10(Mon Aug 30 09:43:48 EDT 2021)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="198px" preserveAspectRatio="none" style="width:395px;height:198px;" version="1.1" viewBox="0 0 395 198" width="395px" zoomAndPan="magnify"><defs><filter height="300%" id="fn9yatwmacn7p" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="32" fill="#000000" filter="url(#fn9yatwmacn7p)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="61" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="61" x2="111" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="71.5" y="25.5352">New</text></g><g id="Active"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="61" x="169.5" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="169.5" x2="230.5" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="179.5" y="25.5352">Active</text></g><g id="Terminated"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="99" x="150.5" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="150.5" x2="249.5" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="79" x="160.5" y="152.5352">Terminated</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="198px" preserveAspectRatio="none" style="width:395px;height:198px;background:#FFFFFF;" version="1.1" viewBox="0 0 395 198" width="395px" zoomAndPan="magnify"><defs><filter height="300%" id="fn9yatwmacn7p" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="32" fill="#000000" filter="url(#fn9yatwmacn7p)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><g id="New"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="50" x="61" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="61" x2="111" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="71.5" y="25.5352">New</text></g><g id="Active"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="61" x="169.5" y="7"/><line style="stroke:#A80036;stroke-width:1.5;" x1="169.5" x2="230.5" y1="33.4883" y2="33.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41" x="179.5" y="25.5352">Active</text></g><g id="Terminated"><rect fill="#FEFECE" filter="url(#fn9yatwmacn7p)" height="50" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:1.5;" width="99" x="150.5" y="134"/><line style="stroke:#A80036;stroke-width:1.5;" x1="150.5" x2="249.5" y1="160.4883" y2="160.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="79" x="160.5" y="152.5352">Terminated</text></g><!--MD5=[b801211b1cf3cc2d27e45a912a639925]
link *start to New--><path d="M26.12,32 C35.94,32 45.77,32 55.6,32 " fill="none" id="*start-to-New" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="60.74,32,51.74,28,55.74,32,51.74,36,60.74,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[7add0a041df65cbaf5eda635fe656769]
link New to Active--><path d="M111.38,32 C128.85,32 146.31,32 163.77,32 " fill="none" id="New-to-Active" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="169.19,32,160.19,28,164.19,32,160.19,36,169.19,32" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[d1011ee76343bf54a89fc5ee8188cc62]
link Active to Terminated--><path d="M198.13,57.31 C197.29,71.02 196.57,88.46 197,104 C197.22,111.93 197.62,120.51 198.06,128.44 " fill="none" id="Active-to-Terminated" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="198.37,133.82,201.8485,124.6059,198.0839,128.8282,193.8616,125.0636,198.37,133.82" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="94" x="198" y="100.5684">Payment Failed</text><!--MD5=[d1011ee76343bf54a89fc5ee8188cc62]
link Active to Terminated--><path d="M230.66,41.01 C265.44,51.77 315.14,73.14 297,104 C287.45,120.25 271.04,131.97 254.4,140.24 " fill="none" id="Active-to-Terminated-1" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="249.71,142.48,259.5551,142.2087,254.2214,140.3242,256.1059,134.9905,249.71,142.48" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="86" x="301" y="100.5684">Unsubscribed</text><!--MD5=[63b3c870cfc694cf40336563ee7fed3c]
link New to Terminated--><path d="M82.85,57.01 C82.16,71.78 83.69,90.41 93,104 C105.42,122.12 125.79,134.47 145.44,142.74 " fill="none" id="New-to-Terminated" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="150.41,144.76,143.5844,137.66,145.7795,142.8735,140.566,145.0687,150.41,144.76" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="94" x="94" y="100.5684">Payment Failed</text><!--MD5=[a4ca0cb7c35d5186987020697bc0a913]
link New to Terminated--><path d="M82.85,57.01 C82.16,71.78 83.69,90.41 93,104 C105.42,122.12 125.79,134.47 145.44,142.74 " fill="none" id="New-to-Terminated" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="150.41,144.76,143.5844,137.66,145.7795,142.8735,140.566,145.0687,150.41,144.76" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="94" x="94" y="100.5684">Payment Failed</text><!--MD5=[f3ad4c8a141dc75a8c0508ae70096e94]
@startuml
[*] -> New
New -> Active
@ -12,7 +12,7 @@ Active - -> Terminated : Unsubscribed
New - -> Terminated : Payment Failed
@enduml
PlantUML version 1.2021.00(Sun Jan 10 05:25:05 EST 2021)
PlantUML version 1.2021.10(Mon Aug 30 09:43:48 EDT 2021)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -20,6 +20,9 @@ The customer asked whether the report would allow for larger time windows in the
near future, to which we do not have an immediate answer.
** Setting up a subscription-based newsletter
:PROPERTIES:
:ID: cc7f34e2-f07e-4a1b-92de-c5ec51cac172
:END:
The customer wants to sell a subscription-based newsletter. They are unclear on
whether broadcasts or campaigns would be best for this, and would like to use
broadcasts as those have publicly exposed archive links available.

24
daily/2021-09-30.org Normal file
View file

@ -0,0 +1,24 @@
:PROPERTIES:
:ID: d07a937b-a722-403c-a165-e2bbe9adcb11
:END:
#+title: 2021-09-30
* Talking about analytics reporting and tagging with Gavin
** Analytics view
Long-term goal (since 2014) is to move analytics to be pre-materialized using
stream processing.
The analytics view is intended to be the place a system goes to to retreive the
view of analytics it needs (e.g. hundreds of endpoints for specific use cases).
As a first step, we can set up a service hosting endpoints for our reporting
needs, and gradually evolve that into an analytics reporting service with
performant materialized views backing it.
** Tagging
- Campaigns processes one action per subscriber at a time, locking it.
- Tagging queues have priorities.
- Have tagging operations with multiple tags emit events for each tag in the
operation at different priorities, thus spreading out actions applied to a
particular subscriber and reducing contention.
- Have bulk tagging jobs apply at a different priority?

4
daily/2021-10-01.org Normal file
View file

@ -0,0 +1,4 @@
:PROPERTIES:
:ID: 007d77c3-6b24-47c7-9ea4-3b25db9ef154
:END:
#+title: 2021-10-01

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -1,126 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.47.1 (20210417.1919)
<!-- Generated by graphviz version 2.48.0 (20210717.1556)
-->
<!-- Pages: 1 -->
<svg width="856pt" height="260pt"
viewBox="0.00 0.00 855.94 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="875pt" height="260pt"
viewBox="0.00 0.00 874.84 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 851.94,-256 851.94,4 -4,4"/>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 870.84,-256 870.84,4 -4,4"/>
<!-- OpenAPIError -->
<g id="node1" class="node">
<title>OpenAPIError</title>
<ellipse fill="none" stroke="black" cx="176.85" cy="-234" rx="62.29" ry="18"/>
<text text-anchor="middle" x="176.85" y="-230.3" font-family="Times,serif" font-size="14.00">OpenAPIError</text>
<ellipse fill="none" stroke="black" cx="181.15" cy="-234" rx="64.19" ry="18"/>
<text text-anchor="middle" x="181.15" y="-230.3" font-family="Times,serif" font-size="14.00">OpenAPIError</text>
</g>
<!-- CastError -->
<g id="node2" class="node">
<title>CastError</title>
<ellipse fill="none" stroke="black" cx="44.85" cy="-162" rx="44.69" ry="18"/>
<text text-anchor="middle" x="44.85" y="-158.3" font-family="Times,serif" font-size="14.00">CastError</text>
<ellipse fill="none" stroke="black" cx="46.15" cy="-162" rx="46.29" ry="18"/>
<text text-anchor="middle" x="46.15" y="-158.3" font-family="Times,serif" font-size="14.00">CastError</text>
</g>
<!-- OpenAPIError&#45;&gt;CastError -->
<g id="edge1" class="edge">
<title>OpenAPIError&#45;&gt;CastError</title>
<path fill="none" stroke="black" d="M148.2,-217.81C128.12,-207.16 101.17,-192.87 79.82,-181.55"/>
<polygon fill="black" stroke="black" points="81.22,-178.33 70.75,-176.74 77.94,-184.51 81.22,-178.33"/>
<path fill="none" stroke="black" d="M151.85,-217.81C131.36,-207.19 103.86,-192.93 82.05,-181.62"/>
<polygon fill="black" stroke="black" points="83.58,-178.47 73.09,-176.97 80.35,-184.68 83.58,-178.47"/>
</g>
<!-- DeserializeError -->
<g id="node3" class="node">
<title>DeserializeError</title>
<ellipse fill="none" stroke="black" cx="176.85" cy="-162" rx="68.79" ry="18"/>
<text text-anchor="middle" x="176.85" y="-158.3" font-family="Times,serif" font-size="14.00">DeserializeError</text>
<ellipse fill="none" stroke="black" cx="181.15" cy="-162" rx="70.69" ry="18"/>
<text text-anchor="middle" x="181.15" y="-158.3" font-family="Times,serif" font-size="14.00">DeserializeError</text>
</g>
<!-- OpenAPIError&#45;&gt;DeserializeError -->
<g id="edge2" class="edge">
<title>OpenAPIError&#45;&gt;DeserializeError</title>
<path fill="none" stroke="black" d="M176.85,-215.7C176.85,-207.98 176.85,-198.71 176.85,-190.11"/>
<polygon fill="black" stroke="black" points="180.35,-190.1 176.85,-180.1 173.35,-190.1 180.35,-190.1"/>
<path fill="none" stroke="black" d="M181.15,-215.7C181.15,-207.98 181.15,-198.71 181.15,-190.11"/>
<polygon fill="black" stroke="black" points="184.65,-190.1 181.15,-180.1 177.65,-190.1 184.65,-190.1"/>
</g>
<!-- UnmarshalError -->
<g id="node5" class="node">
<title>UnmarshalError</title>
<ellipse fill="none" stroke="black" cx="337.85" cy="-162" rx="68.49" ry="18"/>
<text text-anchor="middle" x="337.85" y="-158.3" font-family="Times,serif" font-size="14.00">UnmarshalError</text>
<ellipse fill="none" stroke="black" cx="345.15" cy="-162" rx="69.59" ry="18"/>
<text text-anchor="middle" x="345.15" y="-158.3" font-family="Times,serif" font-size="14.00">UnmarshalError</text>
</g>
<!-- OpenAPIError&#45;&gt;UnmarshalError -->
<g id="edge4" class="edge">
<title>OpenAPIError&#45;&gt;UnmarshalError</title>
<path fill="none" stroke="black" d="M209.82,-218.67C234.31,-208.01 267.96,-193.38 294.62,-181.8"/>
<polygon fill="black" stroke="black" points="296.31,-184.87 304.09,-177.68 293.52,-178.45 296.31,-184.87"/>
<path fill="none" stroke="black" d="M215.13,-218.5C240.14,-207.82 274.35,-193.22 301.4,-181.67"/>
<polygon fill="black" stroke="black" points="302.82,-184.87 310.64,-177.73 300.07,-178.43 302.82,-184.87"/>
</g>
<!-- EmptyParameterValue -->
<g id="node4" class="node">
<title>EmptyParameterValue</title>
<ellipse fill="none" stroke="black" cx="170.85" cy="-90" rx="90.98" ry="18"/>
<text text-anchor="middle" x="170.85" y="-86.3" font-family="Times,serif" font-size="14.00">EmptyParameterValue</text>
<ellipse fill="none" stroke="black" cx="175.15" cy="-90" rx="92.08" ry="18"/>
<text text-anchor="middle" x="175.15" y="-86.3" font-family="Times,serif" font-size="14.00">EmptyParameterValue</text>
</g>
<!-- DeserializeError&#45;&gt;EmptyParameterValue -->
<g id="edge3" class="edge">
<title>DeserializeError&#45;&gt;EmptyParameterValue</title>
<path fill="none" stroke="black" d="M175.36,-143.7C174.7,-135.98 173.91,-126.71 173.17,-118.11"/>
<polygon fill="black" stroke="black" points="176.65,-117.77 172.31,-108.1 169.68,-118.37 176.65,-117.77"/>
<path fill="none" stroke="black" d="M179.66,-143.7C179,-135.98 178.21,-126.71 177.47,-118.11"/>
<polygon fill="black" stroke="black" points="180.95,-117.77 176.61,-108.1 173.98,-118.37 180.95,-117.77"/>
</g>
<!-- ValidateError -->
<g id="node6" class="node">
<title>ValidateError</title>
<ellipse fill="none" stroke="black" cx="337.85" cy="-90" rx="57.69" ry="18"/>
<text text-anchor="middle" x="337.85" y="-86.3" font-family="Times,serif" font-size="14.00">ValidateError</text>
<ellipse fill="none" stroke="black" cx="345.15" cy="-90" rx="59.59" ry="18"/>
<text text-anchor="middle" x="345.15" y="-86.3" font-family="Times,serif" font-size="14.00">ValidateError</text>
</g>
<!-- UnmarshalError&#45;&gt;ValidateError -->
<g id="edge5" class="edge">
<title>UnmarshalError&#45;&gt;ValidateError</title>
<path fill="none" stroke="black" d="M337.85,-143.7C337.85,-135.98 337.85,-126.71 337.85,-118.11"/>
<polygon fill="black" stroke="black" points="341.35,-118.1 337.85,-108.1 334.35,-118.1 341.35,-118.1"/>
<path fill="none" stroke="black" d="M345.15,-143.7C345.15,-135.98 345.15,-126.71 345.15,-118.11"/>
<polygon fill="black" stroke="black" points="348.65,-118.1 345.15,-108.1 341.65,-118.1 348.65,-118.1"/>
</g>
<!-- UnmarshallerError -->
<g id="node7" class="node">
<title>UnmarshallerError</title>
<ellipse fill="none" stroke="black" cx="519.85" cy="-90" rx="77.19" ry="18"/>
<text text-anchor="middle" x="519.85" y="-86.3" font-family="Times,serif" font-size="14.00">UnmarshallerError</text>
<ellipse fill="none" stroke="black" cx="531.15" cy="-90" rx="79.09" ry="18"/>
<text text-anchor="middle" x="531.15" y="-86.3" font-family="Times,serif" font-size="14.00">UnmarshallerError</text>
</g>
<!-- UnmarshalError&#45;&gt;UnmarshallerError -->
<g id="edge6" class="edge">
<title>UnmarshalError&#45;&gt;UnmarshallerError</title>
<path fill="none" stroke="black" d="M374.68,-146.83C402.7,-136.06 441.5,-121.13 471.94,-109.43"/>
<polygon fill="black" stroke="black" points="473.43,-112.6 481.5,-105.75 470.91,-106.07 473.43,-112.6"/>
<path fill="none" stroke="black" d="M382.79,-146.83C411.55,-136.01 451.42,-121 482.59,-109.27"/>
<polygon fill="black" stroke="black" points="483.83,-112.55 491.96,-105.75 481.37,-105.99 483.83,-112.55"/>
</g>
<!-- InvalidSchemaValue -->
<g id="node8" class="node">
<title>InvalidSchemaValue</title>
<ellipse fill="none" stroke="black" cx="307.85" cy="-18" rx="83.69" ry="18"/>
<text text-anchor="middle" x="307.85" y="-14.3" font-family="Times,serif" font-size="14.00">InvalidSchemaValue</text>
<ellipse fill="none" stroke="black" cx="315.15" cy="-18" rx="85.59" ry="18"/>
<text text-anchor="middle" x="315.15" y="-14.3" font-family="Times,serif" font-size="14.00">InvalidSchemaValue</text>
</g>
<!-- ValidateError&#45;&gt;InvalidSchemaValue -->
<g id="edge7" class="edge">
<title>ValidateError&#45;&gt;InvalidSchemaValue</title>
<path fill="none" stroke="black" d="M330.58,-72.05C327.17,-64.09 323.02,-54.41 319.21,-45.51"/>
<polygon fill="black" stroke="black" points="322.41,-44.09 315.25,-36.28 315.97,-46.85 322.41,-44.09"/>
<path fill="none" stroke="black" d="M337.88,-72.05C334.47,-64.09 330.32,-54.41 326.51,-45.51"/>
<polygon fill="black" stroke="black" points="329.71,-44.09 322.55,-36.28 323.27,-46.85 329.71,-44.09"/>
</g>
<!-- InvalidSchemaFormatValue -->
<g id="node9" class="node">
<title>InvalidSchemaFormatValue</title>
<ellipse fill="none" stroke="black" cx="519.85" cy="-18" rx="109.68" ry="18"/>
<text text-anchor="middle" x="519.85" y="-14.3" font-family="Times,serif" font-size="14.00">InvalidSchemaFormatValue</text>
<ellipse fill="none" stroke="black" cx="531.15" cy="-18" rx="112.38" ry="18"/>
<text text-anchor="middle" x="531.15" y="-14.3" font-family="Times,serif" font-size="14.00">InvalidSchemaFormatValue</text>
</g>
<!-- UnmarshallerError&#45;&gt;InvalidSchemaFormatValue -->
<g id="edge8" class="edge">
<title>UnmarshallerError&#45;&gt;InvalidSchemaFormatValue</title>
<path fill="none" stroke="black" d="M519.85,-71.7C519.85,-63.98 519.85,-54.71 519.85,-46.11"/>
<polygon fill="black" stroke="black" points="523.35,-46.1 519.85,-36.1 516.35,-46.1 523.35,-46.1"/>
<path fill="none" stroke="black" d="M531.15,-71.7C531.15,-63.98 531.15,-54.71 531.15,-46.11"/>
<polygon fill="black" stroke="black" points="534.65,-46.1 531.15,-36.1 527.65,-46.1 534.65,-46.1"/>
</g>
<!-- FormatterNotFoundError -->
<g id="node10" class="node">
<title>FormatterNotFoundError</title>
<ellipse fill="none" stroke="black" cx="747.85" cy="-18" rx="100.18" ry="18"/>
<text text-anchor="middle" x="747.85" y="-14.3" font-family="Times,serif" font-size="14.00">FormatterNotFoundError</text>
<ellipse fill="none" stroke="black" cx="764.15" cy="-18" rx="102.88" ry="18"/>
<text text-anchor="middle" x="764.15" y="-14.3" font-family="Times,serif" font-size="14.00">FormatterNotFoundError</text>
</g>
<!-- UnmarshallerError&#45;&gt;FormatterNotFoundError -->
<g id="edge9" class="edge">
<title>UnmarshallerError&#45;&gt;FormatterNotFoundError</title>
<path fill="none" stroke="black" d="M564.62,-75.25C600.49,-64.24 651.07,-48.71 690,-36.76"/>
<polygon fill="black" stroke="black" points="691.1,-40.08 699.63,-33.8 689.04,-33.39 691.1,-40.08"/>
<path fill="none" stroke="black" d="M576.9,-75.25C613.63,-64.22 665.46,-48.65 705.28,-36.68"/>
<polygon fill="black" stroke="black" points="706.3,-40.03 714.87,-33.8 704.29,-33.33 706.3,-40.03"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB