The Linux Foundation Projects
Skip to main content
BlogMentorshipZoweZowe Development Updates

Summer 2024: ZEBRA JavaScript Application

Written by Zig Licis, Master’s Degree Student at Queen’s University

My name is Zig Licis and I’m currently completing my Master of Engineering  graduate degree at Queen’s University in Canada. I have keen interests in software  development, data science, and machine learning and am passionate about leveraging my  skills to tackle any problem I find interesting or valuable to solve, while being in a position  to innovate and contribute towards developing solutions to modern problems. This  summer, I’ve had the privilege to work with mentors at Zebra under the Open Mainframe  Project as a mentee on the Zebra JavaScript Application project. This blog highlights my  journey throughout the mentorship experience and the work that I’ve done with an  emphasis on changes and improvements to the existing application. 

The Zebra JavaScript Application Project 

Zowe is an open source framework for z/OS, an operating system for IBM zSystems mainframes. Zebra is a performance monitor which utilizes Prometheus and Grafana to  display these mainframe metrics in more readable and understandable forms, helping  mainframe users understand how the mainframe is performing. The functionality to create  custom Prometheus metrics which can then be visualized in Grafana currently exists.  However, the user interface and process is not intuitive and was in my opinion unfinished.  Without extensive knowledge on the thousands of metrics and the further tens of  thousands of combinations of custom metrics, I had an incredibly difficult time learning,  understanding, and navigating the custom Prometheus metrics section of the Zebra  application. My goal for the mentorship was to overhaul this section of the application and  in return, vastly improve the user experience of managing custom metrics.  

Watch my final presentation video:


The Current Custom Prometheus Metric Application 

Zebra currently comes built with an API and framework allowing for the creation of real time custom Prometheus RMF III metrics. However, the Add Custom Metrics form is quite  unintuitive and without extensive knowledge of the metrics being worked with, users are  left confused having to select Identifier Keys and Metric IDs from hundreds of values such as ‘CPCPCAPI’ and ‘DVRPSVCL’. Additionally, the restriction of adding and deleting one  metric at a time presents a massive time commitment to creating real-time custom  metrics. Finally, after already spending too much time making modifications to their  custom metrics file, users must reload the application for these changes to be reflected in  the prom-client and Prometheus server to visualize these metrics in Grafana. The current  implementation’s intuition, user experience, and time constraints presented me with an  opportunity to contribute improvements that will benefit users far into the future.


Notable Work/Changes 

The first major change I worked on was dealing with the unreadability of hundreds of  unique metric fields and identifier keys. By adding to the current constants.js file, I was  able to provide each of these unique IDs their respective descriptions allowing those to be  used in metric parameter selection instead. Following this, I overhauled the user interface  to be more friendly and intuitive in the way metric descriptions are displayed. 

A metrics list with all available metrics based on the LPAR and Report selected now splits  the window with the parameters form. This list is dynamic with the ability to filter by metric  type. With multiple metric types, I found it important for a user to filter by the type they  specifically want to see. For example, a user can select an LPAR and Report, and then filter  to only see numeric metrics. Additionally, the list is in the form of a checklist, allowing  users to select multiple metrics and add them at once. When discussing with my mentors,  this was an important feature as there are groups of metrics that may want to be viewed  together and being able to add these jointly saves valuable time. 

Changes to the pre-existing parameter form provided further UX and concision  improvements. The unique metric ID input was removed as the metric IDs can be used as  the unique identifier of the metric name. Once again modifying the constants.js file to  provide each report with a resource type, the resource dropdown select was removed,  further streamlining the creation process. When dealing with Identifier Key and Value  parameters, it was apparent that the same descriptions should be present in the Identifier  Key dropdown for user readability. Additionally, the Identifier Value dropdown and its  functionality was reworked to allow for multiple values to be selected. Users can now  select any number of values, not just one or all, and add multiple metrics at once in  conjunction with the multiselect capabilities of the metric checklist. This gives way for a  deeper level of customization and time efficiency within the creation process.  


The current added metrics table functioned well for its purpose of displaying added  metrics, showing their important parameters, and providing a method of deletion. However,  if multiple metrics can be added at a time, users should be able to delete them in groups.  The new and improved table removes these delete buttons for each added metric and  replaces them with a checklist and a singular delete button below. Now, when that button  is clicked, all selected metrics will be deleted. 

All these UI/UX changes would be for nothing if users still had to reload the application and  wait valuable time for those changes to be updated and available in the Prometheus server for Grafana visualization. Changes were made to the Prometheus metric scraping  

functionality to scrape and update newly added metrics each time a change is made to  metrics.json, as well as every RMF3 interval as before. Now as soon as metrics are added  or deleted, users will see them instantly updated in the Prometheus server and can quickly  visualize them in Grafana. 

Future Work 

While I feel my work this summer will provide mainframe users with massive improvements  in their work with creating and managing custom metrics, I want to address a potential  future addition that would bring Zebra another step above its current capability. As I  discussed with my mentors throughout this summer, the function of being able to create  and manage multiple metrics.json files would drive even more customization potential and  flexibility. This would allow for mainframe users to manage multiple files within the  Prometheus server and allow for hot swapping of metric groups without needing to recreate  one file each time even further increasing efficiency.  

My Experience 

Reflecting back on my experience this summer within the mentorship program, I felt as  though our group laid the benchmark of a high performing team. Our weekly meetings gave  way for collaboration between me and my mentors as well as combining our meetings with  Joe Carsile, Krishi Jain and their project. Seeing how people from so many different  backgrounds came together, collaborated, and made great improvements to our projects  was inspiring and something I’d hope all my team environments going forward in my career  consists of. I want to thank my mentors again and the Open Mainframe Project for giving me this opportunity to  contribute towards an interesting project and field while improving mainframe users’  experiences with Zebra. 

Stay tuned here and the Open Mainframe Project social channels for more mentee blogs and videos.