notes
This commit is contained in:
parent
c6ec0dd4b0
commit
bbf9181119
5 changed files with 554 additions and 83 deletions
197
20220209144915-tutor.org
Normal file
197
20220209144915-tutor.org
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e79ad4ee-17d0-44f9-8270-2f19b65bc949
|
||||||
|
:END:
|
||||||
|
#+title: Tutor
|
||||||
|
|
||||||
|
A [[id:cda9c620-fec5-4549-b979-22fc06819d77][Python]] application backed by a SQLite database for tracking my [[id:d5efa5bd-dac9-4ef5-b352-a2b794a37bd0][Magic: The
|
||||||
|
Gathering]] card collection.
|
||||||
|
|
||||||
|
https://git.phoenixinquis.net/correlr/tutor
|
||||||
|
|
||||||
|
* Finding cards for a deck
|
||||||
|
Decklist -- Alive -- Shared via TopDecked MTG
|
||||||
|
Main (100)
|
||||||
|
1 Serra Ascendant
|
||||||
|
1 Soul's Attendant
|
||||||
|
1 Ajani's Pridemate
|
||||||
|
1 Alabaster Mage
|
||||||
|
1 Grateful Apparition
|
||||||
|
1 Suture Priest
|
||||||
|
1 Trelasarra, Moon Dancer
|
||||||
|
1 Angel of Vitality
|
||||||
|
1 Celestial Unicorn
|
||||||
|
1 Evolution Sage
|
||||||
|
1 Lurking Roper
|
||||||
|
1 Spike Feeder
|
||||||
|
1 Splendor Mare
|
||||||
|
1 Armorcraft Judge
|
||||||
|
1 Bloom Hulk
|
||||||
|
1 Core Prowler
|
||||||
|
1 Lathiel, the Bounteous Dawn
|
||||||
|
1 Lightkeeper of Emeria
|
||||||
|
1 Hamza, Guardian of Arashin
|
||||||
|
1 Ajani Goldmane
|
||||||
|
1 The Wanderer
|
||||||
|
1 Blossoming Wreath
|
||||||
|
1 Condemn
|
||||||
|
1 Fortifying Draught
|
||||||
|
1 Healing Salve
|
||||||
|
1 Light of Hope
|
||||||
|
1 Divine Offering
|
||||||
|
1 Revitalize
|
||||||
|
1 Abuna's Chant
|
||||||
|
1 Angel's Mercy
|
||||||
|
1 Blunt the Assault
|
||||||
|
1 Congregate
|
||||||
|
1 Refreshing Rain
|
||||||
|
1 War Report
|
||||||
|
1 Corrosive Gale
|
||||||
|
1 Bond of Flourishing
|
||||||
|
1 Courage in Crisis
|
||||||
|
1 Survival Cache
|
||||||
|
1 Hunters' Feast
|
||||||
|
1 Primal Command
|
||||||
|
1 Wanderer's Strike
|
||||||
|
1 Planewide Celebration
|
||||||
|
1 Fountain of Youth
|
||||||
|
1 Elixir of Immortality
|
||||||
|
1 Golden Urn
|
||||||
|
1 Sol Ring
|
||||||
|
1 Soul Net
|
||||||
|
1 The Ozolith
|
||||||
|
1 Contagion Clasp
|
||||||
|
1 Throne of Geth
|
||||||
|
1 Marble Chalice
|
||||||
|
1 Staff of Domination
|
||||||
|
1 Soul Conduit
|
||||||
|
1 Lifelink
|
||||||
|
1 Spirit Link
|
||||||
|
1 Ajani's Mantra
|
||||||
|
1 Inner Sanctum
|
||||||
|
1 Luminous Wake
|
||||||
|
1 Faith's Fetters
|
||||||
|
1 First Response
|
||||||
|
1 Vigil for the Lost
|
||||||
|
1 Noble Purpose
|
||||||
|
1 Noble Stand
|
||||||
|
1 Celestial Mantle
|
||||||
|
1 Blossoming Sands
|
||||||
|
1 Command Tower
|
||||||
|
14 Forest
|
||||||
|
1 Karn's Bastion
|
||||||
|
16 Plains
|
||||||
|
1 Razorverge Thicket
|
||||||
|
1 Sunpetal Grove
|
||||||
|
1 Yavimaya Hollow
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Shared via TopDecked MTG
|
||||||
|
|
||||||
|
|
||||||
|
https://www.topdecked.com/decks/alive/833c308f-219f-4624-8b32-1adedcb477f0
|
||||||
|
|
||||||
|
#+caption: Adding the deck list to the database
|
||||||
|
#+begin_src sql :exports code :eval never
|
||||||
|
INSERT INTO decks (deck_id, name) VALUES (2, 'Alive');
|
||||||
|
|
||||||
|
INSERT INTO deck_cards (deck_id, oracle_id)
|
||||||
|
SELECT DISTINCT 2, oracle_id FROM cards WHERE name IN
|
||||||
|
(
|
||||||
|
'Serra Ascendant',
|
||||||
|
'Soul''s Attendant',
|
||||||
|
'Ajani''s Pridemate',
|
||||||
|
'Alabaster Mage',
|
||||||
|
'Grateful Apparition',
|
||||||
|
'Suture Priest',
|
||||||
|
'Trelasarra, Moon Dancer',
|
||||||
|
'Angel of Vitality',
|
||||||
|
'Celestial Unicorn',
|
||||||
|
'Evolution Sage',
|
||||||
|
'Lurking Roper',
|
||||||
|
'Spike Feeder',
|
||||||
|
'Splendor Mare',
|
||||||
|
'Armorcraft Judge',
|
||||||
|
'Bloom Hulk',
|
||||||
|
'Core Prowler',
|
||||||
|
'Lathiel, the Bounteous Dawn',
|
||||||
|
'Lightkeeper of Emeria',
|
||||||
|
'Hamza, Guardian of Arashin',
|
||||||
|
'Ajani Goldmane',
|
||||||
|
'The Wanderer',
|
||||||
|
'Blossoming Wreath',
|
||||||
|
'Condemn',
|
||||||
|
'Fortifying Draught',
|
||||||
|
'Healing Salve',
|
||||||
|
'Light of Hope',
|
||||||
|
'Divine Offering',
|
||||||
|
'Revitalize',
|
||||||
|
'Abuna''s Chant',
|
||||||
|
'Angel''s Mercy',
|
||||||
|
'Blunt the Assault',
|
||||||
|
'Congregate',
|
||||||
|
'Refreshing Rain',
|
||||||
|
'War Report',
|
||||||
|
'Corrosive Gale',
|
||||||
|
'Bond of Flourishing',
|
||||||
|
'Courage in Crisis',
|
||||||
|
'Survival Cache',
|
||||||
|
'Hunters'' Feast',
|
||||||
|
'Primal Command',
|
||||||
|
'Wanderer''s Strike',
|
||||||
|
'Planewide Celebration',
|
||||||
|
'Fountain of Youth',
|
||||||
|
'Elixir of Immortality',
|
||||||
|
'Golden Urn',
|
||||||
|
'Sol Ring',
|
||||||
|
'Soul Net',
|
||||||
|
'The Ozolith',
|
||||||
|
'Contagion Clasp',
|
||||||
|
'Throne of Geth',
|
||||||
|
'Marble Chalice',
|
||||||
|
'Staff of Domination',
|
||||||
|
'Soul Conduit',
|
||||||
|
'Lifelink',
|
||||||
|
'Spirit Link',
|
||||||
|
'Ajani''s Mantra',
|
||||||
|
'Inner Sanctum',
|
||||||
|
'Luminous Wake',
|
||||||
|
'Faith''s Fetters',
|
||||||
|
'First Response',
|
||||||
|
'Vigil for the Lost',
|
||||||
|
'Noble Purpose',
|
||||||
|
'Noble Stand',
|
||||||
|
'Celestial Mantle',
|
||||||
|
'Blossoming Sands',
|
||||||
|
'Command Tower',
|
||||||
|
'Forest',
|
||||||
|
'Karn''s Bastion',
|
||||||
|
'Plains',
|
||||||
|
'Razorverge Thicket',
|
||||||
|
'Sunpetal Grove',
|
||||||
|
'Yavimaya Hollow'
|
||||||
|
);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+caption: Finding cards in the collection
|
||||||
|
#+begin_src sql :exports code :eval never
|
||||||
|
select distinct set_code,
|
||||||
|
color_identity,
|
||||||
|
cards.name,
|
||||||
|
sets.name,
|
||||||
|
type_line,
|
||||||
|
rarity
|
||||||
|
from deck_cards
|
||||||
|
join cards using(oracle_id)
|
||||||
|
join copies using (scryfall_id)
|
||||||
|
join rarities using (rarity)
|
||||||
|
join sets using(set_code)
|
||||||
|
where deck_id = 2
|
||||||
|
order by release_date desc, color_identity, rarity_ord desc, cards.name;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Questions
|
||||||
|
- Where are the cards in my collection I need to build a deck?
|
||||||
|
- Which cards do I want in one deck that are currently in another?
|
||||||
|
- Which cards do I need more copies of?
|
||||||
|
- Which cards do I need that would improve specific decks?
|
6
20220210103521-magic_the_gathering.org
Normal file
6
20220210103521-magic_the_gathering.org
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: d5efa5bd-dac9-4ef5-b352-a2b794a37bd0
|
||||||
|
:END:
|
||||||
|
#+title: Magic: The Gathering
|
||||||
|
|
||||||
|
A trading card game from the 90s that takes over wallets and lives.
|
|
@ -9,58 +9,18 @@ exposing efficient materialized data views.
|
||||||
|
|
||||||
* Plan
|
* Plan
|
||||||
- Parent ticket :: [[https://jira.aweber.io/browse/CCPANEL-11781][CCPANEL-11781]]
|
- Parent ticket :: [[https://jira.aweber.io/browse/CCPANEL-11781][CCPANEL-11781]]
|
||||||
|
|
||||||
:PROPERTIES:
|
|
||||||
:COLUMNS: %40ITEM %Effort{:}
|
|
||||||
:END:
|
|
||||||
#+BEGIN: columnview :id local
|
|
||||||
| ITEM | Effort |
|
|
||||||
|-----------------------------------------------+----------|
|
|
||||||
| Plan | 19d 4:00 |
|
|
||||||
| Create the analytics view service | 2d |
|
|
||||||
| Create the analytics view service playbook | 4h |
|
|
||||||
| Plan API structure | |
|
|
||||||
| Create endpoints for existing reports | 17d 0:00 |
|
|
||||||
| Opens | 1d |
|
|
||||||
| Clicks | 1d |
|
|
||||||
| Sales | 1d |
|
|
||||||
| Sales Totals | 1d |
|
|
||||||
| Sale Currencies | 1d |
|
|
||||||
| Sale Events | 1d |
|
|
||||||
| Lifetime Sales | 1d |
|
|
||||||
| Pending Broadcasts | 1d |
|
|
||||||
| Completed Broadcasts | 1d |
|
|
||||||
| Cities, States, and Countries | 1d |
|
|
||||||
| Followups | 1d |
|
|
||||||
| New Subscribers Daily | 1d |
|
|
||||||
| New Subscribers Weekly | 1d |
|
|
||||||
| New Subscribers Monthly | 1d |
|
|
||||||
| Subscriber Totals Daily | 1d |
|
|
||||||
| Subscriber Totals Weekly | 1d |
|
|
||||||
| Subscriber Totals Monthly | 1d |
|
|
||||||
| Migrate reports to the Analytics View Service | |
|
|
||||||
#+END:
|
|
||||||
** Create the analytics view service
|
** Create the analytics view service
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 2d
|
|
||||||
:END:
|
|
||||||
- New project using cookie cutter
|
- New project using cookie cutter
|
||||||
- Deployed to kubernetes
|
- Deployed to kubernetes
|
||||||
- Grafana dashboard created
|
- Grafana dashboard created
|
||||||
** Create the analytics view service playbook
|
** Create the analytics view service playbook
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 4h
|
|
||||||
:END:
|
|
||||||
** Plan API structure
|
** Plan API structure
|
||||||
- Pathing (=/reports/*=)?
|
- Pathing (=/reports/*=)?
|
||||||
- Report versioning? (=/reports/{name}.v{version}=)?
|
- Report versioning? (=/reports/$NAME.v$VERSION=)?
|
||||||
** Create endpoints for existing reports
|
** Create endpoints for existing reports
|
||||||
- Based on the endpoints provided in the [[id:3ddc4e32-932f-4748-bfe9-7025d4d6b352][Report API Controller]]
|
- Based on the endpoints provided in the [[id:3ddc4e32-932f-4748-bfe9-7025d4d6b352][Report API Controller]]
|
||||||
- Are all of these report endpoints in use?
|
- Are all of these report endpoints in use?
|
||||||
*** Opens over time
|
*** Opens over time
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: daily-opens
|
- Name :: daily-opens
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -95,9 +55,6 @@ exposing efficient materialized data views.
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Clicks over time
|
*** Clicks over time
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: daily-clicks
|
- Name :: daily-clicks
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -132,9 +89,6 @@ exposing efficient materialized data views.
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Sales over time (events)
|
*** Sales over time (events)
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: sale-events
|
- Name :: sale-events
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -209,9 +163,6 @@ exposing efficient materialized data views.
|
||||||
]
|
]
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Sales over time (summary)
|
*** Sales over time (summary)
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: daily-sales
|
- Name :: daily-sales
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -261,9 +212,6 @@ exposing efficient materialized data views.
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Sale Currencies
|
*** Sale Currencies
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: sale-currencies
|
- Name :: sale-currencies
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -276,9 +224,6 @@ exposing efficient materialized data views.
|
||||||
["USD", "CAD"]
|
["USD", "CAD"]
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Pending Broadcasts
|
*** Pending Broadcasts
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: pending-broadcasts
|
- Name :: pending-broadcasts
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -310,9 +255,6 @@ exposing efficient materialized data views.
|
||||||
]
|
]
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Completed Broadcasts
|
*** Completed Broadcasts
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: completed-broadcasts
|
- Name :: completed-broadcasts
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -395,9 +337,6 @@ exposing efficient materialized data views.
|
||||||
]
|
]
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Cities, States, and Countries
|
*** Cities, States, and Countries
|
||||||
:PROPERTIES:
|
|
||||||
:Effort: 1d
|
|
||||||
:END:
|
|
||||||
#+attr_confluence: :as-table t
|
#+attr_confluence: :as-table t
|
||||||
- Name :: subscribers-by-location
|
- Name :: subscribers-by-location
|
||||||
- Parameters ::
|
- Parameters ::
|
||||||
|
@ -473,38 +412,293 @@ exposing efficient materialized data views.
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
#+end_src
|
#+end_src
|
||||||
|
*** Campaign Statistics
|
||||||
|
Add the campaign start endpoint into analytics-view including
|
||||||
|
|
||||||
|
- DynamoDB fixtures
|
||||||
|
- Dynamo dbhelpers (currently there is no dynamo connectivity in analytics-view)
|
||||||
|
- CampaignStarted Handler
|
||||||
|
https://gitlab.aweber.io/CP/Services/campaignstats/-/blob/master/campaignstats/handlers.py
|
||||||
|
- Grafana dashboard updated
|
||||||
|
- Alerts configured
|
||||||
|
- Confluence docs updated
|
||||||
|
|
||||||
*** Followups
|
*** Followups
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: followup-totals
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- followups
|
||||||
|
|
||||||
|
Uses the =freq_mesg= and =freq_mesg_stats= tables in AppDB combined with data
|
||||||
|
from the =messages= table in Analytics.
|
||||||
|
|
||||||
|
=editor_path= is hard-coded in the current report endpoint.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"followup_message": "1",
|
||||||
|
"num_emailed": 83024,
|
||||||
|
"num_opened": 89950,
|
||||||
|
"open_percentage": 23.659423781075,
|
||||||
|
"clicks": "13198",
|
||||||
|
"message_id": "28613652",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "19643",
|
||||||
|
"unique_clicks": "1584",
|
||||||
|
"clicks_percentage": 23.659423781075,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "2",
|
||||||
|
"num_emailed": 73714,
|
||||||
|
"num_opened": 49979,
|
||||||
|
"open_percentage": 13.675828200884,
|
||||||
|
"clicks": "6169",
|
||||||
|
"message_id": "28613655",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "10081",
|
||||||
|
"unique_clicks": "649",
|
||||||
|
"clicks_percentage": 13.675828200884,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "3",
|
||||||
|
"num_emailed": 70880,
|
||||||
|
"num_opened": 38472,
|
||||||
|
"open_percentage": 10.272291196388,
|
||||||
|
"clicks": "4322",
|
||||||
|
"message_id": "28613659",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "7281",
|
||||||
|
"unique_clicks": "409",
|
||||||
|
"clicks_percentage": 10.272291196388,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "4",
|
||||||
|
"num_emailed": 69375,
|
||||||
|
"num_opened": 37496,
|
||||||
|
"open_percentage": 10.105945945946,
|
||||||
|
"clicks": "4419",
|
||||||
|
"message_id": "28613661",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "7011",
|
||||||
|
"unique_clicks": "447",
|
||||||
|
"clicks_percentage": 10.105945945946,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "5",
|
||||||
|
"num_emailed": 67478,
|
||||||
|
"num_opened": 30996,
|
||||||
|
"open_percentage": 8.2752897240582,
|
||||||
|
"clicks": "3236",
|
||||||
|
"message_id": "28613662",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "5584",
|
||||||
|
"unique_clicks": "257",
|
||||||
|
"clicks_percentage": 8.2752897240582,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "6",
|
||||||
|
"num_emailed": 65414,
|
||||||
|
"num_opened": 32483,
|
||||||
|
"open_percentage": 9.2334974164552,
|
||||||
|
"clicks": "3127",
|
||||||
|
"message_id": "28613664",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "6040",
|
||||||
|
"unique_clicks": "323",
|
||||||
|
"clicks_percentage": 9.2334974164552,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"followup_message": "7",
|
||||||
|
"num_emailed": 63871,
|
||||||
|
"num_opened": 28756,
|
||||||
|
"open_percentage": 8.1883797028385,
|
||||||
|
"clicks": "1964",
|
||||||
|
"message_id": "28613665",
|
||||||
|
"click_percentage": 0,
|
||||||
|
"unique_opens": "5230",
|
||||||
|
"unique_clicks": "166",
|
||||||
|
"clicks_percentage": 8.1883797028385,
|
||||||
|
"editor_path": "messages#/active"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
#+end_src
|
||||||
*** New Subscribers Daily
|
*** New Subscribers Daily
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: daily-new-subscribers
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- new_subscribers_daily
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2022-01-09T00:00:00Z": {
|
||||||
|
"subscribed": 324,
|
||||||
|
"unsubscribed": 83
|
||||||
|
},
|
||||||
|
"2022-01-10T00:00:00Z": {
|
||||||
|
"subscribed": 417,
|
||||||
|
"unsubscribed": 80
|
||||||
|
},
|
||||||
|
"2022-01-11T00:00:00Z": {
|
||||||
|
"subscribed": 433,
|
||||||
|
"unsubscribed": 92
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
*** New Subscribers Weekly
|
*** New Subscribers Weekly
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: weekly-new-subscribers
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- new_subscribers_weekly
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2021-03-26T00:00:00Z": {
|
||||||
|
"subscribed": 3182,
|
||||||
|
"unsubscribed": 1249
|
||||||
|
},
|
||||||
|
"2021-04-02T00:00:00Z": {
|
||||||
|
"subscribed": 3423,
|
||||||
|
"unsubscribed": 1497
|
||||||
|
},
|
||||||
|
"2021-04-09T00:00:00Z": {
|
||||||
|
"subscribed": 3052,
|
||||||
|
"unsubscribed": 1217
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
*** New Subscribers Monthly
|
*** New Subscribers Monthly
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: monthly-new-subscribers
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- new_subscribers_monthly
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2021-03-01T00:00:00Z": {
|
||||||
|
"subscribed": 14972,
|
||||||
|
"unsubscribed": 4770
|
||||||
|
},
|
||||||
|
"2021-04-01T00:00:00Z": {
|
||||||
|
"subscribed": 14973,
|
||||||
|
"unsubscribed": 7181
|
||||||
|
},
|
||||||
|
"2021-05-01T00:00:00Z": {
|
||||||
|
"subscribed": 12652,
|
||||||
|
"unsubscribed": 5243
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
*** Subscriber Totals Daily
|
*** Subscriber Totals Daily
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: subscribers-by-location
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- subscriber_totals_daily
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2022-01-09T00:00:00Z": {
|
||||||
|
"subscribed": 289192,
|
||||||
|
"unsubscribed": 920812
|
||||||
|
},
|
||||||
|
"2022-01-10T00:00:00Z": {
|
||||||
|
"subscribed": 289609,
|
||||||
|
"unsubscribed": 920892
|
||||||
|
},
|
||||||
|
"2022-01-11T00:00:00Z": {
|
||||||
|
"subscribed": 290042,
|
||||||
|
"unsubscribed": 920984
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
*** Subscriber Totals Weekly
|
*** Subscriber Totals Weekly
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: subscribers-by-location
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- subscriber_totals_weekly
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2021-02-08T00:00:00Z": {
|
||||||
|
"subscribed": 191745,
|
||||||
|
"unsubscribed": 887713
|
||||||
|
},
|
||||||
|
"2021-02-15T00:00:00Z": {
|
||||||
|
"subscribed": 193972,
|
||||||
|
"unsubscribed": 888733
|
||||||
|
},
|
||||||
|
"2021-02-22T00:00:00Z": {
|
||||||
|
"subscribed": 196200,
|
||||||
|
"unsubscribed": 889717
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
*** Subscriber Totals Monthly
|
*** Subscriber Totals Monthly
|
||||||
:PROPERTIES:
|
#+attr_confluence: :as-table t
|
||||||
:Effort: 1d
|
- Name :: subscribers-by-location
|
||||||
:END:
|
- Parameters ::
|
||||||
|
- List (default: all lists)
|
||||||
|
- Report API controller endpoints ::
|
||||||
|
- subscriber_totals_monthly
|
||||||
|
|
||||||
|
Uses the =public.leads_stats_day= table in AppDB.
|
||||||
|
|
||||||
|
#+caption: Sample Response (Production AID 91)
|
||||||
|
#+begin_src json
|
||||||
|
{
|
||||||
|
"2021-02-01T00:00:00Z": {
|
||||||
|
"subscribed": 196200,
|
||||||
|
"unsubscribed": 889717
|
||||||
|
},
|
||||||
|
"2021-03-01T00:00:00Z": {
|
||||||
|
"subscribed": 206569,
|
||||||
|
"unsubscribed": 894298
|
||||||
|
},
|
||||||
|
"2021-04-01T00:00:00Z": {
|
||||||
|
"subscribed": 215813,
|
||||||
|
"unsubscribed": 900020
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Migrate reports to the Analytics View Service
|
** Migrate reports to the Analytics View Service
|
||||||
|
|
67
daily/2022-02-04.org
Normal file
67
daily/2022-02-04.org
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: bea03f11-ea0e-495e-98e9-3f5fba9e056e
|
||||||
|
:END:
|
||||||
|
#+title: 2022-02-04
|
||||||
|
|
||||||
|
* Experimenting with Splash rendering
|
||||||
|
|
||||||
|
Looking into how to render landing page drafts for content moderation.
|
||||||
|
|
||||||
|
#+name: hello-html
|
||||||
|
#+begin_src html
|
||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
|
<title>Untitled</title>
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
||||||
|
<!-- Place favicon.ico in the root directory -->
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body bgcolor="red">
|
||||||
|
<!--[if lt IE 8]>
|
||||||
|
<p class="browserupgrade">
|
||||||
|
You are using an <strong>outdated</strong> browser. Please
|
||||||
|
<a href="http://browsehappy.com/">upgrade your browser</a> to improve
|
||||||
|
your experience.
|
||||||
|
</p>
|
||||||
|
<![endif]-->
|
||||||
|
<center><b>Hello!</b></center>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: hello-data-url
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(concat
|
||||||
|
"data:text/html;base64,"
|
||||||
|
(base64-encode-string
|
||||||
|
(cadr (org-babel-lob--src-info "hello-html")) t))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS: hello-data-url
|
||||||
|
: data:text/html;base64,PCFkb2N0eXBlIGh0bWw+CjxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iIj4KICAgIDxoZWFkPgogICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJ4LXVhLWNvbXBhdGlibGUiIGNvbnRlbnQ9ImllPWVkZ2UiPgogICAgICAgIDx0aXRsZT5VbnRpdGxlZDwvdGl0bGU+CiAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+CiAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCiAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvYXBwbGUtdG91Y2gtaWNvbi5wbmciPgogICAgICAgIDwhLS0gUGxhY2UgZmF2aWNvbi5pY28gaW4gdGhlIHJvb3QgZGlyZWN0b3J5IC0tPgoKICAgIDwvaGVhZD4KICAgIDxib2R5IGJnY29sb3I9InJlZCI+CiAgICAgICAgPCEtLVtpZiBsdCBJRSA4XT4KICAgICAgICAgICAgPHAgY2xhc3M9ImJyb3dzZXJ1cGdyYWRlIj4KICAgICAgICAgICAgWW91IGFyZSB1c2luZyBhbiA8c3Ryb25nPm91dGRhdGVkPC9zdHJvbmc+IGJyb3dzZXIuIFBsZWFzZQogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vYnJvd3NlaGFwcHkuY29tLyI+dXBncmFkZSB5b3VyIGJyb3dzZXI8L2E+IHRvIGltcHJvdmUKICAgICAgICAgICAgeW91ciBleHBlcmllbmNlLgogICAgICAgICAgICA8L3A+CiAgICAgICAgPCFbZW5kaWZdLS0+CiAgICAgICAgPGNlbnRlcj48Yj5IZWxsbyE8L2I+PC9jZW50ZXI+CgogICAgPC9ib2R5Pgo8L2h0bWw+
|
||||||
|
|
||||||
|
#+begin_src http :var url=hello-data-url
|
||||||
|
GET http://splash.service.testing.consul/render.html?url=${url}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
: HTTP/1.1 200 OK
|
||||||
|
: Date: Fri, 04 Feb 2022 16:38:45 GMT
|
||||||
|
: Content-Type: text/html; charset=utf-8
|
||||||
|
: Transfer-Encoding: chunked
|
||||||
|
: Connection: keep-alive
|
||||||
|
: Server: TwistedWeb/19.7.0
|
||||||
|
:
|
||||||
|
: <html><head></head><body></body></html>
|
||||||
|
|
||||||
|
Well, crap. It doesn't like data urls.
|
||||||
|
|
||||||
|
It is self-hosted, though, so it should be able to reach any internal hosted
|
||||||
|
versions of pages if/when they become available.
|
7
daily/2022-02-10.org
Normal file
7
daily/2022-02-10.org
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: aa735987-ba02-4430-87b9-3f8dc5cefaa8
|
||||||
|
:END:
|
||||||
|
#+title: 2022-02-10
|
||||||
|
|
||||||
|
- Daily materialized report account stats table in appdb could be useful.
|
||||||
|
- Should followups be retained?
|
Loading…
Reference in a new issue