Commit Graph
100 Commits
Author SHA1 Message Date
andi 550d7ba44e add flag to make CSV upload wait until entries are flushed
To make it easier/possible to write stable unit test the CSV upload
can optionally wait until all entries have been flushed to disk.
This is necessary for tests that ingest data and then read the data.
2019-12-13 18:05:20 +01:00
andi 07ad62ddd9 use Junit5 instead of TestNG
We want to be able to use @SpringBootTest tests that fully initialize
the Spring application. This is much easier done with Junit than TestNG.
Gradle does not support (at least not easily) to run Junit and TestNG
tests. Therefore we switch to Junit with all tests.
The original reason for using TestNG was that Junit didn't support
data providers. But that finally changed in Junit5 with
ParameterizedTest.
2019-12-13 14:33:20 +01:00
andi 394e16ad27 make time column configurable
Adding the header of the time column to the
CsvReaderSettings. This is necessary to parse
arbitrary CSV files.
2019-12-09 18:59:48 +01:00
andi d383134c42 add support for ISO-like date formats
Recommind is using a pseudo ISO date format for their
log files. It uses a comma instead of a dot for the
second to milli second separator and it does not
add a timezone. Dates without timezone are assumed to be UTC.
2019-12-09 18:40:14 +01:00
andi 620f58d8e5 cleanup: remove definition for mustache dependency 2019-12-08 20:20:38 +01:00
andi 60f1a79816 add settings to file upload
This makes it possible to define properties for
the uploaded CSV files. Currently we can define the
separator and which columns are to be ignored.
2019-12-08 20:20:13 +01:00
andi e931856041 merge projects file-utils, byte-utils and pdb-utils
It turned out that most projects needed at least
two of the utils projects. file-utils and byte-utils
had only one class. Merging them made sense.
2019-12-08 18:47:54 +01:00
andi 85679ca0c8 send CSV file via REST 2019-12-08 18:39:43 +01:00
andi f1ef13c1de add inputs/outputs to npm_run_build
Fixes the up-to-date check for npm_run_build.
2019-12-07 08:34:36 +01:00
andi 52a3cdc42b remove dependency to SpringBoot Mustache
It is no longer needed since we switched to Angular.
2019-12-07 08:33:40 +01:00
andi 08cc27600e update SpringBoot to 2.2.2.RELEASE 2019-12-07 08:32:03 +01:00
andi 30504672bc extend CsvReaderSettings by list of columns that will not be indexed 2019-12-01 09:21:07 +01:00
andi ffe5ae8652 add CsvReaderSettings
Preparation to add more complex CSV parsing rules.
2019-11-30 18:32:34 +01:00
andi 08b1be5334 extract CSV reading code to new file
Refactoring to prepare the addition of CSV parsing rules. The parsing
rules will contain information about which columns to ingest or ignore.
This will be used to add the ability to upload files via HTTP post in
addition to the TcpIngestor.
2019-11-30 17:58:01 +01:00
andi 0cdf30e9a2 optimize SVG icons
The icons were made with Inkscape. This tool does not care
for file size. By rewriting the icons by hand I could reduce
the file size siginificantly. E.g. 6.1kb to 441 bytes for
cumulative-distribution-chart.svg.
2019-11-30 09:35:02 +01:00
andi 4e1b7a46d8 fix x-axis labels overlap when zooming out
The x-axis labels overlapped when zooming out too far.
Fixed by increasing the step size and reducint the labels to
year only.
2019-11-30 08:44:29 +01:00
andi 9451feb268 add link to other solutions for the Angular/SpringBoot issue 2019-11-29 20:09:03 +01:00
andi 2dd513c380 Fix build by adding dependency to commons-lang3.
Classpathes in Eclipse are different from classpathes in Gradle due to
Gradle's 'implementation' configuration which does not provide
dependency transitively in Gradle.
2019-11-29 20:07:03 +01:00
andi 8832d52ceb enable new Angular application
Remove the controller method that returned the VueJS index page.
Add resource handlers that redirect to the Angular application.
I added two implementations, but activated only one. At the moment I am
not sure which solution is the better. We keep both so that we can
easily switch if need arises.
2019-11-29 20:04:54 +01:00
andi 2d4104e6c1 remove old VueJS application 2019-11-29 20:00:58 +01:00
andi 51ba287ace progress bar and abort for gallery
Generating all images for a gallery view can take
long. It might not be obvious when the computation
is done, because there is no progress indicator.
Fixed by adding a progress bar.

