Commit Graph
100 Commits
Author SHA1 Message Date
andi 23e16ff61d ignore null values in tags 2018-04-14 09:58:51 +02:00
andi 7018a11ab3 add links to current settings and to current image 2018-04-10 19:59:09 +02:00
andi fe29b0d738 remove obsolete variables from model 2018-04-08 19:43:47 +02:00
andi 12e766bd60 label was not correctly linked to drop-down 2018-04-08 19:34:35 +02:00
andi 8f69be3b66 read initial values from URI and provide permanent link 2018-04-08 19:28:19 +02:00
andi 1eabd4aa96 update jquery and remove obsolete js/css files 2018-04-08 17:44:03 +02:00
andi 59fb35d7d8 show waiting game 2018-04-08 17:13:01 +02:00
andi 1755562a84 do not move the cursor to the end when applying a proposal 2018-04-08 14:06:13 +02:00
andi 68ee88bce0 rewrite autocomplete in vue.js 2018-04-08 08:44:28 +02:00
andi 5e53e667fe use vue.js for the UI 2018-04-02 09:18:41 +02:00
andi 22c99f8517 fix null pointer exception
filename were generated without '$', but the parsing code expected
the '$'.
2018-03-28 19:34:48 +02:00
andi 9f37243ba3 Reduce memory consumption of Tags by 50%
by storing only the bytes instead of the string.
2018-03-28 19:08:53 +02:00
andi 81711d551f fix performance regression
The last improvement of memory usage introduced a performance
regression. The ingestion performance dropped by 50%-80%, because
for every inserted entry the Tags were created inefficient.
2018-03-27 19:30:18 +02:00
andi de0f8412bd show proposals for empty terminals 2018-03-25 19:17:49 +02:00
andi 2cd32805d9 show better error message when there are too many parallel requests 2018-03-25 18:03:20 +02:00
andi 540b6c79f4 restart waiting game 2018-03-25 17:59:51 +02:00
andi c581e352e4 add method that returns a string representation of the tags in Tags 2018-03-19 19:29:22 +01:00
andi 5343c0d427 reduce memory usage
Reduce memory usage by storing the filename as string instead of
individual tags.
2018-03-19 19:21:57 +01:00
andi b4a0514267 draw points and percentile lines with the same color 2018-01-21 14:09:34 +01:00
andi bb7701e7c4 use enum for line type instead of string 2018-01-21 11:01:30 +01:00
andi 8f15aba0d5 replace individual percentile aggregates with a single one for all 2018-01-21 10:54:13 +01:00
andi b439c9d79a update third-party libs
antlr4: 4.7 -> 4.7.1
commons-lang3: 3.6 -> 3.7
2018-01-21 08:44:30 +01:00
andi 469dc20411 add gradle plugin: gradle-versions-plugin 2018-01-21 08:43:45 +01:00
andi 9f45eb24ca add trace logging for creation of new writer 2018-01-21 08:36:40 +01:00
andi a6a2236d18 do not compute counts when proposing all keys 2017-11-18 13:03:45 +01:00
andi 14d1367c4a remove duplicate enums 2017-11-18 12:30:45 +01:00
andi f2868fcc1b reduce memory footprint: old generation by 100 MB
This reduces the size of the old generation by 100MB (300MB down to
200MB). Unfortunately the total JVM size didn't change and is still
512MB.

