This commit is contained in:
Correl Roush 2022-03-30 09:52:04 -04:00
parent 938c7eb898
commit a5fb2d40f6
5 changed files with 194 additions and 0 deletions

View file

@ -38,7 +38,27 @@
:PROPERTIES:
:JIRA_ID: CCPANEL-11694
:END:
*** Remove dependency on AWLists from Stripe
**** Stripe master branch does not allow null values in product recurrence
:PROPERTIES:
:JIRA_ID: CCPANEL-12072
:END:
*** Remove dependency on AWLists from Subscriber Import
:PROPERTIES:
:JIRA_ID: CCPANEL-12071
:END:
**** Update Subscriber Import client to fetch list data from the new lists service
:PROPERTIES:
:JIRA_ID: CCPANEL-12073
:END:
*** Remove dependency on AWLists from Sites
:PROPERTIES:
:JIRA_ID: CCPANEL-12074
:END:
*** Remove dependency on AWLists from Email Verification
:PROPERTIES:
:JIRA_ID: CCPANEL-12070
:END:
** Retire AWSubscribers in favor of Recipient
*** Back Recipient with AppDB
*** Retire sync consumers
@ -70,3 +90,6 @@ https://jira.aweber.io/browse/TRAC-118
- User Management
- Stripe Payments
- Commissions Processor
* Ongoing
** Update project configuration and gitlab pathing to match our taxonomies in Imbi.

View file

@ -0,0 +1,29 @@
:PROPERTIES:
:ID: e97adcf4-86ad-4d97-9c63-41476b52b111
:END:
#+title: Identifying active accounts
A query to identify active accounts in [[id:dd113e53-6144-4cb2-a4aa-da3dc2e3e6ea][AppDB]]
Per [[file:~/git/appdb/functions/coreapi_account/get_account_status.yaml][coreapi_account.get_account_status]]:
#+begin_src sql :exports code :eval never
CREATE FUNCTION coreapi_account.get_account_status(in_account_id integer) RETURNS coreapi_account.account_status
LANGUAGE sql STRICT
AS $_$
SELECT accounts.status_id,
accounts.status_id = 7,
CASE accounts.status_id
WHEN 1 THEN 'New Order'
WHEN 4 THEN 'Unpaid - Un-notified'
WHEN 5 THEN 'Paid'
WHEN 6 THEN 'Unpaid - Notified'
WHEN 7 THEN 'Cancelled'
WHEN 8 THEN 'Unpaid - Overdue'
WHEN 9 THEN 'Place Holder'
ELSE 'Unknown'
END
FROM public.accounts
WHERE accounts.a_id = $1;
#+end_src

View file

@ -211,3 +211,6 @@ event. This is to ensure the campaign is only triggered when the subscriber is
/being tagged/ with one of the chosen tags. This check will have to be made
tag-aware such that it normalizes the values before comparing them if and only
if the event being compared is a =tag.v1= event.
Updated =rulesengine= in
https://gitlab.aweber.io/CC/Libraries/rulesengine/-/merge_requests/117.

56
daily/2022-03-23.org Normal file
View file

