diff --git a/20200713191259-slaa.org b/20200713191259-slaa.org index 252aa83..01a485a 100644 --- a/20200713191259-slaa.org +++ b/20200713191259-slaa.org @@ -37,31 +37,6 @@ personal differences of sexual orientation or gender identity. We need protect with special care the anonymity of every S.L.A.A. member. Additionally we try to avoid drawing undue attention to S.L.A.A. as a whole from the public media. -** The Twelve Steps of S.L.A.A. -1. We admitted we were powerless over sex and love addiction - that our lives - had become unmanageable. -2. Came to believe that a Power greater than ourselves could restore us to - sanity. -3. Made a decision to turn our will and our lives over to the care of God as we - understood God. -4. Made a searching and fearless moral inventory of ourselves. -5. Admitted to God, to ourselves and to another human being the exact nature of - our wrongs. -6. Were entirely ready to have God remove all these defects of character. -7. Humbly asked God to remove our shortcomings. -8. Made a list of all persons we had harmed, and became willing to make amends - to them all. -9. Made direct amends to such people wherever possible, except when to do so - would injure them or others. -10. Continued to take personal inventory and when we were wrong promptly - admitted it. -11. Sought through prayer and meditation to improve our conscious contact with a - Power greater than ourselves, praying only for knowledge of God's will for - us and the power to carry that out. -12. Having had a spiritual awakening as the result of these steps, we tried to - carry this message to sex and love addicts and to practice these principles - in all areas of our lives. - ** Characteristics of Sex and Love Addiction 1. Having few healthy boundaries, we become sexually involved with and/or emotionally attached to people without knowing them. @@ -90,6 +65,31 @@ avoid drawing undue attention to S.L.A.A. as a whole from the public media. 12. We assign magical qualities to others. We idealize and pursue them, then blame them for not fulfilling our fantasies and expectations. +** The Twelve Steps of S.L.A.A. +1. We admitted we were powerless over sex and love addiction - that our lives + had become unmanageable. +2. Came to believe that a Power greater than ourselves could restore us to + sanity. +3. Made a decision to turn our will and our lives over to the care of God as we + understood God. +4. Made a searching and fearless moral inventory of ourselves. +5. Admitted to God, to ourselves and to another human being the exact nature of + our wrongs. +6. Were entirely ready to have God remove all these defects of character. +7. Humbly asked God to remove our shortcomings. +8. Made a list of all persons we had harmed, and became willing to make amends + to them all. +9. Made direct amends to such people wherever possible, except when to do so + would injure them or others. +10. Continued to take personal inventory and when we were wrong promptly + admitted it. +11. Sought through prayer and meditation to improve our conscious contact with a + Power greater than ourselves, praying only for knowledge of God's will for + us and the power to carry that out. +12. Having had a spiritual awakening as the result of these steps, we tried to + carry this message to sex and love addicts and to practice these principles + in all areas of our lives. + ** The Twelve Traditions of S.L.A.A. 1. Our common welfare should come first; personal recovery depends upon S.L.A.A. unity. @@ -98,7 +98,7 @@ avoid drawing undue attention to S.L.A.A. as a whole from the public media. trusted servants; they do not govern. 3. The only requirement for S.L.A.A. membership is a desire to stop living out a pattern of sex and love addiction. Any two or more persons gathered together - for mutual aid in recovering from sex and love addiction may call themselves +B for mutual aid in recovering from sex and love addiction may call themselves an S.L.A.A. group, provided that as a group they have no other affiliation. 4. Each group should be autonomous except in matters affecting other groups or S.L.A.A. as a whole. diff --git a/20211201125024-home_intercom_replacement.org b/20211201125024-home_intercom_replacement.org new file mode 100644 index 0000000..555a9f7 --- /dev/null +++ b/20211201125024-home_intercom_replacement.org @@ -0,0 +1,22 @@ +:PROPERTIES: +:ID: 156e16da-f160-48ad-b0a7-75ff44fdf607 +:END: +#+title: Home Intercom Replacement +#+filetags: :project: +* Home automation controls +- Interface with Home Assistant to control lights and miscellaneous sensors. +* Audio and video calling +- Consider leveraging [[https://github.com/jitsi/jitsi-meet][Jitsi Meet]], an open-source video conferencing system. +* Customizeable user interface +** Themeable +Might be nice to build an LCARS-style interface, but other themes could be +** Modular +I'd like to have one of these in my apartment, not just at Stephanie's house. +This means different sensors, appliances, and functionality may be present at +any particular installation point, and should be easy to configure. +* Reference projects +** [[https://www.instructables.com/Flush-Wall-Mounted-Raspberry-Pi-Touchscreen/][Flush Wall-Mounted Raspberry Pi Touchscreen]] +Covers mounting a device into a wall and powering it via [[id:6de2329b-bdba-45ff-bfda-d4df5c2879c8][PoE]] or 120VAC. +** [[https://hackaday.com/2020/04/27/a-raspberry-pi-video-intercom-system/][A Raspberry Pi Video Intercom System]] +Uses Jitsi to power video calling from a raspberry pi powered doorbell intercom +system. diff --git a/20211201125733-power_over_ethernet.org b/20211201125733-power_over_ethernet.org new file mode 100644 index 0000000..fb3a6e1 --- /dev/null +++ b/20211201125733-power_over_ethernet.org @@ -0,0 +1,5 @@ +:PROPERTIES: +:ID: 6de2329b-bdba-45ff-bfda-d4df5c2879c8 +:ROAM_ALIASES: PoE +:END: +#+title: Power Over Ethernet diff --git a/aweber/20210914142000-subscriber_search_service.org b/aweber/20210914142000-subscriber_search_service.org index c9a92d8..2e82940 100644 --- a/aweber/20210914142000-subscriber_search_service.org +++ b/aweber/20210914142000-subscriber_search_service.org @@ -89,7 +89,15 @@ and segment emailing. | Milestone 3: Add new search features | | #+END: -** Search Centralization +** A Dedicated Service for Subscriber Search +:PROPERTIES: +:JIRA_ID: CCPANEL-10169 +:END: +Create a dedicated, publicly exposed service for performing searches on +subscribers using subscriber and analytics criteria. The goal of this project is +to replace the current implementation from sites and in the broadcast segment +service. + *** Expose search inputs backed with the existing database :PROPERTIES: :Effort: 2d @@ -111,6 +119,7 @@ https://jira.aweber.io/browse/CCPANEL-7077 *** Define the search result format :PROPERTIES: :Effort: 1d +:JIRA_ID: CCPANEL-10440 :END: https://xd.adobe.com/view/ae8fb2b2-c039-4e88-8ade-ff2562a8c8cf-fbdc/screen/c03f09c7-187e-4a6f-8b8c-571d131daee1/ (ignore engagement column) @@ -124,6 +133,15 @@ https://xd.adobe.com/view/ae8fb2b2-c039-4e88-8ade-ff2562a8c8cf-fbdc/screen/c03f0 :PROPERTIES: :Effort: 5d :END: +**** Perform search using text comparisons +- Is / Is Not +- Contains / Does not contain +- Starts with / Does not start with +- Ends with / Does not end with +**** Perform search using numeric comparisons +**** Perform search using date ranges +**** Perform search using message and link IDs +**** Perform search using tag sets *** Perform search using legacy segment ID :PROPERTIES: :Effort: 3d @@ -134,8 +152,10 @@ https://xd.adobe.com/view/ae8fb2b2-c039-4e88-8ade-ff2562a8c8cf-fbdc/screen/c03f0 :Effort: 3d :END: - Translate a DSL search into a legacy stored segment -** Migrate to an updated schema -** Migrate to new search service +*** Migrate to an updated schema +** Centralizing Subscriber Search +Applications making use of subscriber search will be updated to use the new +dedicated service, eliminating multiple search implementations. *** Create new subscriber management React application *** Update broadcast-segment to use new search service ** Milestone 3: Add new search features diff --git a/aweber/20210915133101-analytics_view_service.org b/aweber/20210915133101-analytics_view_service.org index 426ec78..af0aabe 100644 --- a/aweber/20210915133101-analytics_view_service.org +++ b/aweber/20210915133101-analytics_view_service.org @@ -2,7 +2,14 @@ :ID: c45881de-46f2-4f76-9579-063626c5956c :END: #+title: Analytics View Service + +The Analytics View Service provides a collection of report endpoints. These +endpoints handle querying the analytics databases or, in the longer term, +exposing efficient materialized data views. + * Plan +- Parent ticket :: [[https://jira.aweber.io/browse/CCPANEL-11781][CCPANEL-11781]] + :PROPERTIES: :COLUMNS: %40ITEM %Effort{:} :END: @@ -50,19 +57,21 @@ ** Create endpoints for existing reports - Based on the endpoints provided in the [[id:3ddc4e32-932f-4748-bfe9-7025d4d6b352][Report API Controller]] - Are all of these report endpoints in use? -*** Opens +*** Opens over time :PROPERTIES: :Effort: 1d :END: -- List - - Account-wide - - By list -- Time - - Last 30 days - - 30 day range +#+attr_confluence: :as-table t +- Name :: daily-opens +- Parameters :: + - List (default: all lists) + - Date range (default: last 30 days) +- Report API controller endpoints :: + - opens_all_range + - opens_list_range -#+caption: opens_all -#+begin_example +#+caption: Sample response +#+begin_src json { "2021-11-02T00:00:00Z": { "broadcasts": 2499, @@ -83,20 +92,23 @@ "total": 18170 } } -#+end_example -*** Clicks +#+end_src + +*** Clicks over time :PROPERTIES: :Effort: 1d :END: -- List - - Account-wide - - By list -- Time - - Last 30 days - - 30 day range +#+attr_confluence: :as-table t +- Name :: daily-clicks +- Parameters :: + - List (default: all lists) + - Date range (default: last 30 days) +- Report API controller endpoints :: + - clicks_all_range + - clicks_list_range -#+caption: clicks_all -#+begin_example +#+caption: Sample response +#+begin_src json { "2021-11-02T00:00:00Z": { "broadcasts": 105, @@ -117,18 +129,22 @@ "total": 589 } } -#+end_example -*** Sales +#+end_src + +*** Sales over time (events) :PROPERTIES: :Effort: 1d :END: -- Time - - Last 30 days - - 30 day range -- Currency +#+attr_confluence: :as-table t +- Name :: sale-events +- Parameters :: + - Date range (default: last 30 days) + - Currency (default: USD) +- Report API controller endpoints :: + - sales_tracked_events -#+caption: sales_tracked_events -#+begin_example +#+caption: Sample response +#+begin_src json [ { "time": "2021-11-02 09:37:36-04", @@ -191,17 +207,19 @@ "email": "jeremy@jeremy-quick.com" } ] -#+end_example -*** Sales Totals +#+end_src +*** Sales over time (summary) :PROPERTIES: :Effort: 1d :END: -- Time - - Last 60 days - - 60 day range +#+attr_confluence: :as-table t +- Name :: daily-sales +- Parameters :: + - Date range (default: last 60 days) + - Currency (default: USD) -#+caption: sales_tracked_summary -#+begin_example +#+caption: Sample response +#+begin_src json { "2021-11-02T00:00:00Z": { "broadcast": 0, @@ -225,60 +243,240 @@ "total": 38 } } -#+end_example +#+end_src +*** Lifetime Sale Totals +#+attr_confluence: :as-table t +- Name :: sale-totals +- Parameters :: + - Currency (default: USD) +- Report API controller endpoints :: + - sales_tracked_total + +#+caption: Sample response +#+begin_src json + { + "count": 94924, + "pagehits": 1820122.79, + "revenue": 2181498.96 + } +#+end_src *** Sale Currencies :PROPERTIES: :Effort: 1d :END: -- Time - - 60 day range - - All time -#+caption: sales_tracked_currencies -#+begin_example -["USD"] -#+end_example -*** Sale Events -:PROPERTIES: -:Effort: 1d -:END: -- Time - - Last 30 days - - 30 day range -- Currency -- Type - -*** Lifetime Sales -:PROPERTIES: -:Effort: 1d -:END: -- Currency +#+attr_confluence: :as-table t +- Name :: sale-currencies +- Parameters :: + - Date range (default: last 60 days) +- Report API controller endpoints :: + - sales_tracked_currencies +#+caption: Sample response +#+begin_src json +["USD", "CAD"] +#+end_src *** Pending Broadcasts :PROPERTIES: :Effort: 1d :END: +#+attr_confluence: :as-table t +- Name :: pending-broadcasts +- Parameters :: + - List (default: all lists) +- Report API controller endpoints :: + - broadcasts_pending +#+caption: Sample response +#+begin_src json + [ + { + "unit_id": "3854", + "send_date": "01/01/25 12:00am", + "broadcast_id": "1800243", + "subject": "Scheduled Broadcast Test", + "status": "Queue", + "percent_done": "0", + "mesg_encoding": "utf-8", + "campaign_id": "1802217", + "unit": "awlist3854", + "orig_send_date": "2025-01-01 00:00:00-05", + "friendly_list_name": "Fluff Cafe", + "id": "1802217", + "list_id": "3854", + "account_id": "778", + "campaign_type_id": "b", + "uses_block_editor": "t" + } + ] +#+end_src *** Completed Broadcasts :PROPERTIES: :Effort: 1d :END: -- List - - Account-wide - - By list -- Time - - All time - - 30 day range +#+attr_confluence: :as-table t +- Name :: completed-broadcasts +- Parameters :: + - List (default: all lists) +- Report API controller endpoints :: + - broadcasts_completed + - broadcasts_completed_all +#+caption: Sample response +#+begin_src json + [ + { + "a_id": "778", + "broadcast_id": "1258855", + "for_sent_date": "08/14/20 03:41 PM", + "track_click_rate": "1", + "unit_id": "3854", + "assassin_pts": "0", + "mesg_type": "HTML", + "mesg_encoding": "utf-8", + "sent_date": "2020-08-14 15:41:05.24086-04", + "num_emailed": "1", + "num_undeliv": 0, + "num_opened": 0, + "num_attachments": 0, + "num_complaints": 0, + "subject": "Testing a bad segment", + "created_date": "2020-08-14 15:38:57.59072-04", + "status": "Sent Composer", + "lead_view_id": "42564", + "unit": "awlist3854", + "pct_opened": "0", + "show_opens_warning": true, + "pct_undeliv": "0", + "total_clicks": 0, + "clicks_analytics_type": "premium", + "pct_click": "0", + "pct_complaints": "0", + "segment_id": "42564", + "extra_lists": "", + "excluded_lists": "", + "extra_lists_count": 0, + "excluded_lists_count": 0, + "friendly_list_name": "Fluff Cafe" + }, + { + "a_id": "778", + "broadcast_id": "1243650", + "for_sent_date": "08/05/20 06:33 PM", + "track_click_rate": "1", + "unit_id": "3854", + "assassin_pts": "0", + "mesg_type": "Text/HTML", + "mesg_encoding": "utf-8", + "sent_date": "2020-08-05 18:33:48.638875-04", + "num_emailed": "27", + "num_undeliv": 0, + "num_opened": 0, + "num_attachments": 0, + "num_complaints": 0, + "subject": "Buggssss 🐛🐛🐛🐛🐛🐛🐛", + "created_date": "2020-08-05 18:31:10.567418-04", + "status": "Sent Composer", + "lead_view_id": "8", + "unit": "awlist3854", + "pct_opened": "0", + "show_opens_warning": true, + "pct_undeliv": "0", + "total_clicks": 0, + "clicks_analytics_type": "premium", + "pct_click": "0", + "pct_complaints": "0", + "segment_id": "8", + "extra_lists": "", + "excluded_lists": "", + "extra_lists_count": 0, + "excluded_lists_count": 0, + "friendly_list_name": "Fluff Cafe" + } + ] +#+end_src *** Cities, States, and Countries :PROPERTIES: :Effort: 1d :END: +#+attr_confluence: :as-table t +- Name :: subscribers-by-location +- Parameters :: + - List (default: all lists) +- Report API controller endpoints :: + - city_state_countries +#+caption: Sample response +#+begin_src json + [ + { + "country": null, + "state": null, + "city": null, + "pending": 0, + "unsubscribed": 457262, + "subscribed": 276245, + "total": 733507 + }, + { + "country": "US", + "state": "PA", + "city": "Newtown", + "pending": 0, + "unsubscribed": 279304, + "subscribed": 3236, + "total": 282540 + }, + { + "country": "US", + "state": null, + "city": null, + "pending": 0, + "unsubscribed": 109074, + "subscribed": 2456, + "total": 111530 + }, + { + "country": "US", + "state": "PA", + "city": "Philadelphia", + "pending": 0, + "unsubscribed": 48485, + "subscribed": 657, + "total": 49142 + }, + { + "country": "US", + "state": "PA", + "city": "Huntingdon Valley", + "pending": 0, + "unsubscribed": 4839, + "subscribed": 90, + "total": 4929 + }, + { + "country": "VN", + "state": "64", + "city": "Hanoi", + "pending": 0, + "unsubscribed": 204, + "subscribed": 2, + "total": 206 + }, + { + "country": "VN", + "state": "65", + "city": "Ho Chi Minh City", + "pending": 0, + "unsubscribed": 176, + "subscribed": 1, + "total": 177 + } + ] +#+end_src *** Followups :PROPERTIES: :Effort: 1d :END: - *** New Subscribers Daily :PROPERTIES: :Effort: 1d diff --git a/aweber/20210915133448-report_api_controller.org b/aweber/20210915133448-report_api_controller.org index 14ccfba..cea05a2 100644 --- a/aweber/20210915133448-report_api_controller.org +++ b/aweber/20210915133448-report_api_controller.org @@ -4,5 +4,36 @@ :END: #+title: Report API Controller -Contains JSON report endpoints used by the [[id:fab0cf8f-7c54-4848-882b-dba5e087760d][Redesigned Reports]]. These make use of -the App and Analytics databases. +Contains JSON report endpoints used by the [[id:fab0cf8f-7c54-4848-882b-dba5e087760d][Redesigned Reports]] and the [[id:0d24c57a-fd56-43b0-8209-497320bf79f7][Dashboard]]. +These make use of the App and Analytics databases. + +| Endpoint | Description | Report | Dashboard | +|--------------------------------------+-----------------+-----------------------+----------------------| +| opens_all | | | | +| opens_all_range | All lists | Opens over time | | +| opens | | | | +| opens_list_range | Current list | Opens over time | | +| clicks_all | | | | +| clicks_all_range | All lists | Clicks over time | | +| clicks | | | | +| clicks_list_range | Current list | Clicks over time | | +| sales_tracked_all | | | | +| sales_tracked_all_range | | | | +| sales_tracked_summary | | Sales over time | | +| sales_tracked_currencies | | Sales over time | Sales | +| sales_tracked_events | | Sales over time | | +| sales_tracked_total | Lifetime totals | | Sales | +| broadcasts_pending | | | Scheduled Broadcasts | +| broadcasts_completed | Current list | Broadcast totals | | +| broadcasts_completed_all | All lists | | Sent Broadcasts | +| broadcasts_completed_range | | | | +| city_state_countries | | Location totals | | +| followups | | Followup totals | | +| new_subscribers_daily | | New subscribers added | | +| new_subscribers_weekly | | New subscribers added | | +| new_subscribers_monthly | | New subscribers added | | +| subscriber_totals_daily | | Subscriber totals | | +| subscriber_totals_weekly | | Subscriber totals | | +| subscriber_totals_monthly | | Subscriber totals | | +| account_subscriber_totals | | | People | +| account_subscriber_totals_past_month | | | People | diff --git a/aweber/20211108150155-bulk_job_service.org b/aweber/20211108150155-bulk_job_service.org new file mode 100644 index 0000000..1f1a288 --- /dev/null +++ b/aweber/20211108150155-bulk_job_service.org @@ -0,0 +1,4 @@ +:PROPERTIES: +:ID: 1463cf0a-e2b2-490c-b1b3-40249b483ca8 +:END: +#+title: Bulk Job Service diff --git a/daily/2021-11-05.org b/daily/2021-11-05.org new file mode 100644 index 0000000..07af12b --- /dev/null +++ b/daily/2021-11-05.org @@ -0,0 +1,7 @@ +:PROPERTIES: +:ID: ae807adb-2f19-46d1-b2aa-f2541947d26c +:END: +#+title: 2021-11-05 +* [[id:1463cf0a-e2b2-490c-b1b3-40249b483ca8][Bulk-Action]] Consumers ACP +- New ACP :: https://confluence.aweber.io/display/AR/Bulk-Task+Consumers+ACP +- Old Spec :: https://confluence.aweber.io/display/~robink/Bulk+Operation+Service+Spec diff --git a/daily/2021-11-08.org b/daily/2021-11-08.org new file mode 100644 index 0000000..68f4372 --- /dev/null +++ b/daily/2021-11-08.org @@ -0,0 +1,65 @@ +:PROPERTIES: +:ID: 305b4103-a9a8-492a-8431-c203f57d2bd0 +:END: +#+title: 2021-11-08 +* Planning future backend work +Meeting with Scott and Eric. + +#+caption: Last week +| Number clicked column to account backup | 4h | +| CSLead Tickets | EOW | +| Tagbox upgrades | EOW | +| Remove outbound tag sanitization | EOW | +| Analytics search testing | ??? | +| OpenAPI newline pattern validation | Tomorrow | +| Start on Search Service | Next week | + +#+caption: This week +| CSLead Tickets | Today | +| Analytics View | This week (Eric) | +| Search | This week (Correl) | +| Verifications | Tech Initiatives sync | +* [[id:1463cf0a-e2b2-490c-b1b3-40249b483ca8][Bulk Job]] ACP discussion +- Could deleting duplicate subscribers across lists belong in the Control Panel? +- Why would we want to pause a job? + - More likely to be an internal issue, pausing processing to relieve system + pressure +- Differences between customer-initiated jobs and internally (PSE/ASE) initiated + jobs +- Any future plans for bulk actions in the CP? + - Deleting duplicate subscribers across lists csreq? + - Nothing prioritized right now. +* Searching any/all tags with quotation marks +https://jira.aweber.io/browse/CCPANEL-10726 + +The search code is escaping the characters, but string literals appear to handle +escaping differently between different versions of PostgreSQL. Versions 9.1 and +above default the =standard_conforming_strings= setting to =on=, which permits +escaping. The AppDB PostgreSQL version in staging and production are on 9.0.23, +and have the setting turned to =off=. + +Because of how search is currently built, in order to support searching on +multiple values, these values are being encoded as [[https://www.postgresql.org/docs/9.1/arrays.html#ARRAYS-IO][string array literals]]. The +additional escaping needed for this format are running afoul of PostgreSQL's +string handling: + +With standard conforming strings on +#+begin_example + postgres=# select '{"foo","bar","\"baz"}'::text[]; + text + ------------------- + {foo,bar,"\"baz"} + (1 row) +#+end_example + +With standard conforming strings off +#+begin_example + app-txn=> select '{"foo","bar","\"baz"}'::text[]; + WARNING: nonstandard use of escape in a string literal + LINE 1: select '{"foo","bar","\"baz"}'::text[]; + ^ + HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. + ERROR: malformed array literal: "{"foo","bar",""baz"}" + LINE 1: select '{"foo","bar","\"baz"}'::text[]; + ^ +#+end_example diff --git a/daily/2021-11-09.org b/daily/2021-11-09.org new file mode 100644 index 0000000..924038f --- /dev/null +++ b/daily/2021-11-09.org @@ -0,0 +1,28 @@ +:PROPERTIES: +:ID: 97d08dbd-dcab-4776-8450-ff9cdeb7e16b +:END: +#+title: 2021-11-09 +* Releasing tagging changes +Releasing the removal of outbound [[id:2ba04972-f498-41c2-970e-a64c7f3f1c3b][Data sanitization]] from the [[id:7e503917-646f-4275-aab9-3a125b99cbfd][Tagging Service]], +addressing the CSLead issue ([[https://jira.aweber.io/browse/CCPANEL-11673][CCPANEL-11673]])that arose from implementing it as a +stopgap as we worked to close the UI sanitization issue. +** CSLead questionairre +The fixes for this issue have been released to production. + +- *What was broken? be specific also indicate what was not broken* :: The + tagging service was temporarily patched to sanitize returned tag labels for + HTML display, resulting in tags containing sensitive characters to be + misrepresented (e.g. =this&that= would be returned as =this&that=) +- *When was it broken? start and end date/time* :: Since the tagging service + started sanitizing returned tag labels on September 9th, 2021. +- *What did you do to fix the problem? be specific* :: A UI sanitization fix was + propogated to correct the root issue (CCPANEL-11654), and the sanitization was + removed from the tagging service. +- *How many customers did it likely impact?* :: All customers using tags with + characters typically escaped as HTML entities (e.g., =<=, =>=, =&=) +- *Is the issue automatically fixed for all customers now? Why or why not?* :: Yes. + Tags will no longer be misrepresented in autocompletion for searches and + tagging. +- *Does the customer or CS need to manually do something to fix their account? Customers taking actions should always be a last resort.* :: No. +- *Should a new monitoring check, metric, or test be created to prevent this from happening again? Why or why not?* :: No; + the system was working as intended. diff --git a/daily/2021-11-26.org b/daily/2021-11-26.org new file mode 100644 index 0000000..086b648 --- /dev/null +++ b/daily/2021-11-26.org @@ -0,0 +1,6 @@ +:PROPERTIES: +:ID: 525d38a7-2b7b-4ad8-902f-80d000e95b2c +:END: +#+title: 2021-11-26 + +* List Service Review diff --git a/daily/2021-11-30.org b/daily/2021-11-30.org new file mode 100644 index 0000000..c5c1255 --- /dev/null +++ b/daily/2021-11-30.org @@ -0,0 +1,405 @@ +:PROPERTIES: +:ID: 04ab4d9c-b155-404f-a914-61476cb1ba94 +:END: +#+title: 2021-11-30 + +* Import issues +https://admin.aweber.io/account/imports/440922 + +#+begin_quote +Ok, I'm running subscriber search for the different date ranges in subscriber +management to see what we get back to see if there are any particular import +days that don't match up in subscriber management. + +10/12/2021 - 619 :white_check_mark: +10/19/2021 - 17 :white_check_mark: +10/24/2021 - 16 :white_check_mark: +11/02/2021 - 0 :x: (expecting 13) +11/03/2021 - 0 :x: (expecting 21) +11/04/2021 - 0 :x: (expecting 65) +11/05/2021 - 0 :x: (expecting 67) +11/09/2021 - 146 :x: (expecting 156) +11/16/2021 - 0 :x: (expecting 70) +11/21/2021 - 0 :x: (expecting 98) +11/28/2021 - 0 :x: (expecting 214) +Total: 798 +#+end_quote + +#+HEADER: :cache yes :eval no-export +#+HEADER: :engine postgresql +#+HEADER: :dbhost app.service.production.consul +#+HEADER: :dbuser cp_aweber +#+HEADER: :database app-txn +#+HEADER: :dbpassword mgoQKqV6ztMap8TvL9UuiXx3b27P3DRCGkwnE6jrhy4dfc2eYN +#+begin_src sql + SELECT file_upload_id, the_date, (num_tot - num_bad) AS expected, num_updated, status + FROM file_upload WHERE unit_id = 6145308 + ORDER BY the_date DESC +#+end_src + +#+RESULTS[a495427180850356bf15809decd25622d71cc1f9]: +| file_upload_id | the_date | expected | num_updated | status | +|----------------+-------------------------------+----------+-------------+----------| +| 2692672 | 2021-11-28 12:03:25.048179-05 | 214 | 0 | Imported | +| 2688326 | 2021-11-21 10:08:17.397923-05 | 98 | 0 | Imported | +| 2685579 | 2021-11-16 14:22:04.300465-05 | 70 | 0 | Imported | +| 2681302 | 2021-11-09 17:01:08.179064-05 | 10 | 0 | Imported | +| 2680864 | 2021-11-09 07:56:34.510711-05 | 146 | 0 | Imported | +| 2680487 | 2021-11-08 15:20:48.086738-05 | | 0 | Imported | +| 2679310 | 2021-11-06 09:58:23.659421-04 | | 0 | Imported | +| 2678656 | 2021-11-05 06:23:04.362125-04 | 67 | 0 | Imported | +| 2677978 | 2021-11-04 10:39:26.901495-04 | 65 | 0 | Imported | +| 2677151 | 2021-11-03 09:46:37.613333-04 | 21 | 0 | Imported | +| 2676857 | 2021-11-02 20:41:03.899749-04 | 13 | 0 | Imported | +| 2671346 | 2021-10-24 16:17:56.890275-04 | 16 | 0 | Imported | +| 2668360 | 2021-10-19 10:23:31.828626-04 | 17 | 0 | Imported | +| 2664053 | 2021-10-12 09:38:45.075332-04 | 619 | 0 | Imported | + +#+begin_example + core_api_1/core_api.2021-11-28.log.gz:core-api1 [28-Nov-2021 17:03:25] WARNING core_api api tornado.general - 400 POST /v1/subscribers?account_id=440922&list_id=6145308 (127.0.0.1): An invalid argument was provided to the API + core_api_1/core_api.2021-11-28.log.gz-core-api1 [28-Nov-2021 17:03:25] WARNING core_api api tornado.access - 400 POST /v1/subscribers?account_id=440922&list_id=6145308 (127.0.0.1) 77.91ms + core_api_1/core_api.2021-11-28.log.gz-core-api1 [28-Nov-2021 17:03:25] ERROR core_api api awsubscribers.mixins.postgres - Database programming error: proc coreapi_subscriber.add_subscriber args (u'6145308', u'2021-11-28T17:03:25.243897+00:00', u'bbridenstine05@gmail.com', u'Bryana Bridenstine', None, 16083773642, None, u'import', 'False', 'active', None, None, None, None, None, None, None, None, None, None, None, 2692672, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None) + core_api_1/core_api.2021-11-28.log.gz-Traceback (most recent call last): + core_api_1/core_api.2021-11-28.log.gz- File "/usr/local/lib/python2.7/dist-packages/awsubscribers/mixins/postgres.py", line 140, in execute_proc + core_api_1/core_api.2021-11-28.log.gz- result = yield self.application.app_session.callproc(proc, args) + core_api_1/core_api.2021-11-28.log.gz- File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 870, in run + core_api_1/core_api.2021-11-28.log.gz- value = future.result() + core_api_1/core_api.2021-11-28.log.gz- File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 215, in result + core_api_1/core_api.2021-11-28.log.gz- raise_exc_info(self._exc_info) + core_api_1/core_api.2021-11-28.log.gz- File "", line 3, in raise_exc_info + core_api_1/core_api.2021-11-28.log.gz-ProgrammingError: function coreapi_subscriber.add_subscriber(unknown, unknown, unknown, unknown, unknown, bigint, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, integer, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) does not exist + core_api_1/core_api.2021-11-28.log.gz-LINE 1: SELECT * FROM coreapi_subscriber.add_subscriber(E'6145308',E... + core_api_1/core_api.2021-11-28.log.gz- ^ + core_api_1/core_api.2021-11-28.log.gz-HINT: No function matches the given name and argument types. You might need to add explicit type casts. +#+end_example + +#+begin_src python +#+end_src + +#+begin_src python :exports results + columns = ( + "in_list_id integer", + "in_timehit timestamp with time zone", + "in_email character varying", + "in_name character varying", + "in_name2 character varying", + "in_message integer", + "in_add_url character varying", + "in_add_method_str text", + "in_verified_str text", + "in_stop_status text", + "in_note character varying", + "in_add_notes character varying", + "in_geog_country character varying", + "in_geog_region character varying", + "in_geog_city character varying", + "in_geog_postal character varying", + "in_geog_lat double precision", + "in_geog_lon double precision", + "in_geog_dma_code integer", + "in_geog_time_zone text", + "in_next_target_followuptime timestamp with time zone", + "in_file_upload_id integer", + "in_datum1 text", + "in_datum2 text", + "in_datum3 text", + "in_datum4 text", + "in_datum5 text", + "in_datum6 text", + "in_datum7 text", + "in_datum8 text", + "in_datum9 text", + "in_datum10 text", + "in_datum11 text", + "in_datum12 text", + "in_datum13 text", + "in_datum14 text", + "in_datum15 text", + "in_datum16 text", + "in_datum17 text", + "in_datum18 text", + "in_datum19 text", + "in_datum20 text", + "in_datum21 text", + "in_datum22 text", + "in_datum23 text", + "in_datum24 text", + "in_datum25 text", + ) + values = ( + u"6145308", + u"2021-11-28T17:03:25.243897+00:00", + u"bbridenstine05@gmail.com", + u"Bryana Bridenstine", + None, + 16083773642, + None, + u"import", + "False", + "active", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + 2692672, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) + return list(zip(columns, values)) +#+end_src + +#+RESULTS: +| in_list_id integer | 6145308 | +| in_timehit timestamp with time zone | 2021-11-28T17:03:25.243897+00:00 | +| in_email character varying | bbridenstine05@gmail.com | +| in_name character varying | Bryana Bridenstine | +| in_name2 character varying | None | +| in_message integer | 16083773642 | +| in_add_url character varying | None | +| in_add_method_str text | import | +| in_verified_str text | False | +| in_stop_status text | active | +| in_note character varying | None | +| in_add_notes character varying | None | +| in_geog_country character varying | None | +| in_geog_region character varying | None | +| in_geog_city character varying | None | +| in_geog_postal character varying | None | +| in_geog_lat double precision | None | +| in_geog_lon double precision | None | +| in_geog_dma_code integer | None | +| in_geog_time_zone text | None | +| in_next_target_followuptime timestamp with time zone | None | +| in_file_upload_id integer | 2692672 | +| in_datum1 text | None | +| in_datum2 text | None | +| in_datum3 text | None | +| in_datum4 text | None | +| in_datum5 text | None | +| in_datum6 text | None | +| in_datum7 text | None | +| in_datum8 text | None | +| in_datum9 text | None | +| in_datum10 text | None | +| in_datum11 text | None | +| in_datum12 text | None | +| in_datum13 text | None | +| in_datum14 text | None | +| in_datum15 text | None | +| in_datum16 text | None | +| in_datum17 text | None | +| in_datum18 text | None | +| in_datum19 text | None | +| in_datum20 text | None | +| in_datum21 text | None | +| in_datum22 text | None | +| in_datum23 text | None | +| in_datum24 text | None | +| in_datum25 text | None | + +The error appears to be claiming the message id is coming in as a bigint +(=16083773642=) but the signature requires nothing bigger than an integer (max: +=2147483647=, https://www.postgresql.org/docs/9.1/datatype-numeric.html). + +#+begin_src json + { + "addresses": [ + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 66638848984, + "name": "Huasheng Wang", + "email": "pwang86@icloud.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 13853264347, + "name": "Kenneth Packer", + "email": "kennethbpacker@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 17024010474, + "name": "Timothy Ledford", + "email": "timo392@icloud.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 19183150297, + "name": "greg sharp", + "email": "gs9356@hotmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 15305317848, + "name": "Michelle Dacey", + "email": "missy830@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 15123654569, + "name": "Misty Wilson", + "email": "ellie_scarlet_777@yahoo.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 14047292024, + "name": "Jeffrey Goldenstein", + "email": "jeffreygoldenstein@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 353852276892, + "name": "Lee C", + "email": "leecagney@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 18707405500, + "name": "Jim Creecy", + "email": "tbird17@att.net", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 12484701285, + "name": "Kevin Gilroy", + "email": "kgilroy@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 19103545666, + "name": "Johnathan Williams", + "email": "fireguyofficial@gmail.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 962777188000, + "name": "Mazen Zawaideh", + "email": "mazen.zawaideh@icloud.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 15097316832, + "name": "Gary Wallace", + "email": "purple-paisley@charter.net", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 12195751916, + "name": "Robin Fiorito", + "email": "nelipot46350@yahoo.com", + "note": null, + "name2": null, + "custom_fields": { + } + }, + { + "add_notes": "71.82.189.72", + "tags": [], + "message": 19517196333, + "name": "Vergil Cuenca", + "email": "vergilc@msn.com", + "note": null, + "name2": null, + "custom_fields": { + } + } + ], + "should_manually_review": false + } +#+end_src diff --git a/daily/2021-12-01.org b/daily/2021-12-01.org new file mode 100644 index 0000000..a5f41d3 --- /dev/null +++ b/daily/2021-12-01.org @@ -0,0 +1,4 @@ +:PROPERTIES: +:ID: 5f58ce77-e768-4881-b1d4-39c2e7e3f492 +:END: +#+title: 2021-12-01