Last active
September 16, 2015 20:31
-
-
Save mapledyne/69feb81f2b1c01375cac to your computer and use it in GitHub Desktop.
Dynamically creating dashing.io dashboards
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<% | |
require 'rubygems' | |
require 'json' | |
class Widget | |
def initialize(id,title,view,order) | |
@widget_id = id | |
@widget_view = view | |
@widget_title = title | |
@widget_order = order | |
end | |
def view | |
@widget_view | |
end | |
def title | |
@widget_title | |
end | |
def order | |
@widget_order.to_i | |
end | |
def id | |
@widget_id | |
end | |
def print | |
return "{" + @widget_id.to_s + "," + @widget_title.to_s + "," + @widget_view.to_s + "," + @widget_order.to_s + "}" | |
end | |
end | |
env = File.basename(__FILE__, File.extname(__FILE__)) | |
skynet = `/opt/skynet/skynet.py -a vms #{env.to_s}` | |
parsed = JSON.parse(skynet) | |
row = 0 | |
vms = Hash.new | |
parsed['vms'].each do |key| | |
vms[key["id"]] = key["runstate"] | |
end | |
%> | |
<script type='text/javascript'> | |
$(function() { | |
// These settings override the defaults set in application.coffee. You can do this on a per dashboard basis. | |
Dashing.widget_base_dimensions = [200, 250] | |
Dashing.widget_margins = [5, 5] | |
Dashing.numColumns = 6 | |
}); | |
</script> | |
<% content_for :title do %>Sktap Environmet: <%= env %><% end %> | |
<div class="gridster"> | |
<ul> | |
<% | |
vms.each do |vm, runstate| | |
row = row + 1 | |
if runstate != "running" | |
%> | |
<li data-row="<%=row%>" data-col="1" data-sizex="1" data-sizey="1"> | |
<div data-id="<%=vm%>-title" data-view="Textsm" data-title="Skytap VM" data-text="<%=vm%>"></div> | |
</li> | |
<li data-row="<%=row%>" data-col="2" data-sizex="2" data-sizey="1"> | |
<div data-id="<%=vm%>_suspended" data-view="Textsm" data-title="State" data-text="<%=runstate%>"></div> | |
</li> | |
<% else | |
widgets = Sinatra::Application.settings.history | |
widget_list = [] | |
widgets.each do |key, value| | |
if key.to_s.index(vm.to_s) != nil | |
view="Numbersm" | |
title="" | |
order_index = 1 | |
order = value.gsub("data: ","").split(",") | |
order.each do |o| | |
set = o.split(":") | |
if (set[0].to_s.index("order") != nil) | |
order_index = set[1].gsub("\"","") | |
end | |
if (set[0].to_s.index("view") != nil) | |
view = set[1].gsub("\"","") | |
end | |
if (set[0].to_s.index("title") != nil) | |
title = set[1].gsub("\"","") | |
end | |
end | |
item = Widget.new(key,title,view,order_index) | |
widget_list.push(item) | |
end #if key.index(vm) != nil | |
end #widgets.each do |key, value| | |
widget_list.sort! { |a,b| a.order <=> b.order } | |
col = 0 | |
widget_list.each do |w| | |
col = col + 1 | |
%> | |
<li data-row="<%=row%>" data-col="<%=col%>" data-sizex="1" data-sizey="1"> | |
<div data-id="<%=w.id%>" data-view="<%=w.view%>" ></div> | |
</li> | |
<% | |
end # widget_list.each do |w| | |
end #if runstate != "running" | |
end #vms.each do |vm, runstate| | |
%> | |
</ul> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This script is the one that gets a list of all of our environments and | |
# creates symlinks for the appropriate <environment>.erb file from | |
# the template erb file in the assets/templates/ folder. | |
require 'rubygems' | |
require 'json' | |
def update_environments | |
status = 'normal' | |
service = 'Skytap' | |
template = '/opt/dashboard/assets/templates/environment.erb' | |
env_path = '/opt/dashboard/dashboards/' | |
widget = 'skytap_environments' | |
skynet = `/opt/skynet/skynet.py -a env` | |
parsed = JSON.parse(skynet) | |
total = 0 | |
parsed.each do |value| | |
total += 1 | |
erb = env_path + value.to_s + '.erb' | |
next if File.file?(erb) | |
puts 'Creating template link: ' + erb.to_s | |
File.symlink(template, erb) | |
end | |
Dir[env_path + '*.erb'].each do |f| | |
next unless File.symlink?(f) | |
next if parsed.include? File.basename(f, '.erb') | |
puts 'Deleting template link (Environment not found): ' + f.to_s | |
File.delete(f) | |
end | |
send_event(widget.to_s, value: total.to_i, current: total.to_i, | |
service: service, status: status) | |
end | |
update_environments | |
SCHEDULER.every '60m' do | |
update_environments | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment