Archiv des Autors: hermann

[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

dashing.io unter centos installieren – gesponsert

Vor einigen Jahren habe ich bereits auf www.t3n.de vom dashing.io gelesen. Ein interessantes Dashboard um Informationen aus verschiedensten Quellen darzustellen. Man benötigt nur einen Server auf dem der Dienst eingerichtet werden kann, entsprechende Quellen und einen Browser für die Ausgabe. Die Installation erfolgt auf dem heimischen Linux Server System oder wenn ein größerer Benutzerkreis darauf zugreifen muss, empfiehlt es sich einen Server anzumieten. Dieser könnte zum Beispiel bei Rock-Server gemietet werden.

Zunächst müssen die folgenden Pakete installiert werden.
yum install -y git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel
yum install ruby

Zusätzlich wird nodejs benötigt:
yum install epel-release
yum install nodejs

Die Installation des Dashing.io erfolgt unter dem zuvor angelegten Benutzer dashing.
su - dashing
gem install bundler
gem install execjs
gem install dashing
dashing new sweet_dashboard_project
cd sweet_dashboard_project
bundle

Damit ein Zugriff auf die Seite möglich ist, muss der Port 3030 in der Firewall freigeschaltet werden.
firewall-cmd --permanent --zone=public --add-port=3030/tcp
firewall-cmd --reload

Gestartet wird dashing in dem man in das Verzeichnis des dashboards wechselt cd /home/dashing/sweet_dashboard_project und auf der Kommandozeile dashing start eingibt. Über die URL http://serverip:3030 kann im Browser das Demo Dashboard geöffnet werden.

Neben den Widgets die in der Demo gezeigt werden, gibt es bereits online unter https://github.com/Shopify/dashing/wiki/Additional-Widgets weitere Widgets die ins Dashboard eingebunden werden können. Zum Beispiel gibt es Widgets fürs Wetter, Icinga, Jira, Jenkins und fitbit.
Wenn das passende Widget nicht dabei ist kann relativ einfach ein eigenes erstellt werden. Zum Beispiel ein Widget oder ein gesamtes Dashboard das Informationen zu einem Spielserver ausgibt, wie Anzahl der Spieler und die aktuell verwendete Karte.

Pro Widget wird eine html, scss und eine coffeescript Datei benötigt. Zum befüllen reicht es die Informationen im json Format per http post an des Widget zu senden. Eine weitere Möglichkeit ist ein in der Scriptsprache coffeescript erstellter Job. Über den Job können unter anderem Werte per http von einer Seite abgerufen werden oder es kann eine Textdatei bzw xls Datei ausgelesen werden.

Hier geht es zu dashing.io.

Demo Widgets

Demo Widgets

[nginx] Verzeichnisse vor unberechtigten Zugriff schützen

Auf Webseiten gibt es Bereiche wo erst nach einer authentifizierung darauf zugegriffen werden darf. Diese Absicherung erfolgt durch Eingabe eines Benutzernamens und Kennworts oder es wird die Ip Adresse geprüft von der aus der Besucher auf die Seite zugreift.
Wenn die aufgerufene Webapplikation diese Funktionalität nicht bietet, kann dies über nginx umgesetzt werden.

Authentifizierung über Benutzername / Kennwort

Zunächst wird htpasswd benötigt, dieses wird über yum install httpd-tools installiert. Nach erfolgreicher Installation wird über htpasswd -c /etc/nginx/htpasswd-seite1 user1 und Eingabe des Kennworts die benötigte Datei und der erste Benutzer angelegt.
Nun werden in der Datei /etc/nginx/conf.d/seite1.conf die folgenden Zeilen hinzugefügt, damit die Unterseite www.seite1.de/benutzer vor unberechtigten Zugriff geschützt wird.
location /benutzer {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd-seite1;
}

Im Anschluss den nginx neustarten: systemctl restart nginx.service

Zugriff über die IP Adresse beschränken

Es gibt Unternehmen in denen Abteilungen eigene IP Adressbereiche erhalten und somit ist es möglich das ausgelieferte Seiten nur aufrufbar sind, wenn der Host eine bestimmte IP Adresse hat.
Der Serverblock seite1.conf wird nun wie folgt angepasst, damit nur Hosts aus einem IP Adressbereich auf die Unterseite www.seite1.de/benutzer zugreifen können.

location /benutzer {
allow 172.23.23.0/24;
deny all;
}

Entweder IP Adresse oder Benutzerauthentifizierung

Nun ist es möglich das wenn die Freigabe der Unterseite nicht Aufgrund der IP Adresse erfolgt, automatisch die Benutzerauthentifizierung greift. Hierfür wird folgende Konfiguration benötigt:

satisfy any;
allow 192.168.1.0/24;
deny all;

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd-seite1;