The Dynatrace DevOps Pipeline State UFO was built out of the necessity to visualize alerts, problems, health, and CI/CD pipeline state within the Dynatrace R&D organization. It sparked a cultural transformation as it made code quality that we pushed more frequently through our Delivery Pipeline more visible. You should read the background story from our Chief Software Architect Helmut Spiegl who invented the first versions of the UFO.
We officially announced the Dynatrace DevOps UFO at PERFORM 2017 as an open source project. If you want to DIY (Do It Yourself) follow the 3D printing, assembling, and code instructions on the Dynatrace UFO GitHub page. If you are not the DIY kind of person go ahead and pre-order one through our Dynatrace UFO website. If you want to see the UFO in action watch my presentation from PERFORM 2017 where I showed several use cases on how to use the UFO to visualize different types of data.
Within Dynatrace R&D the primary use case is to visualize the health state of our deployment pipelines. The top and bottom LED rings contain 15 LEDs. The two rings represent the pipeline state of the current Trunk and current Sprint. All green means that the build made it through all pipeline stages without any issues. Parts of RED mean that some phases failed, e.g: unit or integration tests.
Getting Started with your Dynatrace UFO
Whether you built and printed a UFO yourself (following the instructions on GitHub), whether you purchased one from Dynatrace or whether you got your hands on one of them through other channels: You should start by checking out the Quick Start Guide which explains how to get your UFO connected to your network. Once that is accomplished you can either use the generic REST API to control the LEDs or use the existing integration with Dynatrace SaaS / Managed to display status of current open problems.
If you prefer to watch a video join my Hands-On UFO Tutorial Performance Clinic on March 16th.
Step #1: Connecting your UFO to your WiFi
Here is a quick summary of what you read in the Quick Start Guide:
- Plug it in!
- Press the little black dot on the top. The UFO starts blinking blue and now offers a WiFi hotspot with the name “ufo”
- Connect to that hotspot, browse to http://192.168.4.1
- Through the Web UI connect to your own WiFi. You can also do it via the REST API: http://192.168.4.1/api?ssid=<ssid>&pwd=<pwd>
Remember: WPA2 works well where Enterprise WPA2 is currently not supported
- While it reboots itself it will blink yellow. Once it has its assigned IP Address it will start visualizing its IP Address through a special „blink code“ as explained in the Quick Start Guide!
Remember: the UFO will also try to register its hostname as „ufo“ with your DHCP server. If that works you can simply browse to http://ufo
Step #2: Using the REST API
Once you browse to the UFOs Web Interface via e.g: http://ufo or http://<ipaddress> you will see a couple of sample REST API calls that already give you a sense on what is possible. Here are some of these and some more examples before I explain the individual REST API parameters:
Turn the Dynatrace Logo Off
Turn both rings off
Background Color on Top to GREEN
First LED on Top to RED. Remaining 15 LEDs go dark
First LED on Top to RED. Background Color to GREEN
First FIVE LEDs on Top to RED. Background Color to GREEN. RED Lights starts to „whirl“ (move around)
HALF of LEDS on TOP morph from RED to Background Color GREEN
LEDs 2-3, 6, 10-12 on BOTTOM are BLUE with GREEN Background
Rest API Explained
I hope the examples already gave you a good overview of what is possible with the REST API. The examples contain all the available REST API parameters to control the logo and each LED of the top and bottom ring.
Controlling the Logo
This is the easiest api. You simply pass logo=off or logo=on to turn on/off the Dynatrace logo on the bottom of the UFO
Turning ON certain LEDs on one of the RINGS
We can clear current color settings for both rings using top_init=1 or bottom_init=1. Now we can specify which LEDs we want to light in which color. For that we use the top or bottom parameter which has the following syntax: top=LEDINDEX|NUMBEROFLEDS|COLOR[|LEDINDEX|NUMBEROFLEDS|COLOR][…]
- LEDINDEX is 0-based and goes from 0 to 14
- NUMOFLEDS can be between 1 and 15 and defines how many LEDS starting with LEDINDEX should get the defined color
- COLOR is an RGB representation of the color, e.g: 00FF00 for GREEN
Here are some additional examples
http://<yourUFOip>/api?top_init=1&top=0|1|FFFFFF: 1 LED with Index 0 goes WHITE
http://<yourUFOip>/api?top_init=1&top=5|5|FF0000: 5 LEDs Starting at Index 5 go RED
http://<yourUFOip>/api?top=12|1|0000FF: Additionally 1 LED with Index 12 goes BLUE
http://<yourUFOip>/api?bottom_init=1&bottom=0|14|00FF00: ALL 15 Bottom LEDs go RED
http://<yourUFOip>/api?bottom=0|2|0000FF|10|2|00FF00: LEDs 0 & 1 go BLUE, 10 & 11 go GREEN – REST stays RED
Once you have specified colors for LEDs you can let them WHIRL clockwise. The parameter is either top_whirl and bottom_whirl where the number indicates the speed. The range goes from 0 (no movement) to about 510 (very fast). Once set the whirl continues until you either set the value to 0 or you initialize the ring with _init.
http://<yourUFOip>/api?top_init=1&top=0|1|FF0000&top_whirl=300: 1 RED LED will whirl around
http://<yourUFOip>/api?top_whirl=0: we STOP the whirling
Setting a Background Color for a Ring
If you want to have a solid background color for those LEDs that currently have no specific color set you can do this with top_bg=COLOR or bottom_bg=COLOR:
http://<yourUFOip>/api?bottom_bg=FFFFFF: all LEDs that currently do not have a color will be white
Morphing from LED Color to Background Color
The last API is a morphing feature where you can specify how long to stay on your current LED Color and how fast it morphes to the background color before it goes back to the LED Color. This will then be done in an infinte loop like the whirling!
The syntax is:
- STAYONLEDCOLOR is a number in milliseoncs the original LED color remains before morphing starts
- SPEEDOFMORPH: Range between 0 (very slow) and 10 (very fast)
Here is one example:
http://<yourUFOip>/api?top_init=1&top=0|5|FF0000&top_bg=00FF00&top_morph=1000|5: after 1000ms will morph the 5 RED LEDs into GREEN with moderate speed
Send me your examples
Over the last couple of weeks I had the pleasure to promote the UFO at PERFORM 2017 but also at several events in New Zealand, Australia and Singapore. I was overwhelmed with the positive feedback and great ideas people came up with:
I hope you have as much fun with the UFO as I have. I am looking forward to examples on what type of data to visualize. Whether it is the state of a Pipeline, the current number of open support tickets, SLA violations or simply the outside temperate J – the sky is the limit.