Commit 6bb4b041 authored by Samir Noir's avatar Samir Noir 🧀
Browse files

Merge branch 'ui-deletion' into 'master'

Remove g5k-api's UI

See merge request !75
parents 58a9df48 a879eb7c
Pipeline #167214 waiting for manual action with stages
in 21 minutes and 57 seconds
......@@ -7,9 +7,6 @@ stages:
- deb
- deploy
variables:
SONARQUBE_EXCLUSIONS: public/ui/javascripts/vendor/**
include:
- project: 'grid5000/grid5000-gitlab-templates'
ref: master
......
......@@ -42,8 +42,7 @@ You can check the installation by running a few commands to gather information a
By default, the vagrant box will provision a proxy, to get access to the live status
of sites and to the home directory of users, except on one site where status will be
served locally through a tunnel to that site's oardb. This is specially useful to
debug the web ui, but the tunnel to the db is also used for site status information.
served locally through a tunnel to that site's oardb.
For users with a working installation of vagrant and virtualbox, setting up a
working environement starts with a simple
......@@ -133,14 +132,6 @@ You can check the installation by running a few commands to gather information a
$ HTTP_X_API_USER_CN=dmargery WHOAMI=rennes bundle exec ./bin/g5k-api server start -e development
* If you want to develop on the UI, using the apache proxy, run your browser on
$ firefox http://127.0.0.1:8080/ui
* If you want to develop on the UI, interacting directly with the server, run your browser on
$ firefox http://127.0.0.1:8000/ui
That's it. If you're not too familiar with `rails`, have a look at
<http://guides.rubyonrails.org/>.
......
# Copyright (c) 2009-2011 Cyril Rohr, INRIA Rennes - Bretagne Atlantique
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class UiController < ApplicationController
before_action :set_default_format
rescue_from ActionView::MissingTemplate do
@title = 'Page not found'
render template: 'ui/404.html.haml', status: 404
end
def set_default_format
request.format = :html
end
def show
params[:page] ||= 'dashboard'
@id = params[:page].downcase.gsub(/[^a-z]/, '_').squeeze('_')
@title = params[:page]
respond_to do |format|
format.html do
render params[:page].to_sym
end
end
end
def visualization
@id = params[:page].downcase.gsub(/[^a-z]/, '_').squeeze('_')
@title = params[:page]
respond_to do |format|
format.html do
render "ui/visualizations/#{params[:page]}.html.haml"
end
end
end
end
# Copyright (c) 2009-2011 Cyril Rohr, INRIA Rennes - Bretagne Atlantique
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
module UiHelper
def relative_path_to(path)
if controller.params[:action] == 'visualization'
File.join('..', path)
else
File.join('.', path)
end
end
end
!!! 5
%html.no-js{:lang => "en"}
%head
%meta{:charset => "utf-8"}/
/ www.phpied.com/conditional-comments-block-downloads/
/[if IE]
/
Always force latest IE rendering engine (even in intranet) &amp; Chrome Frame
Remove this if you use the .htaccess
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
%title= "#{@title} ~ Grid5000"
/
Mobile Viewport Fix
j.mp/mobileviewport &amp; davidbcalhoun.com/2010/viewport-metatag
device-width : Occupy full width of the screen in its current orientation
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
%meta{:content => "width=device-width; initial-scale=1.0; maximum-scale=1.0;", :name => "viewport"}
/ Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references
%link{:href => "/favicon.ico", :rel => "shortcut icon"}
%link{:href => "/apple-touch-icon.png", :rel => "apple-touch-icon"}
/ CSS : implied media="all"
%link{:href => relative_path_to("/stylesheets/vendor/jquery-facebox.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
%link{:href => relative_path_to("/stylesheets/screen.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
%link{:href => relative_path_to("/stylesheets/print.css"), :rel => "stylesheet", :type => "text/css", :media => "print"}
/[if IE]
%link{:href => relative_path_to("/stylesheets/ie.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
/[endif]
= yield(:before_js)
/ https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
%script{:src => relative_path_to("/javascripts/vendor/jquery.min.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery-ui.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery-jgrowl.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/underscore.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/json2.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/base64.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery-scrollTo.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery-facebox.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery-tipsy.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/lib/http.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/lib/widget.js"),
:type => "text/javascript"}
%link{:href => relative_path_to("/stylesheets/vendor/jquery-jgrowl.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
%link{:href => relative_path_to("/stylesheets/vendor/jquery-tipsy.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
%link{:href => relative_path_to("/stylesheets/vendor/sunny/jquery-ui.css"), :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
= yield(:head)
%script{:src => relative_path_to("/javascripts/app/#{@title.downcase.gsub(/\s/,'-')}.js"),
:type => "text/javascript"}
/ paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/
/[if lt IE 7 ] <body class="ie6">
/[if IE 7 ] <body class="ie7">
/[if IE 8 ] <body class="ie8">
/[if IE 9 ] <body class="ie9">
<!--[if (gt IE 9)|!(IE)]><!-->
%body.bp.two-col{:class => @title.downcase.gsub(/\s/,'-')}
<!--<![endif]-->
#container.container
%header#header
%ul
%li= link_to "Dashboard", relative_path_to("/dashboard"), :title => "dashboard"
%li= link_to "Quick Start", relative_path_to("/quick-start.html"), :title => "quick-start"
%li= link_to "Jobs", relative_path_to("/jobs.html?state=running,waiting,hold,launching"), :title => "jobs"
%li= link_to "Metrics",relative_path_to("/metrics.html"), :title => "metrics"
%li= link_to "Visualizations", relative_path_to("/visualizations.html"), :title => "visualizations"
%li= link_to "Events", relative_path_to("/events.html"), :title => "events"
%li= link_to "Help", "https://api.grid5000.fr", :title => "index"
#main
= yield
%footer#footer
%hr
%p.license Built using the <a href="https://api.grid5000.fr">Grid5000 APIs</a>
%ul.navigation
%li <a href="http://twitter.com/grid5000">Twitter</a>
%li <a href="https://intranet.grid5000.fr/bugzilla/enter_bug.cgi">Report a bug</a>
%li <a href="mailto:support-staff@lists.grid5000.fr">Contact</a>
/ ! end of #container
- content_for :before_js do
%script{:src => relative_path_to("/javascripts/vendor/exhibitv2/exhibit/api/exhibit-api.js")+"?autoCreate=false",
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/lib/exhibit.js"),
:type => "text/javascript"}
%h2
Page not found
%h1{:title => "dashboard"} Dashboard
#content
%ul#widgets
#sidebar
#news
\ No newline at end of file
- content_for :head do
%script{:src => "javascripts/vendor/jquery-query.js"}
%script{:src => "javascripts/lib/helpers/helper.js"}
%script{:src => "javascripts/vendor/mustache.js"}
%script{:src => "javascripts/vendor/jquery-tablesorter.js"}
%script{:src => "javascripts/vendor/jquery-tablesorter-metadata.js"}
%link{:href => "stylesheets/vendor/jquery-tablesorter.css", :rel => "stylesheet", :type => "text/css", :media => "screen, projection"}
/ = javascript_include_tag "lib/date.js"
%h1{:title => "jobs"} Jobs
#content
%p This page will display the list of all jobs currently waiting or running on Grid5000. The list of jobs will be automatically refreshed every 10 minutes.
#jobs
%form#experiment{:action => "", :method => "get", :onsubmit => "return false;"}
%ul.actions
%li
%a.badge{:href => "#info", :title => "Details", :rel => "details"}
%span Details
%li
%a.badge{:href => "#metrics", :title => "Metrics", :rel => "metrics"}
%span Metrics
%li
%a.badge{:href => "#kill", :title => "Kill", :rel => "kill"}
%span Kill
%table.tablesorter
%thead
%tr
%th{:width => "40px", :class => "{sorter: false} center"}
%a{:href => "#deselect", :title => "deselect all", :rel => "deselect"} X
%th{:width => "50px"} Id
%th Site
%th User
%th State
%th Queue
/ %th Types
/ %th Nodes
/ %th From
/ %th To
/ %th Walltime
%tbody
#sidebar
%ul.actions
%li.action
= link_to "stop automatic refresh", "#toggle-refresh", :id => "action-toggle-refresh"
%li.action
= link_to "force refresh now", "#refresh", :id => "action-refresh"
#facets
%h2 Filter by sites
%ul.sites{:rel => "site"}
%h2 Filter by states
%ul.states{:rel => "state"}
%h2 Filter by users
%ul.users{:rel => "user"}
- content_for :head do
%script{:src => "javascripts/vendor/jquery-query.js"}
%script{:src => "javascripts/lib/helpers/helper.js"}
%script{:src => "javascripts/vendor/protovis.js"}
%script{:src => "javascripts/vendor/protovis-tipsy.js"}
%script{:src => "javascripts/lib/protovis/box-and-whisker.js"}
%h1{:title => @title}= @title
#flash
&nbsp;
#content
%p Use this page to graph the metrics of the jobs you want to analyze. Graphs are generated as <a href="http://en.wikipedia.org/wiki/Box_plot">Box plots</a>, with the addition of a line connecting all the medians.
%p <b>Please NOTE that jobs of type "deploy" do NOT send metrics by default.</b> You need to explicitly enable them by starting <code>ganglia-monitor</code> on all the nodes of your job, with <code>service ganglia-monitor start</code>.
%p Also, data is stored in <a href="http://en.wikipedia.org/wiki/RRDtool">Round Robin Databases</a> and will lose in accuracy over time. Thus, if you want to see your graphs at the best resolution available (min: 15s), do not wait too long after your job is finished.
%p Interested users are strongly encouraged to have a look at the <a href="https://www.grid5000.fr/mediawiki/index.php/Measurements_tutorial">Measurements tutorial</a> to understand how they can <b>programmatically</b> get access to the data and generate graphs using the tool of their choice (<code>rrdtool</code>, <code>gnuplot</code>, etc.).
%p Finally, this page probably does <b>NOT</b> work on Internet Explorer, unless you install some kind of plugin to see SVG graphs.
#charts
#sidebar
%form#control{:action => "", :method => "GET", :onsubmit => "return false;"}
%fieldset
%legend Jobs
.field.inline
%label{:for => "jobs"} Enter a comma separated list of jobs under the form: <code>site:job[@resolution]</code> (e.g. <code>lyon:383380@360</code>)
%input.text{:type => "text", :name => "jobs", :size => 45}
%div
(you may use the
%a{:href => "../jobs.html"} Jobs
page to easily select your jobs)
%fieldset
%legend Select your metrics
%div.selectors
%a{:rel => "select-all-metrics", :href => "#"} ALL
%a{:rel => "deselect-all-metrics", :href => "#"} NONE
%a{:rel => "add-custom-metric", :href => "#"} Add custom metric
%ul.fields#metrics-list
%ul.fields#metrics-list2
.buttons
%input.button{:type => "submit", :value => "Submit"}
- content_for :before_js do
%script{:src => relative_path_to("/javascripts/vendor/exhibitv2/exhibit/api/exhibit-api.js")+"?autoCreate=false",
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/lib/exhibit.js"),
:type => "text/javascript"}
%h1{:title => @title}= @title
%ul
%li
Please remember that you must create a ~/public directory in your home directory of each site you want to use. SSH keys or script present there can be used for the jobs you start
#console.clear.small
%h2 Console
.log
%table
%tbody
#actions
#resources
%h2 Resources
.display
%form.bp{:method => "POST", :action => ""}
%div{"ex:role" => "viewPanel"}
%div{"ex:role" => "lens", :class => "node"}
%div{"ex:content" => ".label"}
%div{"ex:role" => "view", "ex:grouped" => "true", "ex:orders" => ".site_uid, .cluster_uid", "ex:possibleOrders" => ".site_uid, .cluster_uid", "ex:showAll" => "true", "ex:showSummary" => "true"}
%div.buttons{:style => "display: none"}
%input{:type => "submit", :value => "Launch"}
.facets
%h3 Facets
%div{"ex:role" => "facet", "ex:facetClass" => "TextSearch", "ex:facetLabel" => "Search"}
%div#queues{"ex:role" => "facet", "ex:expression" => ".queues", "ex:sortMode" => "count", "ex:showMissing" => "true", "ex:scroll" => "false", "ex:facetLabel" => "Queue"}
%div#site{"ex:role" => "facet", "ex:expression" => ".site_uid", "ex:scroll" => "true", "ex:facetLabel" => "Site"}
%div#cluster{"ex:role" => "facet", "ex:expression" => ".cluster_uid", "ex:scroll" => "true", "ex:facetLabel" => "Cluster"}
#facets1.float
%div#hard_state{"ex:role" => "facet", "ex:expression" => ".hard_state", "ex:sortMode" => "count", "ex:showMissing" => "false", "ex:scroll" => "false", "ex:facetLabel" => "Hardware State"}
%div#soft_state{"ex:role" => "facet", "ex:expression" => ".syst_state", "ex:sortMode" => "count", "ex:showMissing" => "false", "ex:scroll" => "false", "ex:facetLabel" => "System State"}
%div#available_for{"ex:role" => "facet", "ex:facetClass" => "Slider", "ex:expression" => ".available_for", "ex:interval" => "1", "ex:scroll" => "true", "ex:facetLabel" => "Available for (Hours)", "ex:histogram" => "false", "ex:horizontal" => "true", "ex:width" => "100"}
%div#architecture_nb_procs{"ex:role" => "facet", "ex:expression" => ".architecture_nb_procs", "ex:sortMode" => "value", "ex:scroll" => "true", "ex:showMissing" => "false", "ex:facetLabel" => "# CPUs"}
%div#architecture_nb_cores{"ex:role" => "facet", "ex:expression" => ".architecture_nb_cores", "ex:sortMode" => "value", "ex:scroll" => "true", "ex:showMissing" => "false", "ex:facetLabel" => "# Cores"}
%div#architecture_ht_enabled{"ex:role" => "facet", "ex:expression" => ".operating_system_ht_enabled", "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "HT activated"}
%div#main_memory_ram_size{"ex:role" => "facet", "ex:expression" => ".main_memory_ram_size", "ex:sortMode" => "value", "ex:scroll" => "true", "ex:facetLabel" => "RAM (MiB)"}
%div#processor_clock_speed{"ex:role" => "facet", "ex:expression" => ".processor_clock_speed", "ex:sortMode" => "value", "ex:scroll" => "true", "ex:facetLabel" => "CPU Clock Speed (GHz)"}
%div#processor_model{"ex:role" => "facet", "ex:expression" => ".processor_model", "ex:sortMode" => "count", "ex:scroll" => "false", "ex:facetLabel" => "Processor model"}
%div#processor_cache_l1d{"ex:role" => "facet", "ex:expression" => ".processor_cache_l1d", "ex:sortMode" => "value", "ex:scroll" => "false", "ex:facetLabel" => "Processor cache l1d (KiB)"}
%div#processor_cache_l1i{"ex:role" => "facet", "ex:expression" => ".processor_cache_l1i", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:facetLabel" => "Processor cache l1i (KiB)"}
%div#processor_cache_l2{"ex:role" => "facet", "ex:expression" => ".processor_cache_l2", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:facetLabel" => "Processor cache l2 (KiB)"}
#facets2.float
%div#supported_job_types_virtual{"ex:role" => "facet", "ex:expression" => ".supported_job_types_virtual", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "Virtualization support"}
%div{"ex:role" => "facet", "ex:expression" => ".supported_job_types_besteffort", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "Besteffort support"}
%div#supported_job_types_deploy{"ex:role" => "facet", "ex:expression" => ".supported_job_types_deploy", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "Deploy support"}
%div#nb_ethernet{"ex:role" => "facet", "ex:expression" => ".nb_ethernet", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# Ethernet interfaces"}
%div#nb_1G_ethernet{"ex:role" => "facet", "ex:expression" => ".nb_1G_ethernet", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false","ex:facetLabel" => "# 1G Ethernet interfaces"}
%div#nb_10G_ethernet{"ex:role" => "facet", "ex:expression" => ".nb_10G_ethernet", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false","ex:facetLabel" => "# 10G Ethernet interfaces"}
%div#nb_Infiniband{"ex:role" => "facet", "ex:expression" => ".nb_infiniband", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# Infiniband interfaces"}
%div#nb_Infiniband_DDR{"ex:role" => "facet", "ex:expression" => ".nb_infiniband_DDR", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "DDR Infiniband interfaces"}
%div#nb_Infiniband_QDR{"ex:role" => "facet", "ex:expression" => ".nb_infiniband_QDR", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "QDR Infiniband interfaces"}
%div#nb_Infiniband_FDR{"ex:role" => "facet", "ex:expression" => ".nb_infiniband_FDR", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "FDR Infiniband interfaces"}
%div#nb_Myrinet{"ex:role" => "facet", "ex:expression" => ".nb_myrinet", "ex:height" => 80, "ex:sortMode" => "count", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "Myrinet interfaces"}
%div#storage_devices{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:facetLabel" => "# local storage devices"}
%div#storage_devices_SATA{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_SATA", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# SATA devices"}
%div#storage_devices_SATAII{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_SATA_II", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# SATA II devices"}
%div#storage_devices_SAS{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_SAS", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# SAS devices"}
%div#storage_devices_SCSI{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_SCSI", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# SCSI devices"}
%div#storage_devices_HDD{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_HDD", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# HDD"}
%div#storage_devices_SSD{"ex:role" => "facet", "ex:expression" => ".nb_storage_devices_SSD", "ex:height" => 80, "ex:sortMode" => "value", "ex:scroll" => "false", "ex:showMissing" => "false", "ex:facetLabel" => "# SSD"}
%div#max_storage_capacity{"ex:role" => "facet", "ex:facetClass" => "Slider", "ex:expression" => ".max_storage_capacity_device", "ex:interval" => "20", "ex:scroll" => "true", "ex:facetLabel" => "Capacity (of largest storage) in GB", "ex:histogram" => "true", "ex:horizontal" => "true", "ex:width" => "100"}
%div#aggregate_storage_capacity{"ex:role" => "facet", "ex:facetClass" => "Slider", "ex:expression" => ".storage_capacity_node", "ex:interval" => "20", "ex:scroll" => "true", "ex:facetLabel" => "Capacity (by node) in GB", "ex:histogram" => "true", "ex:horizontal" => "true", "ex:width" => "100"}
%h1{:title => "visualizations"} Visualizations
#content
%ul
%li
%p
%a{:href => relative_path_to("/visualizations/map.html")}
Map
%a{:href => relative_path_to("/visualizations/map.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/map.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/gantt.html?width=800&height=600")}
Gantt
%a{:href => relative_path_to("/visualizations/gantt.html?width=800&height=600")}
%img{:src => relative_path_to("/images/screenshots/visualizations/gantt.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/status.html")}
Status
%a{:href => relative_path_to("/visualizations/status.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/status.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/historical.html")}
Historical
%a{:href => relative_path_to("/visualizations/historical.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/historical.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/nodes.html")}
Nodes
%a{:href => relative_path_to("/visualizations/nodes.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/nodes.png")}
<html><body></body></html>
\ No newline at end of file
- content_for :head do
%script{:src => relative_path_to("/javascripts/lib/gantt.js")}
%h1{:title => "gantt"} Gantt
#content
%p
This page displays a Gantt chart of all jobs currently <b>waiting</b> or <b>running</b> on Grid5000 (<b>no past</b> jobs).
%br
DoubleClick to <b>zoom in</b>, SHIFT-DoubleClick to <b>zoom out</b>. <b>Drag</b> the chart left/right/up/down to access hidden content. Holding the SHIFT key while dragging will <b>move faster</b>.
%br
You may <b>resize</b> the chart by dragging the bottom-right corner.
%form{:method => "get", :action => "", :id => "customize-form"}
%input{:type => "text", :id => "link-to-self", :size => 100, :style => "float: left"}
%input{:type => "submit", :value => "OK", :style => "float: left"}
.canvas
%canvas#gantt{:width => 800, :height => 600}
#sidebar
%ul#actions
%li
%a{:href => "?width=800&height=600&relativeSpeed=1&resolution=3600000&startDate=now&resourcesOffset=0&barWidth=20", :title => "Reset"} Reset
%li
%a{:href => "?width=800&height=1000", :title => "Increase the size of the graph"} Make Bigger
#facets
%h2 Jump to
%ul#siteFacet
- content_for :before_js do
%script{:src => "/exhibitv2/exhibit/api/exhibit-api.js?autoCreate=false"}
%script{:src => relative_path_to("/javascripts/lib/exhibit.js")}
%script{:src => "/exhibitv2/exhibit/api/extensions/time/time-extension.js"}
%h1{:title => "historical"} Historical
#content
%p On this page you should be able to see a timeline of all the changes brought to the platform. Drag the timeline left to see older changes. You may also choose to filter the changes based on their target site, or by author.
%div{"ex:role" => "viewPanel", :class => "panel"}
%div{"ex:role" => "view", "ex:viewClass" => "Timeline", "ex:start" => ".date_iso", "ex:topBandUnit" => "week", "ex:topBandPixelsPerUnit" => 500, "ex:bottomBandUnit" => "month"}
%div{"ex:role" => "lens", :class => "version-timeline-lens", :style => "display: none; text-align: left"}
%div{:class => "title"}
%span{"ex:content" => ".label"}
%div
%span{"ex:content" => ".author", :class => "author"}
%br
%span{"ex:content" => ".date", :class => "date"}
%div{"ex:role" => "view", "ex:viewClass" => "Tile", "ex:label" => "Details", "ex:orders" => ".site", "ex:possibleOrders" => ".author, .site, .date_iso"}
#sidebar
%h2 Facets
%div{"ex:role" => "facet", "ex:facetClass" => "TextSearch", "ex:facetLabel" => "Search", "ex:expressions" => ".message"}
%div#tag{"ex:role" => "facet", "ex:sortMode" => "count", "ex:showMissing" => "false", "ex:expression" => ".tags", "ex:facetLabel" => "Tags"}
%div#author{"ex:role" => "facet", "ex:expression" => ".author", "ex:sortMode" => "count", "ex:showMissing" => "false", "ex:facetLabel" => "Author"}
%h1{:title => "visualizations"} Visualizations
#content
%ul
%li
%p
%a{:href => relative_path_to("/visualizations/map.html")}
Map
%a{:href => relative_path_to("/visualizations/map.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/map.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/gantt.html?width=800&height=600")}
Gantt
%a{:href => relative_path_to("/visualizations/gantt.html?width=800&height=600")}
%img{:src => relative_path_to("/images/screenshots/visualizations/gantt.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/status.html")}
Status
%a{:href => relative_path_to("/visualizations/status.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/status.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/historical.html")}
Historical
%a{:href => relative_path_to("/visualizations/historical.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/historical.png")}
%li
%p
%a{:href => relative_path_to("/visualizations/nodes.html")}
Nodes
%a{:href => relative_path_to("/visualizations/nodes.html")}
%img{:src => relative_path_to("/images/screenshots/visualizations/nodes.png")}
- content_for :before_js do
%script{:src => "/exhibitv2/exhibit/api/exhibit-api.js?autoCreate=false"}
%script{:src => relative_path_to("/javascripts/lib/exhibit.js")}
%script{:src => "/exhibitv2/exhibit/api/extensions/map/map-extension.js?gmapkey=ABQIAAAAswD5nCsXqPrfB-uqmRIkshSdgCV34beAmIbkhlY5Su_PpSdtqhRs8AwfLLKJ6ARAwSOjf724JqlTOg"}
%h1{:title => "map"} Map
#content
#nodes-count-coder{"ex:role" => "coder", "ex:coderClass"=>"SizeGradient", "ex:gradientPoints"=>"0, 40; 500, 100"}
#cores-count-coder{"ex:role" => "coder", "ex:coderClass"=>"SizeGradient", "ex:gradientPoints"=>"0, 40; 3000, 100"}
.views{"ex:role" => "viewPanel"}
#view1{"ex:role" => "view", "ex:viewClass"=>"Map", "ex:zoom" => 6, "ex:center" => "47,2", "ex:mapHeight" => 600, "ex:type" => "hybrid", "ex:sizeKey" => ".nodes_count", "ex:sizeCoder"=>"nodes-count-coder", "ex:sizeLegendLabel"=>"Number of nodes", "ex:label"=>"Sites by number of nodes", "ex:latlng"=>".latlng"}
#view2{"ex:role" => "view", "ex:viewClass"=>"Map", "ex:zoom" => 6, "ex:center" => "47,2", "ex:mapHeight" => 600, "ex:type" => "hybrid", "ex:sizeKey" => ".cores_count", "ex:sizeCoder"=>"cores-count-coder", "ex:sizeLegendLabel"=>"Number of cores", "ex:label"=>"Sites by number of cores", "ex:latlng"=>".latlng"}
.map-lens{"ex:role"=>"lens", "style"=>"display: none;"}
%div
%b{"ex:content" => ".label"}
%div
%span{"ex:content" => ".nodes_count"}
nodes
%div
%span{"ex:content" => ".cores_count"}
cores
%div
Location
%span{"ex:content" => ".location"}
#sidebar
#widget-grid-status{:class => 'widget'}
- content_for :before_js do
%script{:src => "/exhibitv2/exhibit/api/exhibit-api.js?autoCreate=false",
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/lib/exhibit.js"),
:type => "text/javascript"}
%script{:src => relative_path_to("/javascripts/vendor/jquery.min.js"),
:type => "text/javascript"}
%body.nodes
#page
#content
#description