{"action":"created","issue":{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/345","repository_url":"https://api.github.com/repos/CroceRossaItaliana/jorvik","labels_url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/345/labels{/name}","comments_url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/345/comments","events_url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/345/events","html_url":"https://github.com/CroceRossaItaliana/jorvik/issues/345","id":173431566,"number":345,"title":"Migliorare il sistema di posta","user":{"login":"AlfioEmanueleFresta","id":621062,"avatar_url":"https://avatars.githubusercontent.com/u/621062?v=3","gravatar_id":"","url":"https://api.github.com/users/AlfioEmanueleFresta","html_url":"https://github.com/AlfioEmanueleFresta","followers_url":"https://api.github.com/users/AlfioEmanueleFresta/followers","following_url":"https://api.github.com/users/AlfioEmanueleFresta/following{/other_user}","gists_url":"https://api.github.com/users/AlfioEmanueleFresta/gists{/gist_id}","starred_url":"https://api.github.com/users/AlfioEmanueleFresta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlfioEmanueleFresta/subscriptions","organizations_url":"https://api.github.com/users/AlfioEmanueleFresta/orgs","repos_url":"https://api.github.com/users/AlfioEmanueleFresta/repos","events_url":"https://api.github.com/users/AlfioEmanueleFresta/events{/privacy}","received_events_url":"https://api.github.com/users/AlfioEmanueleFresta/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/labels/app:%20posta","name":"app: posta","color":"bfe5bf"},{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/labels/pri:%20URGENTE","name":"pri: URGENTE","color":"b60205"},{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/labels/stato:%20in%20carico","name":"stato: in carico","color":"fef2c0"},{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/labels/tipo:%20bug%20-%20correzione","name":"tipo: bug - correzione","color":"bfd4f2"}],"state":"open","locked":false,"assignee":{"login":"yakky","id":714711,"avatar_url":"https://avatars.githubusercontent.com/u/714711?v=3","gravatar_id":"","url":"https://api.github.com/users/yakky","html_url":"https://github.com/yakky","followers_url":"https://api.github.com/users/yakky/followers","following_url":"https://api.github.com/users/yakky/following{/other_user}","gists_url":"https://api.github.com/users/yakky/gists{/gist_id}","starred_url":"https://api.github.com/users/yakky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yakky/subscriptions","organizations_url":"https://api.github.com/users/yakky/orgs","repos_url":"https://api.github.com/users/yakky/repos","events_url":"https://api.github.com/users/yakky/events{/privacy}","received_events_url":"https://api.github.com/users/yakky/received_events","type":"User","site_admin":false},"assignees":[{"login":"yakky","id":714711,"avatar_url":"https://avatars.githubusercontent.com/u/714711?v=3","gravatar_id":"","url":"https://api.github.com/users/yakky","html_url":"https://github.com/yakky","followers_url":"https://api.github.com/users/yakky/followers","following_url":"https://api.github.com/users/yakky/following{/other_user}","gists_url":"https://api.github.com/users/yakky/gists{/gist_id}","starred_url":"https://api.github.com/users/yakky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yakky/subscriptions","organizations_url":"https://api.github.com/users/yakky/orgs","repos_url":"https://api.github.com/users/yakky/repos","events_url":"https://api.github.com/users/yakky/events{/privacy}","received_events_url":"https://api.github.com/users/yakky/received_events","type":"User","site_admin":false}],"milestone":null,"comments":4,"created_at":"2016-08-26T11:26:55Z","updated_at":"2016-08-29T13:10:24Z","closed_at":null,"body":"L'emergenza terremoto ha portato alla luce alcune criticita' nell'attuale gestione della coda di posta, che e' stata messa sotto estremo stress. Il sistema deve essere in grado di gestire tali emergenze, quindi e' necessario apportare delle modifiche al sistema di smistamento. Qui dettaglio in parte delle specifiche per le modifiche da apportare.\r\n\r\nQueste specifiche assumono un supporto infrastrutturale con un endpoint SMTP in grado di smistare tutta la posta che gli viene sbattuta contro -- che e' una fair assumption dato che il fallimento non e' stato dovuto dal server SMTP.\r\n\r\nAttualmente il sistema di posta funziona piu' o meno cosi:\r\n\r\n* Ogni 5 minuti, il cron chiama il metodo statico Messaggio.smaltisci_coda\r\n\r\n  * Questo metodo raccoglie un numero (attualmente 1500) di `Messaggio`s in coda. Nota che questo ha un numero indefinito di destinatari per ogni messaggio. Per ognuno, il metodo `Messaggio.invia` viene chiamato. Viene passata come argomento la connessione SMTP per evitare che il metodo debba aprirne una nuova.\r\n\r\n    * Questo provvede a ciclare sui destinatari con `inviato=False` ed effettuare l'invio. Per ogni destinatario correttamente smistato, `inviato` diventa `True`. Una volta terminato, applica uno stato `terminato` al messaggio. \r\n\r\n\r\nProblemi attuali:\r\n\r\n* Se una eccezione su un destinatario termina l'invio di un messaggio, la prossima iterazione non continuera' dal destinatario sbagliato ma riprovera' tutti quelli nel messaggio con inviato=False. Questi contengono anche errori che non dovrebbero essere riprovati, tipo e-mail non valide, perdendo un sacco di tempo. Inoltre il server SMTP ci disconnette automaticamente ogni tot di e-mail non valide, e questo puo' vuol dire che per grandi messaggi, e' praticamente garantito che il messaggio debba riessere messo in coda piu' volte.\r\n\r\n* Se la coda lascia piu' di 1500 messaggi non terminati, e' possibile che provi all'infinito ad inviare quei 1500, senza accettare e smistare i nuovi messaggi. Deve essere introdotto un nuovo sistema di stati per i messaggi, che diano uno stato piu' significativo ai messaggi in coda. In particolare, una tupla configurabile dovrebbe permettere di configurare quali errori dovrebbero portare al riprovare e quali invece ad un nuovo tentativo. Ad esempio, e-mail invalida o errori generici ritornati da SMTP dovrebbero NON rimettere in coda il messaggio, mentre un errore temporaneo di invio o una disconnessione dal server SMTP (che accade di tanto in tanto e deve essere tollerata) dovrebbe riportare il messaggio in coda. Infine, il messaggio dovrebbe avere dei dati aggregati sulla situazione di invio che dovrebbero essere usati per identificare velocemente lo stato di invio del messaggio.\r\n\r\n* Ci sono delle eccezioni di tipo AttributeError da qualche parte quando in una riga si aggiunge qualcosa tipo `[x.persona.email],` dove `.email` non esiste per quella persona.\r\n\r\n\r\nAltre note:\r\n\r\n* La modifica non deve rimettere in coda dei messaggi che sono stati in errore per piu' di una settimana. Questi non devono neanche andare cancellati dal database.\r\n\r\n\r\n------\r\n\r\nRimango a disposizione per eventuali chiarimenti. Il codice e' tutto nel modulo `posta`, in particolare distribuito in `models.py`. "},"comment":{"url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/comments/243119243","html_url":"https://github.com/CroceRossaItaliana/jorvik/issues/345#issuecomment-243119243","issue_url":"https://api.github.com/repos/CroceRossaItaliana/jorvik/issues/345","id":243119243,"user":{"login":"yakky","id":714711,"avatar_url":"https://avatars.githubusercontent.com/u/714711?v=3","gravatar_id":"","url":"https://api.github.com/users/yakky","html_url":"https://github.com/yakky","followers_url":"https://api.github.com/users/yakky/followers","following_url":"https://api.github.com/users/yakky/following{/other_user}","gists_url":"https://api.github.com/users/yakky/gists{/gist_id}","starred_url":"https://api.github.com/users/yakky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yakky/subscriptions","organizations_url":"https://api.github.com/users/yakky/orgs","repos_url":"https://api.github.com/users/yakky/repos","events_url":"https://api.github.com/users/yakky/events{/privacy}","received_events_url":"https://api.github.com/users/yakky/received_events","type":"User","site_admin":false},"created_at":"2016-08-29T13:10:24Z","updated_at":"2016-08-29T13:10:24Z","body":"Ho pronto ho hotfix per gestire il caso specifico, seguirà patch più completa"}}
{"actor":{"display_login":"yakky"}}