
2014 Big Data Ecosystem

Personal collective of ideas, thoughts and notes
Introduction
I was recently working on developing a couple of XSOData services for Metric² when I realized that it would be pretty helpful to have a way to develop, test, explore services and queries. I wrote a similar tool for SAP Netweaver Gateway and the iPad a couple years ago, and decided to model it with some similarities, but having the ability to build it directly into HANA using XS, would add some nice integration benefits.
About the App
Some selectable options:
Generated Query:
Proximity was Part 1 of an exploratory app for Javelin Solutions, a local SAP consulting company. We developed the app to push out into the market and the team at Javellin did the marketing and sales to promote and utilize it as a tool for gaining some exposure and an entry for their consulting services.
Part 2 of the app was a Field Service Engineer which focused more on the engineering aspect.
Mockups of the project along with the brief below were provided to the team for approval, and the subsequent screenshots are from the released app.
Released
Being a technology and innovation evangelist the Gartner hype cycles have exposed and introduced me to variety of new technologies which I was not aware of.
Trigger – announcement
Peak – talks and discussion
Disillusionment – people realize its not available now
Slope – Technology/innovation supports it
This is what we will be developing in this blog ….
Over the past few years Node.js has really caught my attention. The simplicity of Javascript with server side processing, Non-blocking-IO, Event Driven, and simple integration always intrigued me as a great combination for enterprise applications. (Somehow it sounds similar to HANA XS Engine 😉 )
A couple months ago I ran into a similar problem to Jon-Paul Boyd (HANA Forum Post) in which I wanted to use XS Engine for websocket/persistant connections to my HANA Instance, but due to the support not being included in SPS6, I decided to look elsewhere, and ended up using Node.js to fulfill this requirement.
In the past, while developing HANA/Node apps, I resorted to creating a XSJS App which really just acted as a middleware layer to push and pull data from my HANA DB, until recently I noticed a great blog post from Ingo Sauerzapf which piqued my interest. The blog mentioned that Holger Koser had created a HANA DB Client for Nodemaking life extremely easy to connect to HANA directly from Node. I thought it would be good share the small project I developed using Node.js and this new client with the community in the hopes that others will share their experiences with the technology.
This blog is not necessarily an introduction to Node.js development as there are some nice tutorials and examples out there from Tobias Hoffman and Alessandro Spadoni. The blog is intended to cover a small app developed in Node.js and shows the development process behind it, taking it from conception through to reality. I encourage you to download a few of these components, and also the example out. This app, similar to another app I developed called Metric² (which you can read about here), it is a web based widget showing some friendly KPI’s on the performance of your HANA Instance. The app gets streaming data from our HANA backend displaying this in a friendly, simple dashboard. The dashboard is designed to be shown on a large format monitor in a Ops or IT center and can also very easily be modified to show any KPI’s relevant to your business or needs.
Requirements:
SAP HANA Instance (e.g. AWS Developer Image)
Node.js installed (this does not need to be on the HANA box but same network with access to the HANA port – normally 30015).
Node Dependencies
We will also use a couple of helpful dependencies from the node community including Socket.io, Express and obviously hdb. Installing these packages is as simple as running “npm install hdb”. Once you have the dependencies installed we can start creating our app.
App Design
For me, I always start mocking up in my favorite Image IDE (Photoshop), I used this image as inspiration for my app. I liked the simplicity, clean layout with focus on the numbers at the bottom. In our case, we will add a small chart in the center, giving us a basic visual representation of the numbers being displayed:
Photoshop | HTML Mockup |
---|---|
Download the PSD |
App Development
Index.html
In this case I decided to use Twitter Bootstrap to help with some of the layout/formatting of the page as well as some mundane tasks like Modal popups. From a coding perspective I started out developing the Single paged “index.html” file, doing my best to stick with my mockup which I previously created. I was sure to “id” all of my elements on this page as we will be updating these values from our node.js backend. This aspect of node development is strictly “traditional” web based development. No need to work with Node or any server for that matter. Once you have your page rendering the way you want, we can move on.
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, maximum-scale=1.0" />
<title>Metric²</title>
<!-- jQuery -->
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Socket.IO -->
<script src='/socket.io/socket.io.js'></script>
<!-- Peity - a lightweight sparkline package for jQuery -->
<script src='js/jquery.peity.min.js'></script>
<!-- Client side code needed -->
<script src='js/client.js'></script>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
<!-- CSS -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="top" class="background">
<div class="centercontainer">
<div class="container shadow">
<div class="containerheader">
<table class="heading">
<tr>
<td rowspan="2" style="text-align: center; width: 10%;" >
<img id="statusicon" src="img/OKIcon.png"/>
</td>
<td style="vertical-align: top;">
<h1><span id="info-name">SAP HANA Instance</span>
<button class="btn btn-link" data-toggle="modal" data-target="#myModal">
<span class="glyphicon glyphicon-cog settingsicon"></span>
</button>
</h1>
</td>
</tr>
<tr>
<td class="h3" style="padding-top: 20px;">
<span class="glyphicon glyphicon-flag icon" style="margin-left: 0px;" /></span><span id="info-alerts">0</span> Alerts
<span class="glyphicon glyphicon-repeat icon"></span><span id="info-version">1.0</span>
<span class="glyphicon glyphicon-map-marker icon"></span><span id="info-detail">Server Location</span>
</td>
</tr>
</table>
</div>
<div class="containerbody">
<span class="history">0</span>
</div>
<div class="containerfooter">
<table class="info">
<tr>
<td id="infoUSERS" class="td-info" onClick="setChart('USERS');">
<!-- The ID of each of our <SPAN> tags is important for updating the data being returned from the server -->
<span id="info-users" class="h1">0</span><br />
<span class="h3">Users</span>
</td>
<td class="td-info"> </td>
<td id="infoDISK" class="td-info" onClick="setChart('DISK');">
<span id="info-disk" class="h1">0</span> <sup>GB</sup><br />
<span class="h3">Free Disk</span>
</td>
<td id="infoMEM" class="td-info" onClick="setChart('MEM');">
<span id="info-mem" class="h1">0</span> <sup>GB</sup><br />
<span class="h3">Free Memory</span>
</td>
<td id="infoCPU" class="td-info selected" onClick="setChart('CPU');">
<span id="info-cpu" class="h1">0</span> <sup>%</sup><br />
<span class="h3">CPU</span>
</td>
</tr>
</table>
</div> <!-- /.containerfooter -->
</div> <!-- /.container -->
</div> <!-- /.centercontainer -->
</div> <!-- /.top -->
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Settings</h4>
</div>
<div class="modal-body">
<form id="modalbox" role="form">
<div class="form-group">
<label for="servername">Name</label>
<input type="text" class="form-control" id="servername" placeholder="Enter a reference server name">
</div>
<div class="form-group">
<label for="serverdetail">Location</label>
<input type="text" class="form-control" id="serverdetail" placeholder="Description, Location or Other Information">
</div>
<div class="form-group">
<label for="bg">Background</label><br />
<label class="radio-inline">
<input type="radio" name="bg" value="../img/bg1.jpg" checked> Background 1
</label>
<label class="radio-inline">
<input type="radio" name="bg" value="../img/bg2.jpg"> Background 2
</label>
<label class="radio-inline">
<input type="radio" name="bg" value="../img/bg3.jpg"> Background 3
</label>
<label class="radio-inline">
<input type="radio" name="bg" value="none;"> None
</label>
</div>
<div class="form-group">
<label for="colorscheme">Color Scheme</label><br />
<label class="radio-inline">
<input type="radio" name="colorscheme" value="Dark" checked> Dark
</label>
<label class="radio-inline">
<input type="radio" name="colorscheme" value="Light"> Light
</label>
<label class="radio-inline">
<input type="radio" name="colorscheme" value="Fiori"> Fiori
</label>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="modalSave" onClick="saveSettings();">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</body>
</html>
Metric² is a web based, realtime dashboarding platform for SAP HANA, on SAP HANA.I recently gave a demo of the app at Demojam in Las Vegas (You can read my blog post about the event here). Metric² is a free app/download and this blog gives some insight into how it works, and how you can download and install it in your own HANA system:
Overview
Metric² is made up of 3 key areas:
Dashboards: Metric² can have multiple dashboards. Dashboards are designed as blank canvases, are quite flexible, and can contain widgets which are added can be simply dragged and dropped into their needed locations and also sized accordingly.
Widgets: Dashboards can have multiple widgets displayed. There are a variety of widgets including a range of predefined datasources (CPU, Memory, Disk etc.) but also include custom widgets (SQL, JSON, Yahoo) which can display a myriad of information to your team.
It was Tuesday night sometime back in 2009 at my first TechEd where I was sitting in the audience and really wishing I was standing up on stage, presenting something inspiring and innovative which would encourage the votes of the demanding audience of Demojam. Well, it took 4 years to creep over personal hurdles, family time and to gain an ounce of courage which persuaded me to post an entry in 2013, this blog gives some insight into what I did, what I would have done differently, and also why Demojam really needs people like YOU!
A couple of months ago (May through July) I went through the openSAP HANA course and was really impressed, not only by the DB, but more the HANA XS Engine as an Web/App server. Being a “learn by doing” kinda person I struggled to get the most out of the course content since it really didn’t apply to anything I was currently working on, until I realized the opportunity… As I described in my demojam presentation, I drank the HANA coolaid 🙂 Personally, it was not so much of the big data aspect that intrigued me, but rather this concept of the DB and the app server really being a single entity from a platform, as well as infrastructure perspective. Simple. I spent a couple weeks learning a lot more, since I had something to apply it against and started developing an app called Metric²
This was a packed TechEd for me. I was involved in Demojam, gave a talk on being a part of the SAP HANA Startup Focus Program and also did an TechEd Live interview with Jim Jacquet on the state of enterprise mobility.
Preparing for SAP Demo Jam at TechEd in Las Vegas was a huge undertaking, I completely underestimated the time and commitment it takes to prep a simple 5 minute demo on the stage in front of 5,000 people. Attached are my notes and details of some of the script around the project and what I was using as a guide.
The store pills should be bigger and center of the screen for everyone to see?
Tell people what you are clicking on?
– Metric squared Twitter Widget: 385571773112012800
Notes
– In Demo – if System crashes … say that I have little kids, any time this happens, mention that it is HANA having a tantrum.
– In Demo – if does not do something … say HANA is a little like my daughter – she doesn’t always listen 😉
You must be logged in to post a comment.