diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index bba48558..123266d1 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -383,6 +383,9 @@ $bezier: cubic-bezier(0.75, 0, 0.25, 1);
}
}
+.word-break-all { word-break: break-all !important; }
+.hyphens { hyphens: auto; }
+
/*
* Modificadores de Bootstrap que no tienen versión responsive.
*/
@@ -405,6 +408,8 @@ $bezier: cubic-bezier(0.75, 0, 0.25, 1);
.text-#{$grid-breakpoint}-right { text-align: right !important; }
.text-#{$grid-breakpoint}-center { text-align: center !important; }
+ .word-break-#{$grid-breakpoint}-all { word-break: break-all !important; }
+
// posición
@each $position in $positions {
.position-#{$grid-breakpoint}-#{$position} { position: $position !important; }
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index b4be5a97..ee153394 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -91,6 +91,10 @@ class ApplicationController < ActionController::Base
breadcrumb 'stats.index', root_path, match: :exact
end
+ def site
+ @site ||= find_site
+ end
+
protected
def configure_permitted_parameters
diff --git a/app/controllers/build_stats_controller.rb b/app/controllers/build_stats_controller.rb
new file mode 100644
index 00000000..31a4c5d6
--- /dev/null
+++ b/app/controllers/build_stats_controller.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+# La lista de estados de compilación, por ahora solo mostramos el último
+# estado.
+class BuildStatsController < ApplicationController
+ include ActionView::Helpers::NumberHelper
+ include ActionView::Helpers::DateHelper
+
+ before_action :authenticate_usuarie!
+
+ breadcrumb -> { current_usuarie.email }, :edit_usuarie_registration_path
+ breadcrumb 'sites.index', :sites_path, match: :exact
+ breadcrumb -> { site.title }, -> { site_posts_path(site, locale: locale) }, match: :exact
+
+ def index
+ authorize SiteBuildStat.new(site)
+ breadcrumb I18n.t('build_stats.index.title'), ''
+
+ @headers = %w[type url seconds size].map do |header|
+ t("deploy_mailer.deployed.th.#{header}")
+ end
+
+ @table = site.deployment_list.map do |deploy|
+ type = deploy.class.name.underscore
+ urls = deploy.respond_to?(:urls) ? deploy.urls : [deploy.url].compact
+ urls = [nil] if urls.empty?
+ build_stat = deploy.build_stats.where(status: true).last
+ seconds = build_stat&.seconds || 0
+
+ {
+ title: t("deploy_mailer.deployed.#{type}.title"),
+ urls: urls,
+ seconds: {
+ human: distance_of_time_in_words(seconds),
+ machine: "PT#{seconds}S"
+ },
+ size: number_to_human_size(build_stat&.bytes || 0, precision: 2)
+ }
+ end
+ end
+end
diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb
index 3c529c24..9720fe13 100644
--- a/app/controllers/posts_controller.rb
+++ b/app/controllers/posts_controller.rb
@@ -159,10 +159,6 @@ class PostsController < ApplicationController
end.transform_keys(&:to_sym)
end
- def site
- @site ||= find_site
- end
-
def post
@post ||= site.posts(lang: locale).find(params[:post_id] || params[:id])
end
diff --git a/app/models/deploy_distributed_press.rb b/app/models/deploy_distributed_press.rb
index a9494658..889d8e34 100644
--- a/app/models/deploy_distributed_press.rb
+++ b/app/models/deploy_distributed_press.rb
@@ -85,12 +85,13 @@ class DeployDistributedPress < Deploy
private
+ # @return [Array]
def gateway_urls
- remote_info.dig(:distributed_press, :links).values.map do |protocol|
+ remote_info.dig(:distributed_press, :links)&.values&.map do |protocol|
[ protocol[:link], protocol[:gateway] ]
- end.flatten.compact.select do |link|
+ end&.flatten&.compact&.select do |link|
link.include? '://'
- end
+ end || []
end
# El cliente de la API
diff --git a/app/models/site_build_stat.rb b/app/models/site_build_stat.rb
new file mode 100644
index 00000000..1a63a0bb
--- /dev/null
+++ b/app/models/site_build_stat.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+SiteBuildStat = Struct.new(:site)
diff --git a/app/policies/site_build_stat_policy.rb b/app/policies/site_build_stat_policy.rb
new file mode 100644
index 00000000..03f09d21
--- /dev/null
+++ b/app/policies/site_build_stat_policy.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+# Quiénes pueden ver estados de compilación de un sitio
+class SiteBuildStatPolicy
+ attr_reader :site_build_stat, :usuarie
+
+ def initialize(usuarie, site_build_stat)
+ @usuarie = usuarie
+ @site_build_stat = site_build_stat
+ end
+
+ # Todes les usuaries e invitades de este sitio
+ def index?
+ site_build_stat.site.usuarie?(usuarie) || site_build_stat.site.invitade?(usuarie)
+ end
+end
diff --git a/app/views/build_stats/index.haml b/app/views/build_stats/index.haml
new file mode 100644
index 00000000..27c063f9
--- /dev/null
+++ b/app/views/build_stats/index.haml
@@ -0,0 +1,20 @@
+%main.row
+ %aside.menu.col-md-3
+ = render 'sites/header', site: @site
+ .col
+ %h1= t('.title')
+
+ %table.table
+ %thead
+ %tr
+ - @headers.each do |header|
+ %th{ scope: 'col' }= header
+ %tbody
+ - @table.each do |row|
+ - row[:urls].each do |url|
+ %tr
+ %th{ scope: 'row' }= row[:title]
+ %td= link_to_if url.present?, url, url, class: 'word-break-all'
+ %td
+ %time{ datetime: row[:seconds][:machine] }= row[:seconds][:human]
+ %td= row[:size]
diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml
index 8f65e45e..7f9658af 100644
--- a/app/views/posts/index.haml
+++ b/app/views/posts/index.haml
@@ -1,7 +1,7 @@
%main.row
%aside.menu.col-md-3
- %h1= @site.title
- %p.lead= @site.description
+ = render 'sites/header', site: @site
+
- cache_if @usuarie, [@site, I18n.locale] do
= render 'sites/status', site: @site
diff --git a/app/views/sites/_header.haml b/app/views/sites/_header.haml
new file mode 100644
index 00000000..c8931041
--- /dev/null
+++ b/app/views/sites/_header.haml
@@ -0,0 +1,3 @@
+.hyphens{ lang: site.default_locale }
+ %h1= site.title
+ %p.lead= site.description
diff --git a/app/views/sites/_status.haml b/app/views/sites/_status.haml
index a731aa7d..4cf480df 100644
--- a/app/views/sites/_status.haml
+++ b/app/views/sites/_status.haml
@@ -16,4 +16,4 @@
- link = true
= render 'bootstrap/alert' do
- = link_to_if link, message.html_safe, site.url, class: 'alert-link'
+ = link_to_if link, message.html_safe, site_build_stats_path(site), class: 'alert-link'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 9e8462ec..27c52f48 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -364,9 +364,9 @@ en:
static_file_migration: 'File migration'
find_and_replace: 'Search and replace'
status:
- building: "Your site is building, please wait to refresh this page..."
+ building: "Your site is building, refresh this page in ."
not_published_yet: "Your site is being published for the first time, please wait up to 1 minute..."
- available: "Your site is available! Click here to visit it."
+ available: "Your site is available! Click here to find all the different ways to visit it."
index:
title: 'My Sites'
pull: 'Upgrade'
@@ -700,3 +700,6 @@ en:
queries:
show:
empty: '(empty)'
+ build_stats:
+ index:
+ title: "Publications"
diff --git a/config/locales/es.yml b/config/locales/es.yml
index b092e490..e3339156 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -369,9 +369,9 @@ es:
static_file_migration: 'Migración de archivos'
find_and_replace: 'Búsqueda y reemplazo'
status:
- building: "Tu sitio se está publicando, por favor espera para recargar esta página..."
+ building: "Tu sitio se está publicando, recargá esta página en ."
not_published_yet: "Tu sitio se está publicando por primera vez, por favor espera hasta un minuto..."
- available: "¡Tu sitio está disponible! Cliquea aquí para visitarlo."
+ available: "¡Tu sitio está disponible! Cliqueá aquí para encontrar todas las formas en que podés visitarlo."
index:
title: 'Mis sitios'
pull: 'Actualizar'
@@ -708,3 +708,6 @@ es:
queries:
show:
empty: '(vacío)'
+ build_stats:
+ index:
+ title: "Publicaciones"
diff --git a/config/routes.rb b/config/routes.rb
index 511ca654..3828915c 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -75,5 +75,7 @@ Rails.application.routes.draw do
get :'stats/host', to: 'stats#host'
get :'stats/uris', to: 'stats#uris'
get :'stats/resources', to: 'stats#resources'
+
+ resources :build_stats, only: %i[index]
end
end