You might want to abort the computation. E.g.
because you already found what you were looking
for or you want to change the parameters.
This can now be done by clicking 'Abort'.
Note, it does not abort the current computation.
2019-11-29 09:57:15 +01:00
andi 20b710547f use one multi-select drop down for plot type
All plot types we currently have can be combined
in one image. So there is no need to compute
combinable types.
2019-11-24 10:53:30 +01:00
andi 06b379494f apply new code formatter and save action 2019-11-24 10:20:43 +01:00
andi 5ea82c6a4c enforce specific code formatter settings 2019-11-24 10:18:11 +01:00
andi e2a33ac6e2 make the code that determines which axis to use explicit
In the previous changeset the code that determined
which axis the plots used was implemented as a
side effect of getting the Gnuplot definition of
an axis.
Changed that to an explit update call with simpler
logic.
2019-11-24 09:08:36 +01:00
andi 892d5a6d08 automatically determine which axis a plot needs 2019-11-24 08:18:52 +01:00
andi 3048f67e9a cleanup 2019-11-23 19:12:23 +01:00
andi 4879c6cdc7 use new icons for axcending/descending 2019-11-23 18:51:40 +01:00
andi 1cc39e3962 create y-axis settings in aggregate handlers 2019-11-23 18:40:31 +01:00
andi 8d55ef4e5f make sure labels for cumulative distribution don't overlap 2019-11-23 14:36:32 +01:00
andi 82a961dbaf move definition of x-axis to the aggregate handlers 2019-11-23 14:28:18 +01:00
andi 84e5f99c4f show big image in gallery view 2019-11-21 19:22:06 +01:00
andi 90331bd029 fix: card grid grid gets streched if vertical space is not used fully
Fixed by adding a container for the card grid.
That way the actual card grid has no height and
is therefore not streched vertically.
2019-11-17 19:57:05 +01:00
andi 5341b5e307 change color palette so that the first color is blue
The color scheme for the page is blue/grey, so it makes
sense to use blue as the main color for plots.
2019-11-17 19:36:48 +01:00
andi a296a2ca55 add mathematical icons 2019-11-17 18:59:34 +01:00
andi 771f61a597 add filters for gallery 2019-11-17 18:59:08 +01:00
andi 70fb84d634 add sorting for gallery 2019-11-17 09:36:37 +01:00
andi 73ea635ac1 render gallery items 2019-11-16 15:14:21 +01:00
andi 3022edb1e1 use snackbar to show error messages 2019-11-16 08:57:39 +01:00
andi 41d30cbc44 update NPM to 6.13.0 2019-11-14 18:54:24 +01:00
andi 57c5cca688 fetch possible values for gallery view 2019-11-14 18:45:32 +01:00
andi 10a7710940 fix CSV parser corrupts duration if duration is last element in line 2019-11-14 18:40:14 +01:00
andi d9b2327f35 make default for 'splitBy' configurable 2019-11-10 16:33:37 +01:00
andi 8d690ff0e7 make filter panel thinner 2019-11-10 16:32:30 +01:00
andi a917e771c6 use custom favicon 2019-11-10 16:08:13 +01:00
andi 0fb7a0aaf6 fix image creation for automatic y-range 2019-11-10 14:22:22 +01:00
andi 4367323fcd replace deprecated dependency configurations
Using api and implementation instead of the
deprecated compile configuration.

