Schlagwort-Archive: Dashboard

[dashing] Ausgabe auf einem großen Fernseher

Wenn das erstellte Dashboard auf einem größeren Bildschirm ausgegeben wird, kann es je nach Anzahl der Widgets vorkommen, das nicht die gesamte Bildschirmfläche genutzt wird.

Das Problem lässt sich sehr schnell lösen, in dem man in der Dashboard(erb)Datei folgendes hinzufügt.

<script type='text/javascript'>

$(function() {

Dashing.widget_base_dimensions = [370, 340]

Dashing.numColumns = 5

});
<script>

Die Lösung hatte ich hier gefunden: https://github.com/Shopify/dashing/issues/388

[dashing] Widget blinkt bei neuen Daten

Je nachdem wieviele Widgets auf dem Dashboard aufgeführt sind, ist es hilfreich das das Widget hervorgehoben wird auf dem zum Beispiel die Daten aktualisiert werden oder ein bestimmter Status erreicht wird.

In diesem Beispiel blinkt das Widget auf, wenn neue Daten ausgegeben werden.

Hierfür wurde in der scss Datei folgendes hinterlegt:
@keyframes blink {
50% { opacity : 0.0; }
}

Vor dem letzten } der Widget Klasse wurde zusätzlich folgendes eingefügt:
&.blinking {
animation: blink 1s linear infinite;
animation-iteration-count: 2;
}

Der Aufruf der Klasse erfolgt bei neuen Daten in der coffee Datei:
class Dashing.Text extends Dashing.Widget
onData: (data) ->
node = $(@node)
node.addClass("blinking")
setTimeout ( =>
node.removeClass("blinking")
), 5000

Damit das Widget nur blinkt wenn sich auch der Inhalt der Daten ändert, wurde in der coffee Datei eine Zeile hinzugefügt:
class Dashing.Text extends Dashing.Widget
onData: (data) ->
if data.blink
node = $(@node)
node.addClass("blinking")
setTimeout ( =>
node.removeClass("blinking")
), 5000

Das Widget blinkt nur wenn die Variable blink mit übergeben wurde.

Die Prüfung ob neue Werte mit übergeben werden, erfolgt hier in dem eingerichtetem Job.
Von dem aktuellen und dem neuen Datenarray wird zum Vergleich ein hash generiert, stimmt der hash nicht überein, wird die blink Variable mit übermittelt.
if ausgabe_hash == ausgabe.to_set.hash
send_event("widget1",{ values: ausgabe.values })
else
send_event("widget1",{ values: ausgabe.values, blink: ausgabe.length })
end

ausgabe_hash = ausgabe.to_set.hash

[dashing] unter Suse

Bei dem ersten Start vom dashing Dashboard unter Suse kam es zu folgender Fehlermeldung:
bundler: command not found: thin
Install missing gem executables with `bundle install`

Mit Hilfe von gem list konnte festgestellt werden, das das gem thin installiert war.

Die Lösung war letztendlich sehr einfach, vor dem Start des dashings musste folgende Zeile ausgeführt werden.

export PATH=$PATH:/usr/lib64/ruby/gems/2.1.0/gems/thin-1.6.4/bin/thin

[dashing] Daten aus einer csv Datei

Neben der Datenübergabe per http Post können auch Werte aus einer csv Datei gelesen werden. Die Datei kann manuell erstellt werden, oder Sie wird aus einem Ticketsystem generiert und zur Verfügung gestellt. In diesem Beispiel befindet sich die csv Datei in dem Root Verzeichniss des Dashboard.

Aufbau der file.csv(Ticket,Kunde,Störung)

DB-2233,Kunde1,Ausfall Datenbank
AP-1294,Kunde2,schlechte Performance Webservice

Aufbau der jobs/tickets.rb:

require 'csv'
require 'json'

SCHEDULER.every '30s' do

ausgabe = {}
idx = 0
CSV.foreach('file.csv') do |row|
ausgabe[idx] = {:ticket => row[0],:kunde => row[1],:stoerung => row[2]}
idx += 1
end

send_event("majors",{ values: ausgabe.values })

end

[dashing] Widget mit mehrzeiliger Ausgabe erstellen

Eine kurze Anleitung zum installieren das Dashboards findet ihr hier.

Zum experimentieren habe ich alle zuvor angelegten Widgets, Jobs etc. im Demo Dashboard entfernt.

Für das Widget wurden in der dashboard/sample.erb folgende Zeilen hinzugefügt.

<li data-row="1" data-col="1" data-sizex="2" data-sizey="1"><code>
<div data-id="tickets" data-view="Text"
></div>
</li>

Angesprochen wird das Widget über die data-id=“tickets“.

Unter dem Verzeichnis widgets/text wurden die benötigten Dateien mit dem entsprechendem Inhalt angelegt.

text.html

<h1 class=“title“ data-bind=“title“></h1>

<li data-foreach-value=“values“ data-bind-class=“value.status“>

      <div class=“ticket“ data-bind=“value.ticket“></div>

      <div class=“kunde“ data-bind=“value.kunde“></div>

      <div class=“stoerung“ data-bind=“value.stoerung“></div>

        <div style=“clear:both“></div>

    </li>

<p class=“more-info“ data-bind=“moreinfo“></p>

<p class=“updated-at“ data-bind=“updatedAtMessage“></p>

 


text.scss

// ----------------------------------------------------------------------------
// Sass declarations
// ----------------------------------------------------------------------------
$background-color: #ec663c;
$title-color: rgba(255, 255, 255, 0.7);
$moreinfo-color: rgba(255, 255, 255, 0.7);
// ----------------------------------------------------------------------------
// Widget-text styles
// ----------------------------------------------------------------------------
.widget-text {
background-color: $background-color;
.title {
color: $title-color;
}
.more-info {
color: $moreinfo-color;
}
.updated-at {
color: rgba(255, 255, 255, 0.7);
}
.ticket{
width:50px;
float:left;
text-align:left;
}
.kunde{
width:175px;
float:left;
text-align:left;
}
.stoerung{
width:300px;
float:left;
text-align:left;
}
}

text.coffee
class Dashing.Text extends Dashing.Widget
ready: ->
# This is fired when the widget is done being rendered

onData: (data) ->
# Handle incoming data
# You can access the html node of this widget with `@node`
# Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in.

Damit die angelegten Wigdets per http Post mit Daten befüllt werden können, wird der in der config.ru hinterlegte Token benötigt.

require 'dashing'

configure do
set :auth_token, 'hereweare‘

Nun können die Werte zum Beispiel per curl übergeben werden.
curl -d '{ "auth_token": "hereweare", "values":[{"ticket":"223","kunde":"Kassupke","stoerung":"Ausfall Datenbank"},{"ticket":"231","kunde":"Müller","stoerung":"Mailversand eingeschränkt"}] }' http://localhost:3030/widgets/tickets

Dashboard