defmodule TriglavWeb.Zet.ErrorsController do use TriglavWeb, :controller alias Triglav.Zet.Errors alias Atomex.{Feed, Entry} def index(conn, _params) do history = Errors.list_history() render(conn, "index.html", history: history) end def atom(conn, _params) do history = Errors.list_history() self_url = TriglavWeb.Router.Helpers.zet_errors_url(conn, :atom) base_url = TriglavWeb.Router.Helpers.zet_errors_url(conn, :index) last_updated = if length(history) > 0, do: history |> List.first() |> Map.get(:timestamp), else: ~U"2000-01-01T00:00:00Z" feed = Feed.new(base_url, last_updated, "ZET error history") |> Feed.link(self_url, rel: "self") |> Feed.link(base_url, rel: "alternate", type: "text/html") |> Feed.entries(Enum.map(history, &to_entry(&1, base_url))) |> Feed.build(%{"xmlns:triglav" => "http://triglav.bezdomni.net/atom"}) |> Atomex.generate_document() conn |> put_resp_content_type("text/xml") |> send_resp(conn.status || 200, feed) end defp to_entry(history_item, base_url) do counts = %{ current: history_item.count, previous: history_item.previous_count, created: history_item.created_count, resolved: history_item.resolved_count, diff: history_item.created_count - history_item.resolved_count } id = "#{base_url}/#{history_item.id}" title = "Errors count changed #{counts.current} (+#{counts.created} -#{counts.resolved})" content = """
Created count: #{counts.created}
Resolved count: #{counts.resolved}
Current count: #{counts.current}
ZET GTFS feed version: #{history_item.zet_feed_version}
OSM sequence number: #{history_item.osm_sequence_number}
Timestamp: #{history_item.timestamp}