Update to Gradle 6.0.
2019-11-10 11:08:50 +01:00
andi ddd71ff14b update libraries 2019-11-10 09:50:56 +01:00
andi 198b51089d make defaults for groupBy configurable
We do not know which fields exist at compile time.
But it is a great help to have some pre-selected
fields in groupBy.
Solved by adding a configuration option.
2019-11-10 09:38:16 +01:00
andi c83d0a3e1e fix overlapping x axis ticks
Gnuplot does not handle long x-axis ticks very good.
It should know how wide the labels are and could adapt
the increment size accordingly, but it doesn't.
Fixed by explicitly defining the increment for x-axis
labels.
2019-11-01 19:13:11 +01:00
andi 7c122b5753 cleanup 2019-11-01 17:45:19 +01:00
andi 7e1349b25a make filter panel thinner
Making the filter panel thinner by 18%. To do this
we moved the date range next to the query box.
The thinner filter box gives us more width for the plot.
2019-11-01 10:21:25 +01:00
andi 78f9f3fe16 fix IndexArrayOutOfBounds in parallel request aggregator
The range fromEpochMilli to toEpochMilli contains
(toEpochMilli - fromEpochMilli +1) milli seconds
2019-11-01 09:37:03 +01:00
andi 462601797e update gradle to 6.0-rc2 2019-11-01 09:08:17 +01:00
andi b734894253 fix parallel aggregate on non english locales
We generate CSV files with comma as separator.
When we write times with milli seconds, then
we use floating point numbers. Depending
on the locale those floating point numbers
may be written with comma instead of point.
If that happens, then the plots are messed up.
Fixed by enforcing the locale when formatting floats.
2019-11-01 09:04:26 +01:00
andi d91481809e fix range selection when moving from right to left 2019-11-01 09:00:05 +01:00
andi 3303afd115 render images without any data on it instead of throwing errors
This makes it easier to use the mouse wheel
to zoom in. Without it you could zoom into
a region that had not data and then had to
use the date picker to change the date.
2019-10-31 19:30:29 +01:00
andi 57be6f64e2 prepare plot type for 'step fit' plots 2019-10-31 19:11:38 +01:00
andi 775b420e85 zoom by mousewheel 2019-10-31 18:56:19 +01:00
andi bb8b183f91 rename yAxisScale to axisScale
For some reason PlotRequest.yAxisScale does
not work. PlotRequest.axisScale does work.
2019-10-29 18:08:31 +01:00
andi 772e7b40ae make left panel narrower
Using Arial, because sans-serif has different
width in Chrome and FF.
2019-10-29 17:59:14 +01:00
andi eaddf97a0d zoom by range selection 2019-10-28 18:39:12 +01:00
andi 920851b39e add range selection in plot view 2019-10-28 17:37:50 +01:00
andi 5a7cde7815 show plotted images 2019-10-27 08:08:55 +01:00
andi 3190074ce3 add examples to the query suggestions 2019-10-26 19:14:51 +02:00
andi f235890cc1 prepare sending of plot requests
- values for query and date range were not
  propagated to the model
