prepare gradual transition between smtp configs
parent
c91c486424
commit
e7c4abb46f
|
@ -10,6 +10,7 @@ final class Dev(env: Env) extends LilaController(env) {
|
|||
private lazy val settingsList = List[lila.memo.SettingStore[_]](
|
||||
env.security.ugcArmedSetting,
|
||||
env.security.spamKeywordsSetting,
|
||||
env.security.mailerSecondaryPercentageSetting,
|
||||
env.irwin.irwinThresholdsSetting,
|
||||
env.explorer.indexFlowSetting,
|
||||
env.report.scoreThresholdsSetting,
|
||||
|
|
|
@ -193,6 +193,7 @@ security {
|
|||
user = "noreply@lichess.org"
|
||||
password = "???"
|
||||
}
|
||||
secondary = ${security.mailer.primary}
|
||||
sender = "lichess.org <noreply@lichess.org>"
|
||||
}
|
||||
email_confirm {
|
||||
|
|
|
@ -79,7 +79,16 @@ final class Env(
|
|||
mk(ugcArmedSetting.get _)
|
||||
}
|
||||
|
||||
private lazy val mailer: Mailer = wire[Mailer]
|
||||
lazy val mailerSecondaryPercentageSetting = settingStore[Int](
|
||||
"mailerSecondaryPercentage",
|
||||
default = 0,
|
||||
text = "Percentage of mails to send using secondary SMTP configuration".some
|
||||
)
|
||||
|
||||
private lazy val mailer = new Mailer(
|
||||
config.mailer,
|
||||
getSecondaryPercentage = () => mailerSecondaryPercentageSetting.get()
|
||||
)
|
||||
|
||||
lazy val emailConfirm: EmailConfirm =
|
||||
if (config.emailConfirm.enabled)
|
||||
|
|
|
@ -9,12 +9,13 @@ import scala.concurrent.{ blocking, Future }
|
|||
import scalatags.Text.all._
|
||||
|
||||
import lila.common.config.Secret
|
||||
import lila.common.{ Chronometer, EmailAddress }
|
||||
import lila.common.{ Chronometer, EmailAddress, ThreadLocalRandom }
|
||||
import lila.common.String.html.{ escapeHtml, nl2brUnsafe }
|
||||
import lila.i18n.I18nKeys.{ emails => trans }
|
||||
|
||||
final class Mailer(
|
||||
config: Mailer.Config
|
||||
config: Mailer.Config,
|
||||
getSecondaryPercentage: () => Int
|
||||
)(implicit
|
||||
ec: scala.concurrent.ExecutionContext,
|
||||
system: ActorSystem
|
||||
|
@ -23,7 +24,12 @@ final class Mailer(
|
|||
private val workQueue =
|
||||
new lila.hub.DuctSequencer(maxSize = 512, timeout = Mailer.timeout * 2, name = "mailer")
|
||||
|
||||
private val client = new SMTPMailer(config.primary.toClientConfig)
|
||||
private val primaryClient = new SMTPMailer(config.primary.toClientConfig)
|
||||
private val secondaryClient = new SMTPMailer(config.secondary.toClientConfig)
|
||||
|
||||
private def randomClient(): SMTPMailer =
|
||||
if (ThreadLocalRandom.nextInt(100) < getSecondaryPercentage()) secondaryClient
|
||||
else primaryClient
|
||||
|
||||
def send(msg: Mailer.Message): Funit =
|
||||
if (msg.to.isNoReply) {
|
||||
|
@ -34,7 +40,7 @@ final class Mailer(
|
|||
Future {
|
||||
Chronometer.syncMon(_.email.send.time) {
|
||||
blocking {
|
||||
client
|
||||
randomClient()
|
||||
.send(
|
||||
Email(
|
||||
subject = msg.subject,
|
||||
|
@ -78,6 +84,7 @@ object Mailer {
|
|||
|
||||
case class Config(
|
||||
primary: Smtp,
|
||||
secondary: Smtp,
|
||||
sender: String
|
||||
)
|
||||
implicit val configLoader = AutoConfig.loader[Config]
|
||||
|
|
Loading…
Reference in New Issue