GitHub repository: iteratec/OpenSpeedMonitor
Description: Open Source Web Performance Monitoring. Made by iteratec.
Topics: grails, groovy, measurements, performance-measurement, webpagetest, webperformance

v5.3.3: tag_name: v5.3.3
body: ## Improvements

* Technical refactoring of the loading spinner in Angular frontend to support multiple instances.
* The start values for the result selection are now set in the same way for all components.


## Bugs

* We've fixed two errors (#289 and #290) which occured when trying to display page comparison chart and CSI benchmark chart (fixed with #293 and #292). Thanks @carloscohen2202 for opening the issues.
* Measurands where not set from the store which did result in some unexpected behaviour. Also, the locations were not reset when hitting the reset button.
* Query builder did not produce results for percentile data in some cases.
* The labels in the aggregation chart where displayed wrong on initial loading when comparison timeframe was selected.
* Some styling and usability improvements on the aggregation chart

v5.3.2: tag_name: v5.3.2
body: Fixed persisting new first paint metric when it is reported as a non integer value.
v5.3.1: tag_name: v5.3.1
body: ## Feature
Added the performance metric "First Paint"

## Bugfix
Fixed a bug where a wrong result selection was possible
v5.3.0: tag_name: v5.3.0
body: ## Features
  
* We rebuild the aggregation chart as a new Angular component. The functionality is the same as before but it should be faster. The old implementation is still present as reference and the chart is available under the url `/aggregationLegacy/show`.
* When jumping to WebPagetests filmstrip view from the time series chart, the [new sticky feature](https://github.com/WPO-Foundation/webpagetest/pull/1272) of this view is enabled by default.


## Bugfixes

* We've fixed some minor issues we encountered whilst using the new metric finder.
* Exporting CSV data started to get very slow, so we fixed it.
* Interactive metrics are still a work in progress on many projects. Our mapping of interactive metrics from the WebPagetest result XML had to be adjusted.
* We removed the *browser* selection tab on the detail analysis dashboard, because it is currently not possible to filter by browser in this dashboard anyways.

v5.2.5: tag_name: v5.2.5
body: The averaging of performance aspects resulted in very long response times.
v5.2.4: tag_name: v5.2.4
body: If the same UserTiming was stored several times as a performance aspect metric within an application, the page cards were no longer displayed correctly.
v5.2.1: tag_name: v5.2.1
body: Fixed a bug where page cards didn't show up anymore on application dashboard after performance aspects where saved.
v5.2.0: tag_name: v5.2.0
body: ## Features
  
* With Performance Aspects we introduced a new layer of abstraction on top of concrete performance metrics. We chose three of the "moments in user perception" Philip Walton described in his brilliant [article about user-centric performance metrics](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics) as pre-defined performance aspects: _Is it happening?_, _Is it useful?_ and _Is it usable?_.

* A new OpenSpeedMonitor view may be used to choose concrete metrics that represent the aspects for each browser and/or device. This view provides the possibility to choose metrics by a visual comparison of WebPagetest timeframes.

  ![MetricFinder](https://user-images.githubusercontent.com/1001134/59551561-b9a72880-8f7b-11e9-8c49-603a0241e4e5.png)

* The average measured times for these aspects are shown for each page on application dashboard.

  ![PageCard](https://user-images.githubusercontent.com/1001134/59551562-bf9d0980-8f7b-11e9-8356-e96e87fa8cc0.png)

* We combined dashboards for Page and JobGroup aggregation into one single Aggregation board. From now on this dashboard provides all the different possibilities for aggregation.

* Until now a measured step was marked successful when either doc complete or fully loaded time exist. Now just one of the following metrics must have a value:
  * ttfb
  * start-render
  * visually complete 100 %
  * Speed Index
  * Doc Complete
  * Fully Loaded

* Applications shown on homepage are now sorted by their overall performance (Customer Satisfaction Index).

* Rewritten result selection controls in angular in preparation of a rewrite of all the result dashboards.

## Bugfixes

* Statuscode `12999` is not really an error in WebPagetest. So we excluded it   from status codes marking failed tests in OpenSpeedMonitor.

* Filter in Job List view lost entries if some of the jobs ran (page reload needed to see them again).
Hotfix Dockerize: tag_name: v5.1.2
body: Updated docker image to replace https://github.com/jwilder/dockerize with fork https://github.com/powerman/dockerize. This should fix the issue of a high cpu load, when tailing a log file with dockerize (see [here](https://github.com/jwilder/dockerize/issues/107))
v5.1.1: tag_name: v5.1.1
body: ## Features

* We integrated the [WPT filmstrip tool](https://github.com/iteratec/wpt-filmstrip) in our context menu on the time series chart. Now you can directly jump to an overview of the filmstrip and explore test metrics of a WPT test (see this [example](https://iteratec.github.io/wpt-filmstrip/#testId=181222_H8_48d7b7cb240cb62a7f4faa4b38482501&run=2&step=2&view=filmstrip&interval=100)).

![context_menu](https://user-images.githubusercontent.com/25281769/52574846-6e3e0b80-2e1d-11e9-8842-dee1363973b0.png)


## Bugfixes

* Fixed a problem where one couldn't assign roles to existent users.
* Byte metrics where shown in wrong scale on time series chart.
* Some icons in the context menu on time series chart where missing.
* Exporting csv files from results resulted in an error.

## Note

Byte metrics will now be persisted correctly. However if you have to fix wrong byte numbers, which were already persisted, use the following script in the groovy console after updating to osm version 5.1.1
(you'll find the groovy console under your-osm-address.de/console after being logged in as root.)
https://gist.github.com/PhilAlbrecht/5152393b1a338b7136bd38a3c6597b43

v5.1.0: tag_name: v5.1.0
body: ## Important Note

- Due to backend dependency updates it is advised to change the driverClassName in your openSpeedMonitorConfig.yml to `com.mysql.cj.jdbc.Driver`.
- In case you are getting issues with your mysql database and UTC timezone please refer to this: https://stackoverflow.com/questions/26515700/mysql-jdbc-driver-5-1-33-time-zone-issue

## Features

- The new homepage shows all active applications with their total customer satisfaction index as well as failing measurement jobs.
- Graphite Server integration
  - Transfer information about the health status of your jobs to graphite.
  - Add new graphite servers during the configuration process.
- New information card on the application dashboard.
  - It shows how many jobs are currently failing.
  - It helps navigating directly to the failing jobs.
  - It allows to configure graphite server integration.
- The following new metrics are available:
  - Hero timings.
  - The size of javascript, image, css and html files.
  - First meaningful paint.
  - First contentful paint.
- Percentile replaces median
  - Median-button on barcharts got replaced with percentile button coupled with a slider to choose the percentile.

## Improvements

- Duplicated page templates were merged into a single, better maintainable one.
- Failed job results won't be persisted anymore to reduce unnecessary data.
- The queue dashboard is now asynchronous which decreases initial load time.
- Unknown browsers and locations will be added automatically to avoid unusable incoming results.
- Failing jobs will be highlighted in the job list for a quicker overview.
- For every job schedule a corresponding job result will be created even if the test could not be started at all. This helps realizing problems communicating due to unreachable WebPagetest servers.

## Bugfixes

- Fixed incorrect CSI Benchmark sorting when using different filter.
- Button for CSI Weights upload has an icon now.
- Fixed broken prompt showing up when PageMapping was removed.
- Fixed too long information text on threshold tab.
- Fixed too short space between buttons on the threshold editing page.
- Fixed bug that removes the selected threshold but also unsaved thresholds when deleting threshold.
- Fixed wrong button state when new measured event gets created.
- Fixed bug that changes the selected application when a different language option gets set.
- Fixed sticky table header error in script table.
- Fixed CSI circle turning grey when selected application gets changed.
- Fixed bug that removes the user role when a user property gets changed.
- Fixed the CRUD-views not showing the corresponding toolbar.
- Fixed job results so they can be saved without the job having a label.
- Fixed missing navigation between result pages.
- Fixed duplicative toolbar in some CRUD-views.
- Fixed bug that prevents creating or deleting users.
- Fixed bug that prevents editing graphite server.
- Fixed nightly clean up not removing references to old event results.
- Fixed losing role when changing the user name or changing its role.
v5.0.1: tag_name: v5.0.1
body: # Hotfixes

* Fixed a bug that caused threads to stop working when persisting into detail analysis service failed
* Fixed distribution chart not being drawn
* Implemented a workaround for the calculation of the CSI for pages on the application dashboard, caused due to a race condition between CSI for jobGroups and for pages.
v5.0.0: tag_name: v5.0.0
body: # Release Notes v5.0

![The new Application Dashboard](https://user-images.githubusercontent.com/5701519/45998780-2869ec00-c0a4-11e8-9fc3-a0e16e2c80a2.jpg)
## Features
* Introduces the new Application Dashboard to show the performance of your application at a look.
    * It shows the current CSI of your application (JobGroup) and an overview of the last 4 weeks.
    * It shows all measured pages of your application with the current CSI and the metrics _Document Complete_, _Speed Index_ and _Bytes Fully Loaded_.
    * It helps you to find broken measurements and CSI calculations by showing outdated CSI values and missing measurements.
    * It helps you to create and configure your CSI for your application.
* Travis CI Integration
    * Run unit, integration, geb, jasmine and angular tests on Travis.
    * Build and push docker image to Docker Hub (Deployment to our instances is still done through Bamboo)
    * Check out our build status live in the [ReadMe](https://github.com/iteratec/OpenSpeedMonitor/blob/master/README.md) and for details directly on [Travis](https://travis-ci.org/iteratec/OpenSpeedMonitor)

## Improvements
* Upgraded to Grails v3.3.6. This includes Spring 1.5.14 and Tomcat 8.5.31. This fixes CVE-2005-2090 which affected previous versions and was reported to us by [cegue](https://github.com/cegue) and [irivera007](https://github.com/irivera007)
* Upgraged FontAwesome to v5.1.
* Upgraded jQuery to v3.3.
* Upgraded GORM to 6.1, forcing us to revise database flushing. Please post issues if you are experiencing problems.
* Deprecated GORM transaction annotations were substituted.
* Introduced Angular for building components and sub pages.
* Removed Vue.js and replaced the Vue.js components with Angular components.
* A contribution markdown with new development guidelines was added.
* Removed sensitive data from the logging.
* Undefined pages won't be included in the JobGroup aggregation.
* Jobs now always use the _"Capture DevTools timeline"_ feature.
* The Docker image doesn't rely on a specific user id anymore, which makes it usable in environments like OpenShift that run the image with arbitrary UIDs.


## Bugfixes
* Fixed the parsing of the scripts with variables. The pages were always undefined.
* Fixed wrong sized, wrong positioned and broken waiting spinners in charts.
* Fixed broken URL of the PageComparisonChart. The selected dates were wrong
after loading the URL.
* Fixed deleting an empty comparison in PageComparisonChart not enabling the show button again.
* Fixed PageAggregationChart showing improvement and deterioration on one bar at the same time, due to switching between median and average.
* Fixed PageAggregationChart throwing internal server error when selecting broken results.
* Fixed filter in the JobGroupAggregationChart not working properly 
* Fixed Javascript error in the header of the job list. The sticky-table-header function is not available anymore.
* Fixed type error in time series graph when trying to add a graph alias.
* Fixed the filter of the JobGroup list. After a few changes of the filter some of the jobs were not shown anymore.
* Fixed the CRUD-View of the OSM configuration. The default configuration of the OSM was loaded from the database instead of the own configuration. 
* Fixed adding page mapping to CSI redirecting to page 404. The OSM was loaded from the database instead of the own configuration. 
* Removed animation/transition when switching between median and average, since this led to wrong bar behaviour.
* Removed button to delete CSI-Configuration in JobGroup view. This led to a JavaScript error and was overall confusing, since you deleted the config for all JobGroups.
* Workaround: Login will now always redirect to landing page after a successful login. This prevents the appearance of 404 errors.
* Fixed the deletion of custom time series dashboards.

## Code
* WPTProxyController was removed. The controller is not needed anymore.
* Median and average calculation have been moved to the QueryBuilder.
* WPT-Status-Code are now enums and are not used directly in code.

Although highly tested by us, we advise you to backup your database before upgrading.
v4.6.0: tag_name: v4.6.0
body: # Features
- You can switch between displaying the average and the median in various charts like Page Aggregation, Job Group Aggregation, and Page Comparison.

# Improvements
- Improved performance of the Time Series chart.
- We got rid of bower in favor of using only npm.
- Fixed two potential security vulnerabilities (potential cross-site injections in IE, outdated dependencies).
  Many thanks to @cegue and @irivera007 for their hints and support regarding these issues.
- Sizes on Time Series dashboard are displayed in Megabytes, not Kilobytes.

# Bugfixes
- Logging works again. Our logback configuration was overwritten by another one that shipped with an outdated swagger dependency.
- Scripts can be deleted if they are not referenced in any jobs.
- Several buttons were clickable even if when being disabled.
- Fixed a problem with german locale when trimming results on the Time Series chart.
- The job status indicator showed "no data" when all 150 last job executions failed.
- Swagger UI can now be used for testing the requests (didn't work before).
- Fixed the version of mysql to 5.7 in the docker-compose files. Migration to mysql 8.0 doesn't work, yet.
- The bars in the Page Comparison chart were overlapping in the wrong order.
- CSV download of Time Series chart works again.
- PNG download of Page Comparison missed icons in the legend.

# Code
- Major refactoring of integration tests for better maintainability.

v4.5.2: tag_name: v4.5.2
body: # Bugfixes

* While creating a new job it wasn't possible to create a new job group.
* Fixed a positioning offset in the page aggregation bar chart when comparative time frame was selected.
v4.5.1: tag_name: v4.5.1
body: # Bugfixes

* Selected items in dropdowns didn't get displayed correctly, due to an [Issue](https://github.com/alxlit/bootstrap-chosen/issues/80) in `bootstrap-chosen`
* Some highlighting in measurement scripts was broken.
* A minor issue in the REST API interceptor resulted in a permission problem.
v.4.5.0: tag_name: v4.5.0
body: # Features

* We introduced a feature to create thresholds (lower and upper boundaries for a specified measurand) in a job. Based on those threshold a script can be exported. The script runs an OSM job, waits for the result and evaluates the performance metrics based on your defined thresholds. You can hook up the script in your CI pipeline and get an instant response, rating your web performance.
* It is now possible to send health metrics of the [detail data service (DDS)](https://github.com/iteratec/OsmDetailAnalysis) to Graphite.

# Improvements

* Replaced our REST API documentation with [Swagger UI](https://swagger.io/swagger-ui/).
* Internal refactoring of the page comparison chart.
* Refactoring of PNG download mechanism enables dynamic resizing of images in a modal dialog.
* Integrated [vue.js](https://vuejs.org).
* [Detail data service (DDS) ](https://github.com/iteratec/OsmDetailAnalysis)
  * DDS uses OSM domains as identifier instead of full URL now.
  * DDS drops all OSM API keys and creates configured keys on each startup now.
  * Performance optimization.
  * We build a nightly cleanup. All detail data older 60 days is deleted per default. This duration can be configured.
  * The number of threads for downloading wpt results and the maximum number of fetch jobs to queue can be configured now.

# Bugfixes

* Bar charts didn't get displayed correctly in Firefox.
* Copying a job's script to clipboard works now again.
* When sorting bars in page aggregation chart they disappeared sometimes.
* Fixed list of failed measurements.
* Fixed some problems when selecting user timings as measurand.
* Query parameters got cut off in a `navigate` when sent to WPT server (see [Issue #31](https://github.com/iteratec/OpenSpeedMonitor/issues/31)).
* Chrome tab in job settings was sometimes hidden (see [Issue #32](https://github.com/iteratec/OpenSpeedMonitor/issues/32)). 
* Editing the Graphite server url threw an exception.
* Event results of _undefined_ pages were not sent to Graphite.
* Active loading of detail data produced three duplicate copies of the same detail data set.
* _Passive_ loading of detail data in the background was broken.

v4.4.0: tag_name: v4.4.0
body: # Features

* Measurement and visualization of [User Timings](https://www.w3.org/TR/user-timing/) set within measured pages are fully supported now. The User Timings are listed and shown as additional measurands in all dashboards if measurements contain arbitrary user timings.

# Improvements

* Improved performance of Distribution Chart.
* Only show scorebar on chart dashboards for relevant measurands (load times).
* Internal refactoring of the JobGroup aggregation chart.

# Bugfixes

* Fixed a bug causing detail analysis dashboard to break when opening table with many assets multiple times.
* Redirect to Job list after executing Job actions like executing or deleting a job to avoid repeating action execution on page reloads in the browser.
* Fixed Js-NaN exceptions being thrown when resizing the browser window while showing a page aggregation chart.
* Fixed backend exceptions when calculating normalized values leading to no chart being drawn.
* Fixed connectivity option `native` to be called `job/nextExecution` in UI.
* Fixed RuntimeException when switching from joblist to timeseries graph with the graph button.
* Disable stacked bars for comparative time frames in page aggregation.

v.4.3.3: tag_name: v4.3.3
body: # Improvements

* Error pages don't contain any detailed informations about the specific error anymore. Previously this was just the case for some error response codes.

# Bugfixes

* Increased maximum allowed length of webpagest location names. It was limited to 50 characters and some locations of webpagetest.org server exceeded this length so they can't get fetched anymore.
v4.3.2: tag_name: v4.3.2
body: # Bugfixes

* No aggregated _Customer Satisfaction Index_ metrics got calculated if `CSI Systems` were present. 
* Enabled deletion of _Locations_ and _Browsers_ via _All Controllers_ menu entry.
* Improved displayed message, if _Locations_, _Browsers_ or _Scripts_ can't be deleted because associated domains are referencing them.
* Removed remains of old domain class `AggregatorType`.
* Fixed displaying native connectivity with wrong label.
v4.3.1: tag_name: v4.3.1
body: # Bugfixes

* Event results were not saved if no document complete value was reported (common for dynamic/AJAX measurement steps).
* Some links didn't work properly due to the AggregatorType refactoring.
* Fixed a bug where wrong values were shown in the page comparison chart.
* Fixed a minor bug in the PNG download where the wrong font was used.
* Unified labels for measurands.
* Fixed some backend exceptions.
v4.3.0: tag_name: v4.3.0
body: # Features
* A new _First Run Wizard_ helps you to set up OpenSpeedMonitor when starting up for the first time.
* All advanced WebPagetest [options](https://sites.google.com/a/webpagetest.org/docs/advanced-features/webpagetest-restful-apis) are now supported.
* Support for the visual metrics _Time to Interactive, Visually Complete 85, Visually Complete 90, Visually Complete 95, Visually Complete 99_.
* The _Page Aggregation Chart_ has now the ability to compare two time frames with each other.


# Improvements
* We rewrote the Page Aggregation Chart to fully adopt the [d3.js](https://d3js.org/) capabilites. Also it supports _HTML5 history API_.
* Communication between OpenSpeedMonitor and the WebPagetest as well as the OSM Detail Analysis Service is now via _HTTPS_.
* Internal refactoring of _AggregatorType_ allowing to easily add new metrics.
* Chrome in headless mode is now used for Geb- and Karma-Tests due to deprecation of phantomJS.
* Introduced _bootstrap-validator_ to validate several forms.
* Link from _Time Series Chart_ to filmstrip view of WebPagetest the default thumbnail interval is now _0.1 sec_.

# Bugfixes
* Leaking UDP connections to _Graphite_ are fixed.
* Admin accounts could gain root rights.
* Some _Infrastructure Setup Wizard_ fixes, e.g. fixed wrong validation of WPT server url.
* Advanced job settings had some bugs.
* Version control of scripts didn't show the scripts.
* Fixed problems when saving a job as a copy of another one.
* Some links in the GUI were broken.
* Various minor fixes.

v4.2.0_beta_2: tag_name: v4.2.0_beta_2
body: # Features
* We extended the options for a job with all relevant options of WebPageTest.

# Improvements
* We unified all of our unit tests for better code documentation
* The URLs to the charts are now simpler.

# Bugfixes
* Fixed scroll bar on all pages.
* Customer Satisfaction values couldn't be displayed on page aggregation chart.
* Fixed link from page aggregation chart to time series chart.
* The page card in the result selection didn't show all pages when a manual timeframe was selected.
* One couldn't trim the values for Speed Index in the time series chart.
* Integration of detail analysis service was broken.
* Adapted the timeframe selection on several places due to the new time picker.
* The new charts didn't respect the global limits for loading times.
v4.2.0_beta: tag_name: v4.2.0_beta
body: # Features
* A new First Run Wizard helps you to set up OSM.
* In the Page Aggregation chart you can compare different time frames to see improvement and deterioration of your tested pages.
* All charts are automatically resized with the browser window.
* OSM regularly checks WPT locations, collects their health status and reports it to configured graphite server. These health checks will be used in the future to avoid overflowing of test queues.
* The Queue Status page is significantly faster now.
* Speed Index is treated as a time metric, so it's easier to compare it to other times like doc complete or visually complete.
* We defined a new color set for displaying times, sizes and number of requests in charts for a more consistent experience.
* A new time picker makes selection of time frames more convenient.

# Bugfixes
* Pressing "Show" multiple times in the Distribution chart was broken.
* When switching to the Time Series chart, data was accidentally aggregated by hour.
* The new Measurement Setup Wizard did not automatically create Pages and Measured Events.
* The Page Aggregation chart had multiple issues as showing the wrong units and broken filters.
* Removed dependencies to dimple charting library.
* Several small improvements.


v4.1.4: tag_name: v4.1.4
body: ## Features

* Introduced a measurement setup wizard to create measurements in an easy and fast way.
* New charts:
    * *Job Group Aggregation*: Bar chart to compare the measurement values aggregated on job group level.
    * *Page Comparison*: Compare two pages in one stacked bar of a bar chart. So it is possible to compare e.g. the loading time of a page as entry and follow page.
* Ability to highlight a single bar in *Job Group Aggregation Chart* and *CSI Benchmark Chart*.
* Enabled ascending/descending bar sorting in *CSI Benchmark Chart*.
* Added communication between OSM and Graphite via UDP protocol.


## Bugfixes

* Dynamic result selection had a bug when first selecting a page.
* Fixed context menu in time series chart.
* Sorting/filtering in distribution chart was broken.
* Improved the display of loading time recommendations on bar charts.
* Fixed positioning of bar labels.
* Use human readable measurand labels in charts.
* Fixed time frame selection while changing from result list to time series chart.
* Fixed fetching of locations.
v4.1.3: tag_name: v4.1.3
body: ## Features

* Added new CSV export of measurement results on result list page with useful format
* New charts:
  * _Distribution Chart_: Violin chart to visualize the distribution of the results
  * _CSI Benchmark_: Bar chart to compare CSI values for job groups
  * _Page Aggregation_: Complete reimplementation as horizontal bars with [d3.js](https://d3js.org/)
* Enabled version control for measurement scripts
* Support for multiple column legend below time series chart
* Switching between charts and keeping the displayed data selected is now on top of the screen for better usability

## Bugfixes

* Added reset button to CSI dashboard
* Nightly aggregation of CSI values was broken
* Readded CSV export button on CSI dashboard
* Fixed broken links appearing in Docker deployments
* Fixed _next run_ column on job list
* Fixed PNG download of charts (some styles were missing)
* Fixed performance bug on event result and CSI dashboard

v4.1.2: tag_name: v4.1.2
body: ## Features
- Introduced a landing page with tiles for the main features.
- If selected parameters on time series chart depart from defaults a hint is shown now in the upper left corner of the chart (_trim above X ms_ for example).
- Scheduling cron strings of measurement jobs now get translated instantly while typing.
- Layout dialog for chart adaption.
- Added new tile/card layout on some pages where it was still missing.

## Bugfixes
- Fixed/refactored multithreaded loading of detail data in [OsmDetailAnalysis](https://github.com/iteratec/OsmDetailAnalysis) service.
- In OsmDetailAnalysis service api keys created at startup got duplicated.
- OsmDetailAnalysis service api keys containing special charachters broke the hole service. Now just letters a to z (lower and upppercase) and numbers are allowed (Regular expression: `[0-9a-zA-Z\-]+`)
- Fixed fetching of measurement jobs detail data (OsmDetailAnalysis service).
- On CSI dashboard daily or weekly aggregations couldn't get shown.
- Improved performance of rest api.
- Switching between result dashboards (_time series_, _page aggregation_, _result list_) didn't work correctly with predefined periods (e.g. _last three days_).
- User defined dashboards couldn't get saved or deleted.
- Fixed Connectivity selection controls on dashboards.
- Improved wpt script validation.
- Global Events couldn't get created (without job group).
- Bugfix on filter functionality of job list.
- Fixed bug where dates on x axis of time series chart are shown incompletely.

v4.1.1: tag_name: v4.1.1
body: - Added missing link to detail analysis dashboard in new sidebar.
- Protected functions like ad-hoc execution or creating new jobs on job list.
- Fixed inconsistencies in reactive selects on all dashboards.

v4.1.0: tag_name: v4.1.0
body: - We moved main menu and navigation from top to left side of the screen. The new sidebar opens when hovering and leaves more space for the content of dashboards.
- In CSI diagrams zero values weren't plotted. For WebPagetest load times this is the desired behaviour, because zero values are errors in measurement. For CSI values this doesn't apply, so zero values get plotted now.
- Improved script editing support (auto assignment of pages to measured steps). 
- Selection of timeframe and other filter data is now kept when switching between different dashboards. So from a time series one can switch to page aggregation and the pages shown in time series get aggregated as bar chart automatically.
- One can delete more than one job at once on job list now.
- Instead of creating JobSets containing multiple jobs one can add tags to multiple jobs at once now. Can be used to mark some jobs temporarily for deactivation and find them later on for example.
- Simplyfied filter on job list.
- Just like on the result dashboard the selects on CSI dasboard are reactive now. They just show options with available CSI data.
- Measurement queues page supports multistep capable WebPagetest servers > version 2.19 now.
- New view shows last failed results of measurement jobs with status codes.
- In job schedule view, diagrams can be filtered by locations name now. 
- Show min, max and average values in line chart of detail analysis dashboard. 
- Fixed broken hover info on pie charts of new detail analysis dashboard.
- Added batch job, which removes failed tests that are still displayed as pending.
- Rest API method _allLocations_ just shows active locations associated to active WebPagetest servers now.
- Several bugfixes.

v4.1.0 beta: tag_name: v4.1.0_beta
body: - Data selections in Dashboards are reactive now. They show just available options in selected timeframe. So if one for example selects some Job Groups the page list just shows pages that were measured in these groups.
- Warnings about long processing time or missing data are shown directly now. No second page load of dashboard is necessary anymore in these cases.
- Bars in page aggregation view can be sorted by execution order in scripts/customer journey now.
- We added Links to jump from measurement jobs in joblist to page aggregation view.
- Improved tabular result presentation view.
- Minor bugfixes.

v4.0.0: tag_name: v4.0.0
body: - Features
  - Redesign of the layout of the application. All views are now fully responsible and they use the full screen width. That's useful in particular for the charts. Form controls to configure chart data are now grouped and arranged in cards.
  - Introduced new _Page Aggregation Chart_. This chart aggregates arbitrary WebPagetest metrics by measured page. Means get visualized in bar charts.
  - [This open source repository](https://github.com/iteratec/OsmDetailAnalysis) realizes a microservice to persist and visualize detailed webperformance waterfall data. One can explore metrics like load time or size in bytes for all the single waterfall resources interactively. The service can be integrated as detail analysis dashboard in OpenSpeedMonitor now.
  - Via context menu all the different WebPagetest views of a result can be accessed from chart.
  - One can mark different result data points in chart now. These points can be compared in WebPagetests timeframe/video comparison view.
  - In joblist the success rates of all measurement jobs get visualized. 
  - We added Links to jump from measurement jobs in joblist to dashboards showing the results of the jobs.
  - Improved hover info shown in dashboard charts. It shows all data points of the same timestamp with colors of the series now.
- Minor changes
  - Rest API method `resultsbetween` now works with ID's of request parameters _page_, _step_, _browser_ and _location_ in addition to their names. 
- Bugfixes
  - After login one gets redirected to requested page now.
  - All password data in web forms is masked now consistently.
  - Fixed page footer to the bottom of the page.
- Internals
  - Updated Twitter Bootstrap to version 3.
  - All 3rd party web assets are assembled via bower now.

v3.5.5: tag_name: v3.5.5
body: - One can set WebPagetest apikeys now in OpenSpeedMonitor. So you can use (private) WPT servers secured by apikey for your measurement.
- One can copy the script of a measurement job to clipboard now. If the script is parametrized by the job all parameters get replaced respective job settings.
- All the _administration lists_ (menu >> Administration >> All Controller) are now filterable.
- We extended user management
  - If an smtp server is configured new users can register autonomously.
  - Users can be maintained by super users.
  - Roles can be maintained by super users.
- Links of new results data points now work for newest WebPagetest version.
- We extended the rest api in preparation of new detail analysis board which is in progress but not yet visible.

v3.5.4: tag_name: v3.5.4
body: - Bugfix REST API method resultsbetween: results for _not csi_ job groups weren't delivered.
- Improved filter on batch activity view.
- Security bugfix.

v3.5.3: tag_name: v3.5.3
body: - Added filter functionality to list of batch activities.
- Increased number of lines to show on CRUD list views per default to 100.
- Clicking to _Last Run_ link in job list led to an error on result list page. Fixed broken pagination.
- Update of grails asset-pipeline to fix error in uglyfying javascript.
- Fixed some minor bugs in javascript of _Filter jobs_ accordion on result dashboard.

v3.5.2: tag_name: v3.5.2
body: - Added support for actual WebPagetest version with multistep capability.
- Integration of Bower for building of web assets.
- Bugfix: Javascript bug on csi configuration pages.
- Bugfix: Nightly calculation of CSI aggregations was broken. Aggregations for page, job group and CSI system aggregations weren't calculated correctly anymore. The fix marks all aggregations affected as outdated. During the next nightly calculation these aggregations will be calculated again correctly.

Update Grails 3: tag_name: v3.5.0
body: - We updated Grails framework from version 2.5 to version 3.1.
- That update implies an update of build from grails specific ant version _gant_ to gradle build system.
- OpenSpeedMonitor now requires Java 8 instead of version 7.
- We wrote webdriver tests based on Geb for the most important pages/functionalities.
- OpenSpeedMonitor can now report JVM metrics like actual memory usage to arbitrary Graphite servers.
- Migrated build and deployment from CI Server Jenkins to Atlassians Bamboo (scripts under _scripts/ci_).
- Fixed some long time failing integration tests.

v3.4.5: tag_name: v3.4.5
body: # Changes from previous release
- CSI Configurations
  
  The Customer Satisfaction index (CSI) is an aggregation which first converts load times into a percentage of users who would be satisfied by the load time. This version of OpenSpeedMonitor comes with a preset of five different mappings to translate load times into a percentage of satisfied users. You can assign one of these mappings to each of your measured pages. Furthermore you can extend the preset of mappings by uploading your own ones via CSV ex-/import.
  
  After translating the load times, resulting percentages get aggregated to an index. That aggregation implies building weighted means. The weighting factors (browser, internet connectivity, page and hour of day) and the previously mentioned mappings are now summarized to a CSI Configuration entity. You can configure multiple configurations and define which one to use calculating each of your CSI's. [Here](http://demo.openspeedmonitor.org/csiConfiguration/configurations) you can see the CSI configuration view of the OpenSpeedMonitor demo instance.
- CSI Systems
  
  With this version we introduced CSI systems. You can assemble multiple Job Group CSI's within a CSI system. Each Job Group CSI associated to a CSI system gets a weight. For the system a CSI is being computed by building a weighted mean from the CSI's of the affected Job Groups. By choosing one of the two new options _daily/weekly mean per CSI System_ you can visualize CSI Systems as a graph on CSI Dashboard. 
  
  **An example:** You are measuring the performance of a responsive web application on different devices with different screen sizes. You have grouped all the measurements by breakpoints in different job groups. OpenSpeedMonitor calculated one CSI per breakpoint so far. Let's assume your applications supports three different breakpoints. With the new CSI system you can aggregate your three breakpoint CSI's to one system CSI. Each breakpoint can be of different interest for your application. You can weight the breakpoint CSI's accordingly in your CSI system. The system's CSI now represents the satisfaction of your users on all different breakpoints.
- CSI by visually complete times
  
  WebPagetest provides a measurand called visually complete time. This is the point in time after that nothing in the viewport of the browser changes visually until page is fully loaded. Up to now the customer satisfaction was caculated by WebPagetests doc complete time. With this release a second CSI is calculated based on visually complete time. You can visualize both CSI's on CSI Dashboard (see filter CSI Type).
- CSI values by internet connectivity
  
  On CSI Dashboard you can now choose which internet connectivity you want to see. This option is only available for hourly values because daily and weekly aggregations weight measurements by internet connctivity. The weights of all browser/connectivity combinations can be found on csi configuration view.

v3.3.0: tag_name: v3.3.0
body: # Changes from previous release
- Intgerated [Liquibase](http://www.liquibase.org/) for automatic database updates. Removed Hibernates dbCreate configuration from all DataSources. From now on all scheme and/or data updates get applied via liquibase changelogs at startup, automatically.
- Arbitrary sets of jobs can now be saved as job sets in job list view. These sets can be used to undo or repeat updates like activation or deactivation for exact the same group of jobs.
- Added matrix view for visualisation of browser-connectivity-weights.
- Bugfix: NextRun in jobList is now correct when using german language.
- Bugfix: Legends of graphs on CSI- and EventResultDashboard are now correctly summarized for all cases.

# Database updates

With this release we integrated [Liquibase](http://www.liquibase.org/) via [database-migration](http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/introduction.html) plugin.

This release contains a root changelog with all the change sets to create the complete osm database for this release version: grails-app/migrations/changelog.groovy. If you start with a fresh installation without a legacy database you can just start your application, the scheme gets created automatically and the changelog get marked as applied in your database. On subsequent startups with the same osm version no database change sets get applied.

**No more manual database updates from now on.**

### Initially update legacy database

If you have to update a legacy database of a previous osm version you will have to do the following steps once to update your database scheme to the actual state. Because your database can be in very different states dependent on the osm version you are running, nobody can guarantee these steps will lead to a valid database in all cases.
So if you care about your synthetic performance measurements results **DUMP YOUR ACTUAL DATABASE** before working out the following steps.
1. For documentation purposes you should create a liquibase changelog of your actual database and your actual domain classes before you start with the update. These changelogs can help to reproduce problems with the update.
   
   Within your version of OpenSpeedMonitor before updating the software:
   
   ```
   grails dbm-generate-gorm-changelog <date>-GORM-complete-changelog.groovy
   grails dbm-generate-changelog <date>-DATABASE-complete-changelog.groovy
   ```
   
   _<date\>_ should be replaced with an actual timestamp.
2. Update your version of OpenSpeedMonitor to this release version.
3. Create a changelog containing all changesets necessary to update your database to the latest domain class state:
   
   ```
   grails dbm-gorm-diff legacy.groovy
   ```
4. Add this changelog to your root changelog
   
   ```
   grails dbm-register-changelog legacy.groovy
   ```
5. Remove imports of all other (official) liquibase changelogs temporarily from root changelog. Root changelog should look like this:
   
   ```
   databaseChangeLog = {
       //include file: '2015-11-18-SCHEME-initial-liquibase.groovy'
       //include file: '2015-11-18-DATA-set-initial-csi-transformation.groovy'
       //include file: '2015-11-18-DATA-multiply-csi-values-by-100.groovy'
       include file: 'legacy.groovy'
   }
   ```
6. Apply changelog by running `grails dbm-update`. All the change sets necessary to update your legacy database scheme get applied to your database. Dependent on the age of your database scheme this can last a while.
7. After successful dbm-update your database scheme should be in sync with the domain classes/gorm now. Add the actual **SCHEME** liquibase changelog again. (Optional: Remove import of already applied legacy changelog from root changelog.) Root changelog should look like this:
   
   ```
   databaseChangeLog = {
       include file: '2015-11-18-SCHEME-initial-liquibase.groovy'
       //include file: '2015-11-18-DATA-set-initial-csi-transformation.groovy'
       //include file: '2015-11-18-DATA-multiply-csi-values-by-100.groovy'
   }
   ```
8. Now, you can mark the actual **SCHEME** liquibase changelog as already applied. Otherwise it will run with the next start of OpenSpeedMonitor again, failing because all the db artefacts already exist.
   
   ```
   grails dbm-changelog-sync
   ```
9. Add the two **DATA** liquibase changelogs again:
   
   ```
   databaseChangeLog = {
       include file: '2015-11-18-SCHEME-initial-liquibase.groovy'
       include file: '2015-11-18-DATA-set-initial-csi-transformation.groovy'
       include file: '2015-11-18-DATA-multiply-csi-values-by-100.groovy'
   }
   ```
   
   They apply some data updates necessary to run the actual version of OpenSpeedMonitor and will run with the next start of the application.

You are ready to go now - **No more manual database updates from now on.**

v3.2.2: tag_name: v3.2.2
body: # Changes from version 3.2.0
- Bugfix: Percent of users who would be satisfied with a measurement result is called Customer satisfaction (CS) in OpenSpeedMonitor. For each result CS is calculated by rank for now (algorithm will be switched to a mapping soon). Proof whether it could be calculated for a concrete result was switched to mapping algorithm already. So when no mapping exists no CS was calculated.

# Manual db updates

No updates necessary.

v3.2.0: tag_name: v3.2.0
body: # Changes from previous minor version
- Chart legends on dashboards are reorganized to make dashboards more clear. Therefore parts of graph labels which are common to all graphs get listed above the chart. Just label parts which are different for the graphs mark them in chart legend.
- Jobs configured to run with a custom internet connectivity will get a custom connectivity name now. You can set that name in job edit/create GUI.
- In result dashboard you can choose the graphs to show by internet connectivity now. You can choose single predefined connectivities, custom connectivities or measurements without traffic shaping at all.
- Added new Job Scheduling view to show all the locations/job queues for all WPT servers. Scheduled jobs and usage rate are visualized with d3.js.
- Added visualizations for customer satisfaction index weights.
- Update Grails framework to version 2.5.0.
- Update several Grails plugins to match default for grails version 2.5.
- Refactored asset loading with asset pipeline plugin.
- Completely removed long time deprecated proprietary charting library Highcharts.

# Manual db updates

The following changes have to be implemented manually if you want to use an existing database from the previous OpenSpeedMonitor minor version. Grails/Hibernates dbCreate/hbm2ddl feature doesn't manage these changes automatically.

All following SQL scripts got tested with MySQL database.

## Schema updates

No schema updates necessary from previous minor version.

## Data updates

### Change saved user passwords

Spring security core plugin got updated from version 1.2 to version 2.0 with this release. Used hash algorithm to store passwords in db has changed from sha-256 to sha-512. If your MySQL server has been [configured with SSL support](https://dev.mysql.com/doc/refman/5.5/en/ssl-connections.html) you can set the new hashes with this SQL statement:

```
update user set password=SHA2('[user-password]',512) where id=[user-id];
```

Otherwise you will have to use another tool to create sha-512 hashes of your passwords. With openssl for example:

```
$ printf [user-password] | openssl dgst -sha512
```

Then you can change password hash in database:

```
update user set password=[user-password-hash] where id=[user-id];
```

### Add Connectivity to Event results

In event result dashboard, results to show in chart can be limited by internet connectivity now. This connectivity is persisted for every incoming result with this version of OpenSpeedMonitor.
So to show results measured with a previous OpenSpeedMonitor version correctly, you will have to add this connectivity to exisiting results. 
1. Add custom connectivity names in jobs with a custom connectivity.
   
   For these Jobs a name for the custom connectivity has to be defined now. So you need to add these names manually. With `select id,label from job where custom_connectivity_profile=1;` you get all affected jobs. You can add names for the custom connectivity for the jobs in OpenSpeedMonitors job/edit view of respective jobs.
2. Set connectivity for event results measured with a custom connectivity
   
   ```
   update event_result er 
   inner join job_result jr on er.job_result_id=jr.id
   inner join job j on jr.job_id=j.id
   set er.custom_connectivity_name=j.custom_connectivity_name
   where j.connectivity_profile_id is null and cast(j.no_traffic_shaping_at_all as unsigned)=0;
   ```
3. Set connectivity for event results measured with a predefined connectivity
   
   ```
   update event_result er 
   inner join job_result jr on er.job_result_id=jr.id
   inner join job j on jr.job_id=j.id
   set er.connectivity_profile_id=j.connectivity_profile_id, er.no_traffic_shaping_at_all=0
   where j.connectivity_profile_id is not null;
   ```
4. Set connectivity for event results measured without traffic shaping at all
   
   ```
   update event_result er 
   inner join job_result jr on er.job_result_id=jr.id
   inner join job j on jr.job_id=j.id
   set er.no_traffic_shaping_at_all=1
   where cast(j.no_traffic_shaping_at_all as unsigned)=1;
   ```