<% require 'base64' require 'json' require 'date' @current_time = Time.now.utc %><%= render_file('common/header.html.erb', title: 'Choregraphies', refresh: 30) %> <main class="container"> <div> <h1>Show all choregraphie information</h1> <div>This page only show choregraphie when at least one holder exists.</div> <% def display_holder(holder, value) begin holder_date = Time.parse(value) status = 'success' diff = (@current_time - holder_date).round(0) status = 'warning' if diff > 3600 status = 'danger' if diff > 7200 diff_txt = "#{diff % 3600} seconds" diff_txt = "#{(diff % 86400) / 3600} hours, #{diff_txt}" if diff > 3600 diff_txt = "#{diff / 86400} days, #{diff_txt}" if diff > 86400 rescue StandardError => e status = 'info' holder_date = "Cannot parse date: #{e}" diff_txt = "Error Parsing date #{value}" end ["<li class=\"list-group-item list-group-item-#{status}\">#{holder}: #{holder_date} : #{diff_txt} ago", status] end %> <div id="accordion"> <% kv('choregraphie', recurse:true).each do |tuple| %> <!-- <%= tuple['Key'] %> --> <% key = tuple['Key'].gsub('/', '-') if tuple['Value'].nil? json = [] holders = [] %> <div class="alert alert-warning" role="alert"> Invalid Choregraphie data: <%= tuple %> </div> <% else json = JSON.parse(Base64.decode64(tuple['Value'])) begin holders = json['holders'] rescue StandardError => e %> <h1>Failed to parse holders <%= e %> in <%= json %></h1> <% holders = [] end end %> <% if holders.count > 0 %> <div class="card"> <div class="card-header" id="heading-<%= key %>"> <span class="badge badge-pill badge-primary float-right"><%= holders.count%>/<%= json['concurrency'] %></span> <h5 class="mb-0"> <a href="#<%= key %>" class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapse-<%= key %>" aria-expanded="true" aria-controls="collapse-<%= key %>"> <%= tuple['Key'] %> </a> </h5> </div> <% text_result = '' clazz = 'collapse' holders.each_pair do |key,value| if value.is_a?(Hash) text_result+= "<li><u>#{key}:</u><ul class=\"list-group\">" value.each_pair do |k, v| res, status = display_holder(k, v) clazz = 'collapse show' unless status == 'success' text_result += res end text_result += '</ul></li>' else res, status = display_holder(key, value) clazz = 'collapse show' unless status == 'success' text_result << res end end %> <div id="collapse-<%= key %>" class="<%= clazz %>" aria-labelledby="heading-<%= key %>" data-parent="#accordion"> <div class="card-body"> <pre class="pre-scrollable"><code><%= JSON.pretty_generate(json) %></code></pre> <ul class="list-group"> <%= text_result %> </ul> </div> </div> </div> <% end %> <% end %> </div> </div> </main> <%= render_file 'common/footer.html.erb' %>