27
Systém odesílání zpráv Migrace FRED mess(enger) - přechod na nový systém pro odesílání zpráv Vlastimil Zíma [email protected] 10. listopadu 2021

FRED mess(enger) - nic.cz

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

FRED mess(enger) - přechod nanový systém pro odesílání zpráv

Vlastimil Zíma • [email protected] • 10. listopadu 2021

Page 2: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Odesílání zpráv 2019• E-maily vs. SMS a dopisy• Poskytovatelé: 2 SMS, 2 dopisy• Velké tabulky• Celkem ~35 GB• Archiv 5 let• Nejednotná implementace• Zastaralé, neudržované projekty

Page 3: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Odesílání zpráv 2021

• Modulární systém• Jednotná implementace• Partitionované tabulky• -1 poskytovatel dopisů• Postupný přechod

• Nový systém - 1 rok• Migrace - 1 rok

Page 4: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Odesílání zpráv 2021

• Modulární systém• Jednotná implementace• Partitionované tabulky• -1 poskytovatel dopisů• Postupný přechod

• Nový systém - 1 rok• Migrace - 1 rok

Page 5: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Šablony

• Systémy• Clearsilver (e-maily)• Bez šablon (SMS)• XSLT (dopisy)

Page 6: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Šablony

• „Opravy“ šablon

Váš účet:<?cs if:org ?>Organizace: <?cs var:org ?><?cs /if ?>

Váš účet:{% if org %}Organizace: {{ org }}{% endif %}

• Makra (!)

Page 7: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Šablony

• „Opravy“ šablon

Váš účet:<?cs if:org ?>Organizace: <?cs var:org ?><?cs /if ?>

Váš účet:{% if org %}Organizace: {{ org }}{% endif %}

• Makra (!)

Page 8: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Šablony

• „Opravy“ šablon

Váš účet:<?cs if:org ?>Organizace: <?cs var:org ?><?cs /if ?>

Váš účet:{% if org %}Organizace: {{ org }}{% endif %}

• Makra (!)

Page 9: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Kontext e-mailů

{"handle": "example.org","domains": ["example.org", "example.com"],"nsset": {"new": "EXAMPLE-42", "old": "EXAMPLE-41"},

}

"type": "3"

"arr_nssets": "{}"

Page 10: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Kontext e-mailů

{"handle": "example.org","domains": ["example.org", "example.com"],"nsset": {"new": "EXAMPLE-42", "old": "EXAMPLE-41"},

}

"type": "3"

"arr_nssets": "{}"

Page 11: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Kontext e-mailů

{"handle": "example.org","domains": ["example.org", "example.com"],"nsset": {"new": "EXAMPLE-42", "old": "EXAMPLE-41"},

}

"type": "3"

"arr_nssets": "{}"

Page 12: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Databáze - tabulky

• mail_archive• message_archive• message - EPP poll zprávy• mail_ vs. message_ vs. message

Page 13: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Databáze - status

Table "public.mail_archive"Column | Type

-----------------------+-----------------------------status | integer

Page 14: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Databáze - status

def __dbUpdateStatus(self, conn, mailid, status, reset_counter=False):"""Set status value in mail archive. Meaning of status values are:

0: Mail was successfully sent.1: Mail is ready to be sent.2: Mail waits for manual confirmation.3: This email will not be sent or touched by mailer.4: Delivery of email failed.

If reset_counter is true, then counter of unsuccessfull sendmailattempts is set to 0."""

Page 15: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Databáze - status

fred=# SELECT status, count(*) FROM mail_archive GROUP BY 1;status | count

--------+----------0 | 154809321 | 26973 | 34974 | 141987510 | 14555

Page 16: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Anonymizovaná data

{"body": {},"header": {

"To": "[email protected]","Message-ID": "<[email protected]>"

}}

Page 17: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Adresáti

{"To": "[email protected]"

}

{"To": "[email protected],[email protected]"

}

{"To": "[email protected] [email protected] "

}

Page 18: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Ztracený kontext

{"header": {

"To": "[email protected]"}

}

Page 19: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Vynechané e-maily

Emails: 10178 migrated, 3841 skipped, 0 errors

SELECT ...FROM mail_archiveJOIN mail_template

ON mail_template.mail_type_id = mail_archive.mail_type_id...

WHERE ...

Page 20: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Vynechané e-maily

Emails: 10178 migrated, 3841 skipped, 0 errors

SELECT ...FROM mail_archiveJOIN mail_template

ON mail_template.mail_type_id = mail_archive.mail_type_id...

WHERE ...

Page 21: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Vynechané e-maily

Emails: 10178 migrated, 3841 skipped, 0 errors

SELECT ...FROM mail_archiveJOIN mail_template

ON mail_template.mail_type_id = mail_archive.mail_type_idAND mail_template.version = mail_archive.mail_template_version...

WHERE ...

Page 22: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Přebytek e-mailů

• ~550 e-mailů navíc za den

{"To": "[email protected]"

}

db-r-01$ cat /etc/cron.d/fred-clean14 5 * * * postgres psql -d fred -c "

DELETE FROM mail_archiveWHERE crdate >= current_date::timestamp - interval '2 day'AND crdate < current_date::timestamp - interval '1 day'AND message_params#>>'{header,To}' = '[email protected]'

"

Page 23: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Přebytek e-mailů

• ~550 e-mailů navíc za den

{"To": "[email protected]"

}

db-r-01$ cat /etc/cron.d/fred-clean14 5 * * * postgres psql -d fred -c "

DELETE FROM mail_archiveWHERE crdate >= current_date::timestamp - interval '2 day'AND crdate < current_date::timestamp - interval '1 day'AND message_params#>>'{header,To}' = '[email protected]'

"

Page 24: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Přebytek e-mailů

• ~550 e-mailů navíc za den

{"To": "[email protected]"

}

db-r-01$ cat /etc/cron.d/fred-clean14 5 * * * postgres psql -d fred -c "

DELETE FROM mail_archiveWHERE crdate >= current_date::timestamp - interval '2 day'AND crdate < current_date::timestamp - interval '1 day'AND message_params#>>'{header,To}' = '[email protected]'

"

Page 25: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Výsledky

• 10 000 e-mailů / den• 1 000 SMS / den• 300 dopisů / den• Migrace 6 h / měsíc

Page 26: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Ponaučení

• Ničemu nevěřit.• Ověřovat svoje předpoklady.• Stará data obsahují nemožné.• Důležitost paměti.

Page 27: FRED mess(enger) - nic.cz

Systém odesílání zpráv Migrace

Děkuji za pozornost

Vlastimil Zíma • [email protected]