Doc stores the path as byte array instead of Path.
2017-11-18 10:39:01 +01:00
andi cc49a8cf2a open PdbReaders only when reading
We used to open all PdbReaders in a search result and then interate over
them. This used a lot of heap space (> 8GB) for 400k files.
Now the PdbReaders are only opened while they are used. Heap usage was
less than 550 while reading more than 400k files.
2017-11-18 10:12:22 +01:00
andi a636f2b9bd update primitive collections to 0.1.20171007100354 2017-11-18 10:09:47 +01:00
andi 0555691864 update gradle to 4.3.2 and spring boot to 1.5.8 2017-11-18 09:32:49 +01:00
andi 995558588a add median and 90% percentile 2017-11-18 09:28:41 +01:00
andi 11b3610971 make invaders better
add kill count
do not move all invaders at once
2017-10-01 19:08:59 +02:00
andi 08f1961f51 replace spinner with a little game 2017-10-01 17:23:59 +02:00
andi 386f211377 make it possible to draw the legend outside of the plot area 2017-09-30 17:51:33 +02:00
andi d4fd25dc4c replace LinkedHashMap with a more memory efficient implementation
This saves approximately 50MB of heap space.
2017-09-30 17:51:02 +02:00
andi 7e00594382 add helper class that returns the size of objects 2017-09-30 17:49:21 +02:00
andi e0655f66fa skip invalid entries 2017-09-24 17:21:20 +02:00
andi a7cd918fc6 skip empty files 2017-09-24 17:12:17 +02:00
andi dc8262c37e replace deprecated API 2017-09-24 17:00:08 +02:00
andi 4b53baacae add scrollbar for proposals, again 2017-09-24 13:32:51 +02:00
andi 35500e387a add vertical marker lines that show which area will be used after
zooming
2017-09-24 12:52:44 +02:00
andi 8b74992e66 reduce memory allocations by 25% with a cache of formatted longs 2017-09-24 09:53:25 +02:00
andi 37eb05aebf use unix timestamps in the CSVs used by gnuplot
This is faster by factor 4, because we don't have to format the date.
2017-09-24 09:38:08 +02:00
andi 955127dc4a use buffered writer
despite my previous test, writing the csv is a little bit faster with
a buffered writer (~ 10-15%)
2017-09-23 20:22:15 +02:00
andi 9d66c9e0da zoom in/out 2017-09-23 20:20:56 +02:00
andi 70e586b7e9 limit by max/min value 2017-09-23 18:56:02 +02:00
andi 347f1fdc74 update 3rd-party libraries 2017-09-23 18:24:51 +02:00
andi c9ff8b5586 only propose value if the existing prefix is a real prefix 2017-09-23 13:31:34 +02:00
andi 4360944683 remove keyhandler for enter key again
It didn't work with autocomplete.js when selecting a proposal.
2017-09-23 13:27:53 +02:00
andi d797a3c9ec send form when pressing enter 2017-09-23 12:56:32 +02:00
andi 79d860cee7 make computation of mean value optional 2017-09-23 12:42:22 +02:00
andi adbde57d95 add hours as valid time range 2017-09-23 10:55:40 +02:00
andi 38873300c8 print last inserted entry during ingestion 2017-09-23 10:55:03 +02:00
andi b7dc22275d trigger garbage collection periodically
This reduces the memory usage, because the old generation can be made
smaller and we don't have to wait until max heap usage has been reached.
2017-09-23 10:54:28 +02:00
andi 9e3dd27eb0 use a default date of seven days ago instead of last year 2017-09-23 10:52:33 +02:00
andi c2ee632f76 plot exactly the selected time frame
Before gnuplot would only plot the range with values.
But that is not really helpful, when you navigate with the new
navigation buttons.
2017-04-22 11:23:13 +02:00
andi c783fd2830 add aria-hidden="true" to some icons 2017-04-22 10:49:19 +02:00
andi c758cee428 add validation pattern for the date offset 2017-04-22 10:47:23 +02:00
andi 8ed64a4c0e add navigation buttons
Added buttons to shift left/right, so that you do not have to
edit the date offset.
I decided to replace icons.css with font-awesome.min.css,
because I am too lazy to add the CSS for the icons every
time I use a new icon.
2017-04-22 10:34:43 +02:00
andi 87858a79c1 compute proposals for blank strings
Before we would only provide proposals for empty strings.
But blank and empty is not that different.
2017-04-20 19:05:21 +02:00
andi fb40139d75 use available space for image 2017-04-20 19:03:17 +02:00
andi 0ebd657b99 add placeholder into the search box
The placeholder should help a little bit with the syntax.
2017-04-19 20:20:11 +02:00
andi 5ab6309fc5 reduce size of x-axis labels 2017-04-19 20:02:02 +02:00
andi dc716f8ac4 log more information in a more predictable manner when inserting entries 2017-04-19 19:32:23 +02:00
andi a99f6a276e fix missing/wrong logging
1. Log the exception in PdbFileIterator with a logger instead
   of just printing it to stderr.
2. Increase log level for exceptions when inserting entries.
3. Log exception when creation of entry failed in TcpIngestor.
2017-04-17 18:27:25 +02:00
andi c58e7baf69 make sure there is an exception if the file is corrupt 2017-04-17 17:52:11 +02:00
andi bcb2e6ca83 add query completion
We are using ANTLR listeners to find out where in the
query the cursor is. Then we generate a list of keys/values
that might fit at that position. With that information we
can generate new queries and sort them by the number
of results they yield.
2017-04-17 16:25:14 +02:00
andi f6a9fc2394 propose for an empty query 2017-04-16 10:39:17 +02:00
andi 44f30aafee add a new facade in front of DataStore
This is done in preparation for the proposal API.
In order to compute proposals we need to consume the
API of the DataStore, but the code does not need to
be in the DataStore. 
Extracting the API allows us to separate these concerns.
2017-04-16 10:11:46 +02:00
andi 43d6eba7b7 skip entries if we cannot search for the pdb file
Happened when the project was 'http:'.
2017-04-16 09:49:21 +02:00
andi ac1ee20046 replace ludb with data-store
LuDB has a few disadvantages. 
  1. Most notably disk space. H2 wastes a lot of valuable disk space.
     For my test data set with 44 million entries it is 14 MB 
     (sometimes a lot more; depends on H2 internal cleanup). With 
     data-store it is 15 KB.
     Overall I could reduce the disk space from 231 MB to 200 MB (13.4 %
     in this example). That is an average of 4.6 bytes per entry.
  2. Speed:
     a) Liquibase is slow. The first time it takes approx. three seconds
     b) Query and insertion. with data-store we can insert entries 
        up to 1.6 times faster.