@ -0,0 +1,56 @@
:PROPERTIES:
:ID: d1aeb8df-b5f0-48a3-970a-d6b7f94415ba
:END:
#+title: 2022-03-23
* Testing tag normalization on comparison changes
Testing [[id:d06d3ab4-c2d0-47c3-aae1-4395567fc3d2][Tag Normalization]] changes in campaigns and subscriber search that
normalizes tag values when comparing them.
- Campaigns should trigger on normalized and non-normalized tags as if they were
the same tag
- Campaigns should ignore subscribers having normalized and non-normalized tags
as if they were the same tag
- Subscriber search should return subscribers having normalized and
non-normalized tags as if they were the same tag for each tag operator
- Broadcasts should be sent to all subscribers on a segment matching the
selected tag filters as if normalized and non-normalized tags were the same
tag
#+CAPTION: Campaign Triggers
| | Campaign trigger | Campaign triggers except |
|----------------------------------+------------------+--------------------------|
| Valid tag | Pass | Pass |
| Repeated embedded spaces | Pass | Pass |
| Leading / trailing space | Pass | Pass |
| Non-printable control characters | Pass | Pass |
| Commas | Pass | Pass |
| Quotation marks | Pass | Pass |
#+CAPTION: Subscriber Search
| | Tag is | Tag is not | Tag is any of | Tag includes all of |
|----------------------------------+--------+------------+---------------+---------------------|
| Normalized tag | Pass | Pass | Pass | Pass |
| Repeated embedded spaces | Pass | Pass | Pass | Pass |
| Leading / trailing space | Pass | Pass | Pass | Pass |
| Non-printable control characters | Pass | Pass | Pass | Pass |
| Commas | Pass | Pass | Pass | Pass |
| Quotation marks | Pass | Pass | Pass | Pass |
#+CAPTION: Broadcast Segment
| | Tag is | Tag is not | Tag is any of | Tag includes all of |
|----------------------------------+--------+------------+---------------+---------------------|
| Normalized tag | Pass | Pass | Pass | Pass |
| Repeated embedded spaces | Pass | Pass | Pass | Pass |
| Leading / trailing space | Pass | Pass | Pass | Pass |
| Non-printable control characters | Pass | Pass | Pass | Pass |
| Commas | Pass | Pass | Pass | Pass |
| Quotation marks | Pass | Pass | Pass | Pass |
** DONE Is any and includes all search filters are failing
When running an "is any of" search, this error is logged:
: ERROR: operator does not exist: text[] && text\nHINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.\nCONTEXT: while executing query on dblink connection named "aweber_app" in /home/sites/cake_core/1.2b/cake/libs/model/datasources/dbo/dbo_postgres.php on line 153, referer: https://www.aweberstage.com/users/leads
When running an "includes all of" search, this error is logged:
: control-panel-847df5767-4dsds control-panel [Wed Mar 23 11:18:38.645523 2022] [:error] [pid 6856] [client 204.194.222.13:0] PHP Warning: pg_query(): Query failed: ERROR: operator does not exist: text[] @> text\nHINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.\nCONTEXT: while executing query on dblink connection named "aweber_app" in /home/sites/cake_core/1.2b/cake/libs/model/datasources/dbo/dbo_postgres.php on line 153, referer: https://www.aweberstage.com/users/leads

83
daily/2022-03-29.org Normal file
View file

@ -0,0 +1,83 @@
:PROPERTIES:
:ID: 266d19c2-5ecd-48af-a9d4-4b0a7d3d5696
:END:
#+title: 2022-03-29
* Get list of subscribers with non-normalized tags on active accounts
:PROPERTIES:
:header-args:sql: :engine postgresql :cmdline "-U postgres postgres" :dir /docker:postgres: :exports both :cache yes
:END:
Investigating the impact of the new [[id:d06d3ab4-c2d0-47c3-aae1-4395567fc3d2][Tag Normalization]] rules on existing
subscribers on active accounts.
** Gathering data
I imported a dump of the =subscriber_tags= table from [[id:dd113e53-6144-4cb2-a4aa-da3dc2e3e6ea][AppDB]] as well as the
=list.subscribers= table data for all active accounts (~SELECT s.* FROM
list.subscribers s JOIN accounts a ON (a.a_id = s.account_id) WHERE a.status_id
< 7~)
I then built a table of subscribers having tags that do not match our validation
rules.
#+begin_src sql :exports code :eval never
CREATE TABLE invalid_tags AS
SELECT s.list_id, s.account_id, t.subscriber_id, tag
FROM subscribers s
JOIN subscriber_tags as t ON (s.id = t.subscriber_id)
, unnest(tags) tag
WHERE tag != normalize_tag(tag)
#+end_src
** Subscribers on active accounts
#+begin_src sql
SELECT COUNT(*) FROM subscribers
#+end_src
#+RESULTS[073c7d5b524a0577c83785ca6051ad010990c18a]:
| count |
|----------|
| 16650026 |
** Subscribers with invalid tags
#+begin_src sql
SELECT COUNT(DISTINCT subscriber_id) FROM invalid_tags
#+end_src
#+RESULTS[6ff96db184978da7271a89499c58d40cff8daebf]:
| count |
|--------|
| 239291 |
** Accounts with subscribers with invalid tags
#+begin_src sql
SELECT COUNT(DISTINCT account_id) FROM invalid_tags;
#+end_src
#+RESULTS[f45bb88f747f30295132bcd75861b98721cd5341]:
| count |
|-------|
| 16 |
#+begin_src sql
SELECT DISTINCT account_id FROM invalid_tags
#+end_src
#+RESULTS[ff2ba7ea0c8dc285f2be2a20afb0d0c786f4dac1]:
| account_id |
|------------|
| 1833 |
| 211344 |
| 13492 |
| 212837 |
| 216738 |
| 213819 |
| 16479 |
| 215217 |
| 104120 |
| 215067 |
| 213122 |
| 14656 |
| 111262 |
| 214928 |
| 44749 |
| 91 |