Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F886096
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Aug 8, 8:44 PM
Size
12 KB
Mime Type
text/x-diff
Expires
Sun, Aug 10, 8:44 PM (23 h, 35 m)
Engine
blob
Format
Raw Data
Handle
246050
Attached To
rARCHIVING archiving
View Options
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 4ed61fc..467f9b8 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,166 +1,174 @@
module ApplicationHelper
# Custom helper for better display of big numbers
# @example number_by_magnitude(4242)
# "4.2K"
#
# @param number[Numeric]
# @return [String] human friendly respresentation
def number_by_magnitude(number)
number_to_human(number, units: { thousand: :K, million: :M, billion: :G })
end
# Creates a bootstrap form-group div with an additional 'Add' button next to the select field
#
# @param object[ActiveRecord::Object] the form's subject
# @param resource[Symbol] the objects class
# @param attr[Symbol] the select box's attribute
# @param attr_name[String] the attribute's display name
# @param options[Array] the select box options
# @param path[String] the add button's path
def select_with_errors_and_button(object, resource, attr, attr_name, options, path)
has_errors = object.errors[attr].present?
content_tag(:div, class: "form-group #{' has-error' if has_errors }") do
attr_label = label(resource, attr, attr_name, class: 'control-label col-xs-5 required')
select_div = content_tag(:div, class: 'col-xs-5') do
select_part = select_tag([resource, attr].join('_').to_sym,
options,
include_blank: true,
name: "#{resource}[#{attr}]",
class: 'form-control'
)
if has_errors
select_part.concat(content_tag(:span, class: 'help-block') { object.errors[attr].first })
end
select_part
end
button_part = content_tag(:div, class: 'col-xs-1') do
link_to path do
content_tag(:span, class: 'glyphicon glyphicon-plus text-success') {}
end
end
attr_label.concat(select_div).concat(button_part)
end
end
# Returns a style class depending on the given parameter
#
# @param status[Char]
def success_class(status)
case status
when 'T' then 'success'
when 'E' then 'danger'
when 'f' then 'fatal'
end
end
# Fetches the html class for a given path
#
# @param path[String] the path to check for
# @param partial[Boolean] forces a left partial match
#
# @return [Hash] { class: 'active' } if the given path is the current page
def active_class(path, partial = false)
if current_page?(path) || (partial && request.path.starts_with?(path))
{ class: 'active' }
else
{}
end
end
# Constructs a breadcrumb out the given options
#
# @param options[Hash] a hash containing the breadcrumb links in name: path sets
# @return an html ol breadcrumb
def breadcrumb_with(options)
content_tag(:ol, class: 'breadcrumb') do
options.map { |name, path|
content_tag(:li, active_class(path)) do
link_to name, path
end
}.inject { |result, element| result.concat(element) }
end
end
# Constructs a list with the given array elements
#
# @example:
# inline_list([:foo, :bar])
#
# <ul class="list-inline'>
# <li><span class="label label-default">foo</span></li>
# <li><span class="label label-default">bar</span></li>
# </ul>
#
# @param arr[Array]
# @return an html ul list
def inline_list(arr)
content_tag(:ul, class: 'list-inline') do
arr.map { |element|
content_tag(:li) do
content_tag(:span, class: 'label label-default') do
element
end
end
}.inject { |result, element| result.concat(element) }
end
end
# Generates a span with a yes or no and the corresponding formatting
# according to the value's falseness
#
# @param value[Integer]
def yes_no(value)
klass = value == 1 ? 'label label-success' : 'label label-danger'
text = value == 1 ? 'yes' : 'no'
content_tag(:span, class: klass) { text }
end
# Generates a percentage and adds some color coding for better visibility
#
# @param ratio [Numeric] the ratio
# @param quota [Integer] the client's space quota
#
# @return [String] an html label tag
def pretty_percentage(ratio, quota)
color = ([[ratio, 0.2].max, 0.99].min * 256).to_i.to_s(16) << '0000'
content_tag(:label, class: 'label', style: "background-color:##{color}") do
number_to_percentage(100 * ratio, precision: 1)
end
end
# Generates a button that may be disabled
#
# @param disabled[Boolean]
# @param display_text[String]
# @param url[String]
# @param opts[Hash]
- def button_or_disabled(disabled, display_text, url, opts = {})
+ def button_or_disabled_with_label(disabled, display_text, url, opts = {})
+ icon_class = opts.delete(:icon_class)
+ text_class = opts.delete(:text_class)
if disabled
url = '#'
opts.merge!(disabled: true)
opts.reverse_merge!(title: 'Client is blocked')
opts.delete(:method)
else
opts.delete(:title)
end
- link_to display_text, url, opts
+ link_to url, opts do
+ [
+ content_tag(:label, class: [icon_class, text_class].join(' ')) { },
+ display_text
+ ].join(' ').html_safe
+ end
end
+
# Generates a span that contains a text and a questionmark label.
# hovering on that questionmark will display a helper text
#
# @param text[String] the displayed text
# @param tooltip[String] the displayed helper text
def tooltip_label(text, tooltip)
content_tag(:span, class: "data-toggle", title: tooltip) do
[
text,
content_tag(:label, class: "glyphicon glyphicon-question-sign") { }
].join(' ').html_safe
end
end
end
diff --git a/app/views/clients/_actions.html.erb b/app/views/clients/_actions.html.erb
index 89ae5b8..6c93930 100644
--- a/app/views/clients/_actions.html.erb
+++ b/app/views/clients/_actions.html.erb
@@ -1,47 +1,49 @@
<div class="row">
<div class="col-xs-12">
<% if @client.is_backed_up? %>
- <%= button_or_disabled(@client.host.blocked?, 'Restore Files',
- restore_client_path(@client),
- class: "btn btn-warning", role: "button") %>
+ <%= button_or_disabled_with_label(
+ @client.host.blocked?, 'Restore Files',
+ restore_client_path(@client),
+ class: "btn btn-default", role: "button",
+ icon_class: 'glyphicon glyphicon-cloud-download', text_class: 'text-warning') %>
<% end %>
<% if @client.host %>
<%= link_to host_path(@client.host), class: "btn btn-default", role: "button" do %>
<label class="glyphicon glyphicon-edit text-primary"></label>
Manage Client
<% end %>
<% end %>
<%= link_to fd_config_host_path(@client.host, token: current_user.token),
class: "btn btn-default", role: "button", download: 'fd_config' do %>
<label class="glyphicon glyphicon-download-alt text-primary"></label>
Download Config
<% end %>
<%= link_to '#', data: { toggle: 'modal', target: "#js-fd-config"} do %>
<label class='glyphicon glyphicon-info-sign'></label>
<% end %>
</div>
</div>
<br/>
<%= link_to 'Back to clients', clients_path %>
<div id="js-fd-config" class="modal" tabindex="-1" role="dialog" aria-labelledby="ConfigModal">
<div class="modal-dialog modal-lg">
<div class="modal-content container">
<br />
<div class="panel panel-default">
<div class="panel-heading">Config Download</div>
<div class="panel-body">
You can also download the config like this:
<pre>
<%= "$ wget #{fd_config_host_url(@client.host, token: current_user.token)}" %>
</pre>
</div>
</div>
</div>
</div>
</div>
diff --git a/app/views/clients/_job.html.erb b/app/views/clients/_job.html.erb
index fec0df4..9306664 100644
--- a/app/views/clients/_job.html.erb
+++ b/app/views/clients/_job.html.erb
@@ -1,21 +1,23 @@
<tr>
<td><%= job.name %></td>
<td><%= job.job_type %></td>
<td>
<%= link_to job.fileset.name, '#',
data: { toggle: 'modal', target: ".js-fileset-#{job.fileset_id}:first"} %>
</td>
<td>
<%= link_to job.schedule_human, '#',
data: { toggle: 'modal', target: ".js-schedule-#{job.schedule_id}:first"} %>
</td>
<td><%= I18n.l(job.created_at, format: :long) %></td>
<td>
<% if job.baculized? && job.backup? %>
- <%= button_or_disabled(@client.host.blocked? || !job.enabled?, 'Full Backup Now',
- backup_now_host_job_path(job.host, job), method: :post,
- class: "btn btn-success", role: "button",
- title: @client.host.blocked? ? 'Client is blocked' : 'Job not enabled') %>
+ <%= button_or_disabled_with_label(
+ @client.host.blocked? || !job.enabled?, 'Full Backup Now',
+ backup_now_host_job_path(job.host, job), method: :post,
+ class: "btn btn-default", role: "button",
+ title: @client.host.blocked? ? 'Client is blocked' : 'Job not enabled',
+ icon_class: 'glyphicon glyphicon-hdd', text_class: 'text-success') %>
<% end %>
</td>
</tr>
diff --git a/app/views/jobs/_job_template_details.html.erb b/app/views/jobs/_job_template_details.html.erb
index 8d358b2..83d6708 100644
--- a/app/views/jobs/_job_template_details.html.erb
+++ b/app/views/jobs/_job_template_details.html.erb
@@ -1,23 +1,28 @@
<tr>
<td><%= link_to job.name, host_job_path(@host, job) %></td>
<td><%= job.job_type %></td>
<td>
<%= link_to job.fileset.name, '#',
data: { toggle: 'modal', target: ".js-fileset-#{job.fileset_id}:first"} %>
</td>
<td>
<%= link_to job.schedule_human, '#',
data: { toggle: 'modal', target: ".js-schedule-#{job.schedule_id}:first"} %>
</td>
<td><%= job.client_before_run_file %></td>
<td><%= job.client_after_run_file %></td>
+ <td><%= yes_no(job.enabled? ? 1 : 0) %></td>
<td>
<% if job.enabled? %>
- <%= button_or_disabled(@host.blocked?, 'Disable', toggle_enable_host_job_path(@host, job),
- method: :patch, class: "btn btn-warning", role: "button") %>
+ <%= button_or_disabled_with_label(
+ @host.blocked?, 'Disable', toggle_enable_host_job_path(@host, job),
+ method: :patch, class: "btn btn-default", role: "button",
+ icon_class: 'glyphicon glyphicon-remove', text_class: 'text-warning') %>
<% else %>
- <%= button_or_disabled(@host.blocked?, 'Enable', toggle_enable_host_job_path(@host, job),
- method: :patch, class: "btn btn-info", role: "button") %>
+ <%= button_or_disabled_with_label(
+ @host.blocked?, 'Enable', toggle_enable_host_job_path(@host, job),
+ method: :patch, class: "btn btn-default", role: "button",
+ icon_class: 'glyphicon glyphicon-ok', text_class: 'text-success') %>
<% end %>
</td>
</tr>
diff --git a/app/views/jobs/_job_templates.html.erb b/app/views/jobs/_job_templates.html.erb
index 7752013..79b64a6 100644
--- a/app/views/jobs/_job_templates.html.erb
+++ b/app/views/jobs/_job_templates.html.erb
@@ -1,24 +1,27 @@
<div class="col-xs-6">
<div class="table-responsive">
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>FileSet</th>
<th>Schedule</th>
<th>Client Before Run Job</th>
<th>Client After Run Job</th>
<th>Enabled</th>
+ <th>Actions</th>
</tr>
</thead>
<tbody>
<%= render partial: 'jobs/job_template_details',
collection: @host.job_templates, as: :job %>
</tbody>
</table>
</div>
- <%= button_or_disabled(@host.blocked?, 'Add Job', new_host_job_path(host_id: @host.id),
- class: "btn btn-success", role: "button") %>
+ <%= button_or_disabled_with_label(
+ @host.blocked?, 'Add Job', new_host_job_path(host_id: @host.id),
+ class: "btn btn-default", role: "button",
+ icon_class: 'glyphicon glyphicon-plus', text_class: 'text-success') %>
</div>
Event Timeline
Log In to Comment