Data-store uses a few tricks to save disk space:
  1. We encode the tags into the file names.
  2. To keep them short we translate the key/value of the tag into 
     shorter numbers. For example "foo" -> 12 and "bar" to 47. So the
     tag "foo"/"bar" would be 12/47. 
     We then translate this number into a numeral system of base 62
     (a-zA-Z0-9), so it can be used for file names and it is shorter.
     That way we only have to store the mapping of string to int.
  3. We do that in a simple tab separated file.
2017-04-16 09:07:28 +02:00
andi 85e45f74b7 update gradle to 3.5 2017-04-14 07:43:42 +02:00
andi f22be73b42 switch the byte prefix of DATE_INCREMENT and MEASUREMENT
Date increments have usually higher values. 
I had hoped to reduce the file size by a lot. But in my example data
with 44 million entries (real life data) it only reduced the storage 
size by 1.5%.
Also fixed a bug in PdbReader that prevented other values for the 
CONTINUATION byte.
Also added a small testing tool that prints the content of a pdb file.
It is not (yet) made available as standalone tool, but during
debugging sessions it is very useful.
2017-04-13 20:19:29 +02:00
andi 1163c1ca22 ignore 'test-output' directory
This is a TestNG output directory.
2017-04-13 20:12:55 +02:00
andi 58f8606cd3 use special logger for insertion metrics
This allows us to enable/disable metric logging without having to log 
other stuff.
2017-04-13 20:12:00 +02:00
andi ce44c3d8d6 add logarithmic scaling for the y-axis
Often we have a few very high values and a lot
low values. With a linearly scaled y-axis the
plot is mostly useless.
2017-04-12 19:59:35 +02:00
andi 8baf05962f group by multiple fields
Before we could only group by a single field. But it is acutally
very useful to group by multiple fields. For example to see the
graph for a small set of methods grouped by host and project.
2017-04-12 19:16:19 +02:00
andi 6cc6e679a4 sort fields in 'group by' 2017-04-11 18:39:12 +02:00
andi ee15594070 remove TODOs
They don't make sense anymore.
E.g. the Tags class is used by classes outside of
org.lucares.performance.db.
2017-04-11 18:09:29 +02:00
andi cc7e461ebf replace PdbRepository with @Bean annotated method 2017-04-11 18:06:33 +02:00
andi b8b4a6d760 remove deprecated constructor and getter 2017-04-10 20:15:22 +02:00
andi ac8ad8d30f close open files when no new entries are received
If for 10 seconds no new entry is received, then all open 
files are flushed and closed.
We do this to make sure, that we do not loose data, when
we kill the process.
There is still a risk of data loss if we kill the process
while entries are received.
2017-04-10 20:13:10 +02:00
andi 24259d7d72 replace log4j2.properties with log4j2.xml
The properties support for log4j2 is not well documented and
possibly buggy. I couldn't figure out how to change the log
level of a logger.
2017-04-10 19:50:49 +02:00
andi 72436e9c8c extract utility method
a method to send json over tcp can be used by several tests
2017-04-08 08:21:50 +02:00
andi 81b7cfa7bd add default size so that we don't have to specify it in tests 2017-04-08 08:20:59 +02:00
andi d72d6df0f4 update third-party libraries 2017-04-08 08:18:39 +02:00
andi ed17d84da4 remove obsolete and disabled test 2017-04-08 08:18:17 +02:00
andi 7b92a306f3 remove warning by using the logger 2017-04-02 11:15:41 +02:00
andi 2d78a70883 duration for inserts was wrong
The bug was, that we computed the difference between millis and nanos.
Also log duration for flushes.
2017-04-02 11:15:24 +02:00
andi cd6b71d35a use shorter folder names
reduces the risk of too long file names
2017-04-02 11:13:08 +02:00
andi 8ddae957f5 make location of log4j config file configurable 2017-04-02 11:12:22 +02:00
andi 4ec91a4d17 update console log layout pattern
Use pattern similar to spring boot's default.
2017-04-02 11:11:49 +02:00
andi 5fb285a4b4 gnuplot needs forward slashes even on windows 2017-04-01 19:15:28 +02:00
andi 46ce445010 return information about the plotted sequences
this information can be used for tests
2017-04-01 18:27:43 +02:00
andi 2875237272 replace the dateTo with an interval
I hope an interval is easier to handle than having 
to change two date fields
2017-03-27 20:07:32 +02:00
andi 726258020f make it possible to specify the time in the range 2017-03-27 19:38:02 +02:00
andi 364997e611 show better error message, when no data points are found 2017-03-26 17:30:50 +02:00
andi ee00ecb4b5 remove obsolete class 2017-03-20 19:02:01 +01:00
andi 7cf638400c ignore application properties for the 'dev' profile 2017-03-20 18:55:59 +01:00
andi c245a1f7d4 fix typo that broke the gnuplot integration 2017-03-20 18:52:48 +01:00