переключение между хостами на основе даты эликсира - PullRequest
0 голосов
/ 03 октября 2018

у нас есть три типа хостов, на которых мы запускаем файловую систему и сохраняем jpegs.в самом начале у нас был хост как localhost:8888, который был до {{2017, 10, 31}, {23, 59, 59}}, и мы начинаем работать с 2 хостами, новый из которых был localhost:8889.

  def point_to_seaweed(request_date) do
    oct_date =
      {{2017, 10, 31}, {23, 59, 59}}
      |> Calendar.DateTime.from_erl!("UTC")

    case Calendar.DateTime.diff(request_date, oct_date) do
      {:ok, _, _, :after} -> "localhost:8889"
      _ -> "localhost:8888"
    end
  end

всякий раз, когда дата запроса превышает {{2017, 10, 31}, {23, 59, 59}}мы переключаемся на новый хост.но теперь на {{2018, 10, 31}, {23, 59, 59}} мы переходим на новый хост, но нам нужно также обработать все 2 старых хоста.

Я пробовал это.

  def point_to_seaweed(request_date) do
    oct_date =
      {{2017, 10, 31}, {23, 59, 59}}
      |> Calendar.DateTime.from_erl!("UTC")

    case Calendar.DateTime.diff(request_date, oct_date) do
      {:ok, secs, _, :after} ->
        case secs > 31536000 do
          true -> "localhost:8890"
          false -> "localhost:8889"
        end
      _ -> "localhost:8888"
    end
  end

Это лучший подход для выполненияэтот?31536000 на год.это можно сделать с помощью другого подхода?

1 Ответ

0 голосов
/ 03 октября 2018

Я бы использовал для этого встроенный модуль NaiveDateTime и определил вспомогательную функцию, чтобы проверить, предшествует ли дата Эрланга другой дате Эрланга:

def before?(date1, date2) do
  NaiveDateTime.diff(NaiveDateTime.from_erl!(date1), NaiveDateTime.from_erl!(date2)) < 0
end

, а затем использовать cond:

def point_to_seaweed(request_date) do
  port = cond do
    before?(request_date, {{2017, 10, 31}, {23, 59, 59}}) -> 8888
    before?(request_date, {{2018, 10, 31}, {23, 59, 59}}) -> 8889
    true -> 8890
  end
  "localhost:#{port}"
end
...