2019-10-26 10:32:11 +02:00
andi 7636781315 fix StringIndexOutOfBounds when caret is in position 0 2019-10-26 10:30:02 +02:00
andi f28a67a5c1 make it possible to render any combination of plots 2019-10-20 10:16:25 +02:00
andi b7c4fe4c1f move scatter plot creation into an AggregateHandler 2019-10-20 08:11:09 +02:00
andi 7c61686808 merge ScatterPlot into Plotter 2019-10-19 19:03:33 +02:00
andi 4749d54499 fix deprecations due to SpringBoot 2.2.0
replace deprecated MediaType.APPLICATION_JSON_UTF8_VALUE with
MediaType.APPLICATION_JSON_VALUE
2019-10-19 18:56:44 +02:00
andi 4094351063 udpate npm and JS dependencies 2019-10-19 18:42:32 +02:00
andi 10e5c058ec update gradle and java dependencies 2019-10-19 18:31:02 +02:00
andi 12be86a1d6 fix component interaction with sub-components 2019-10-19 18:18:17 +02:00
andi 24bf7c98e3 add limit by 2019-10-19 08:48:21 +02:00
andi a3099d4981 initial version of the query autocompletion
Missing features at this point:
1. No suggestions when the input gets the focus.
2. Suggestions are not shown after selecting a suggestion.
2019-10-13 10:35:38 +02:00
andi 47d8387fec change theme from purple to blue 2019-10-12 09:56:14 +02:00
andi 2825654b7a improve styling of filter panel
Adapt width so that the date range fits.
Width of form fields is now 100%.
y-range restrictions are now rendered in one line.
2019-10-12 09:06:19 +02:00
andi 708a85c28c add daterangepicker
We are now adding the daterangepicker without Angular. This is a little
bit dirty, because we have to load jquery, moment and daterangepicker
manually via script tags, but it works without major hassle.
2019-10-11 17:47:34 +02:00
andi e61f415880 add date range field
It is (again) surprisingly hard to find a decent date+time-range
picker that works with Angular. Daterangepicker, which I used with
my VueJS application does not work with Angular. I can't get the
angularized version
https://github.com/fragaria/angular-daterangepicker) to work either.
And and a native Angular date picker
(https://github.com/GNURub/ngx-daterangepicker) doesn't work either.
2019-10-11 17:29:14 +02:00
andi 020c3b6c39 make the drop down for "combine with" dynamic 2019-10-11 09:54:26 +02:00
andi ca8ee7d8f7 add component for y-axis range 2019-10-10 16:54:02 +02:00
andi 9cf9bf4673 add more plot type icons and disable not (yet) implemented plot types 2019-10-10 15:36:52 +02:00
andi 7ca7b80255 create icons for plot types 2019-10-10 12:00:41 +02:00
andi 69968b7682 ignore hs_err_pid files 2019-10-09 19:03:13 +02:00
andi 2787b42c31 adding a few filters (no doing anything yet) 2019-10-09 19:02:34 +02:00
andi 1afcc7cf38 add left/right panel to visualization page 2019-10-09 16:47:19 +02:00
andi 8b42476b72 add pages for uploading and help 2019-10-09 16:11:05 +02:00
andi e547b67105 add icons from https://uxwing.com/ (MIT License) 2019-10-09 16:10:40 +02:00
andi 65b37e9c67 initial commit of the new UI based on Angular
At this point it is still the example Angular application.
2019-10-08 18:18:24 +02:00
andi c128bdd532 my ideas on how to proceed
I need to clean up the UI and make it easier extendible.
2019-10-08 17:10:13 +02:00
andi 57ad6a1cee update SpringBoot to 2.1.9
Also remove direct dependencies to log4j-api and log4j-core where
possible. log4j-slf4j-impl is enough in many cases.
2019-10-04 20:15:09 +02:00
andi d895eba47c remove duplicate values when rendering
Rendering plots with millions of values is expensive. Before this fix
we wrote all values into CSV files. The CSV files were then read by
Gnuplot that did the rendering. But in an image with n×m pixes there
can only be nm different values. In most realistic scenarios we will
have many values that will be drawn to the same pixels. So we are
wasting time yb first generation the CSV for too many values and then
by parsing that CSV again.
Fixed by using a sparse 2D array to de-duplicate many values before
they get written to the CSV. The additional time we spend de-duplicating
is often smaller than the time saved when writing the CSV, so that the
total CSV writing is about as 'fast' as before (sometimes a little
faster, sometimes a little slower). But the time Gnuplot needs for
rendering drastically reduces. The factor depends on the data, of
course. We have seen factor 50 for realistic examples. Making a 15s
job run in 300ms.
2019-09-29 18:57:57 +02:00
andi d40a7a71c8 update 3rd-party libs 2019-09-29 11:10:05 +02:00
andi 242c83e590 extract constants for gnuplot margins in px 2019-09-08 08:34:14 +02:00
andi 162ef1626c reduce memory usage for computation of cumulative distribution
Before: To compute the cumulative distribution we added every duration
into a LongList. This requires O(n) memory, where n is the number of
values.

Now: We store the durations + the number of occurrences in a
LongLongHashMap. This has the potential to reduce the memory
requirements if durations occur multiple times. There are a lot of
durations with 0, 1, 2 milliseconds. In the worst case every duration
is different. In that case the memory usage doubled with this solution.

Future: We are currently storing durations with milli seconds precision.
We don't have to do that. We cannot draw 100 million different values
on the y-axis in an images with only 1000px.
2019-09-07 18:31:18 +02:00
andi 0e9e2cd53a remove dependency to Guava 2019-09-01 15:44:36 +02:00
andi 8579974051 performance improvement
Queries like "firstname=John and lastname=???" were slightly
inefficient.
They fetched all firstnames, filtered to those that matched the prefix
(e.g. John or Jonathan is this example) and then iterated over all those
values and return the lastnames.
Fixed by having two implementations. One for the case that only a few
of the values in fieldA match and one for the case that many match.
2019-08-31 19:30:54 +02:00
andi d8a114dbaf handle globlike patterns in in-expressions 2019-08-31 17:34:17 +02:00
andi f8e859fb6d cleanup and javadoc 2019-08-31 16:52:13 +02:00