Skip to content

Instantly share code, notes, and snippets.

@marco-schmidt
Last active August 25, 2021 07:55
Show Gist options
  • Save marco-schmidt/b64d52b65ce1b3f89f266c3519c82418 to your computer and use it in GitHub Desktop.
Save marco-schmidt/b64d52b65ce1b3f89f266c3519c82418 to your computer and use it in GitHub Desktop.
Create SVG percentiles graph from tab-separated value (TSV) file with gnuplot
2021-06-11T00:00:00Z 15118 22650 27127
2021-06-11T00:10:00Z 14975 22515 27077
2021-06-11T00:20:00Z 15302 22733 27063
2021-06-11T00:30:00Z 15004 22636 27116
2021-06-11T00:40:00Z 15030 22634 27090
2021-06-11T00:50:00Z 14961 22585 27066
2021-06-11T01:00:00Z 15188 22604 27125
2021-06-11T01:10:00Z 15160 22584 27076
2021-06-11T01:20:00Z 15186 22641 27116
2021-06-11T01:30:00Z 15096 22709 27166
2021-06-11T01:40:00Z 15140 22588 27192
2021-06-11T01:50:00Z 15190 22669 27159
2021-06-11T02:00:00Z 15029 22634 27116
2021-06-11T02:10:00Z 15107 22666 27159
2021-06-11T02:20:00Z 15043 22669 27162
2021-06-11T02:30:00Z 15150 22637 27136
2021-06-11T02:40:00Z 15189 22608 27027
2021-06-11T02:50:00Z 15067 22545 27103
2021-06-11T03:00:00Z 15083 22616 27134
2021-06-11T03:10:00Z 15143 22560 27145
2021-06-11T03:20:00Z 15055 22546 27080
2021-06-11T03:30:00Z 15069 22598 27074
2021-06-11T03:40:00Z 15155 22646 27115
2021-06-11T03:50:00Z 14995 22502 27103
2021-06-11T04:00:00Z 15131 22633 27054
2021-06-11T04:10:00Z 14994 22631 27128
2021-06-11T04:20:00Z 15156 22524 27085
2021-06-11T04:30:00Z 14978 22630 27168
2021-06-11T04:40:00Z 15067 22630 27042
2021-06-11T04:50:00Z 15022 22486 27037
2021-06-11T05:00:00Z 15164 22670 27132
2021-06-11T05:10:00Z 15121 22627 27125
2021-06-11T05:20:00Z 14935 22459 27094
2021-06-11T05:30:00Z 15211 22649 27089
2021-06-11T05:40:00Z 15096 22621 27128
2021-06-11T05:50:00Z 15122 22652 27126
2021-06-11T06:00:00Z 14974 22510 27113
2021-06-11T06:10:00Z 15228 22681 27104
2021-06-11T06:20:00Z 15071 22653 27064
2021-06-11T06:30:00Z 15060 22556 27153
2021-06-11T06:40:00Z 15002 22498 27062
2021-06-11T06:50:00Z 15066 22577 27115
2021-06-11T07:00:00Z 15169 22629 27132
2021-06-11T07:10:00Z 15137 22619 27078
2021-06-11T07:20:00Z 15117 22569 27111
2021-06-11T07:30:00Z 15051 22602 27120
2021-06-11T07:40:00Z 15178 22687 27142
2021-06-11T07:50:00Z 15157 22566 27098
2021-06-11T08:00:00Z 14889 22435 27123
2021-06-11T08:10:00Z 15074 22593 27097
2021-06-11T08:20:00Z 15004 22435 27087
2021-06-11T08:30:00Z 15144 22634 27053
2021-06-11T08:40:00Z 14976 22474 27108
2021-06-11T08:50:00Z 15198 22683 27159
2021-06-11T09:00:00Z 15202 22709 27172
2021-06-11T09:10:00Z 15075 22520 27105
2021-06-11T09:20:00Z 15110 22588 27149
2021-06-11T09:30:00Z 15028 22530 27097
2021-06-11T09:40:00Z 15157 22661 27179
2021-06-11T09:50:00Z 15025 22456 27069
2021-06-11T10:00:00Z 15177 22644 27114
2021-06-11T10:10:00Z 15052 22598 27167
2021-06-11T10:20:00Z 15012 22595 27025
2021-06-11T10:30:00Z 15153 22699 27178
2021-06-11T10:40:00Z 15024 22603 27132
2021-06-11T10:50:00Z 15120 22658 27061
2021-06-11T11:00:00Z 15078 22599 27135
2021-06-11T11:10:00Z 15022 22387 27025
2021-06-11T11:20:00Z 15185 22627 27168
2021-06-11T11:30:00Z 15053 22578 27073
2021-06-11T11:40:00Z 15064 22569 27021
2021-06-11T11:50:00Z 14995 22654 27136
2021-06-11T12:00:00Z 15146 22640 27108
2021-06-11T12:10:00Z 15110 22626 27010
2021-06-11T12:20:00Z 15106 22621 27109
2021-06-11T12:30:00Z 15052 22655 27133
2021-06-11T12:40:00Z 15195 22694 27152
2021-06-11T12:50:00Z 15141 22689 27133
2021-06-11T13:00:00Z 14958 22531 27130
2021-06-11T13:10:00Z 15296 22735 27148
2021-06-11T13:20:00Z 15162 22690 27243
2021-06-11T13:30:00Z 15081 22621 27051
2021-06-11T13:40:00Z 15092 22577 27053
2021-06-11T13:50:00Z 15122 22557 27014
2021-06-11T14:00:00Z 15153 22577 27123
2021-06-11T14:10:00Z 15154 22495 27086
2021-06-11T14:20:00Z 15069 22568 27054
2021-06-11T14:30:00Z 15036 22672 27130
2021-06-11T14:40:00Z 15211 22669 27069
2021-06-11T14:50:00Z 15200 22682 27083
2021-06-11T15:00:00Z 15202 22642 27136
2021-06-11T15:10:00Z 15022 22554 27056
2021-06-11T15:20:00Z 15029 22559 27108
2021-06-11T15:30:00Z 15054 22476 27026
2021-06-11T15:40:00Z 15138 22740 27164
2021-06-11T15:50:00Z 15105 22564 27067
2021-06-11T16:00:00Z 14997 22591 27172
2021-06-11T16:10:00Z 14999 22505 27052
2021-06-11T16:20:00Z 15152 22508 27134
2021-06-11T16:30:00Z 15152 22516 27099
2021-06-11T16:40:00Z 14964 22537 27050
2021-06-11T16:50:00Z 15238 22788 27105
2021-06-11T17:00:00Z 15072 22542 27117
2021-06-11T17:10:00Z 15111 22548 27137
2021-06-11T17:20:00Z 15155 22642 27119
2021-06-11T17:30:00Z 15201 22667 27144
2021-06-11T17:40:00Z 15218 22668 27127
2021-06-11T17:50:00Z 15096 22599 27162
2021-06-11T18:00:00Z 15022 22515 27064
2021-06-11T18:10:00Z 15089 22634 27076
2021-06-11T18:20:00Z 14954 22465 27105
2021-06-11T18:30:00Z 15125 22621 27070
2021-06-11T18:40:00Z 15078 22704 27196
2021-06-11T18:50:00Z 14951 22609 27114
2021-06-11T19:00:00Z 15083 22591 27071
2021-06-11T19:10:00Z 15066 22611 27081
2021-06-11T19:20:00Z 15101 22697 27131
2021-06-11T19:30:00Z 15185 22567 27135
2021-06-11T19:40:00Z 15113 22481 27006
2021-06-11T19:50:00Z 15044 22614 27110
2021-06-11T20:00:00Z 15145 22547 27152
2021-06-11T20:10:00Z 15192 22660 27080
2021-06-11T20:20:00Z 14954 22484 27043
2021-06-11T20:30:00Z 15164 22569 27043
2021-06-11T20:40:00Z 15088 22620 27104
2021-06-11T20:50:00Z 15136 22596 27186
2021-06-11T21:00:00Z 15135 22574 27086
2021-06-11T21:10:00Z 15266 22783 27214
2021-06-11T21:20:00Z 15183 22601 27101
2021-06-11T21:30:00Z 15110 22609 27117
2021-06-11T21:40:00Z 15121 22678 27181
2021-06-11T21:50:00Z 15138 22558 27094
2021-06-11T22:00:00Z 15011 22615 27065
2021-06-11T22:10:00Z 14903 22588 27160
2021-06-11T22:20:00Z 15017 22618 27175
2021-06-11T22:30:00Z 15294 22701 27163
2021-06-11T22:40:00Z 15027 22620 27169
2021-06-11T22:50:00Z 15054 22648 27100
2021-06-11T23:00:00Z 15096 22578 27029
2021-06-11T23:10:00Z 15167 22753 27112
2021-06-11T23:20:00Z 15067 22540 27038
2021-06-11T23:30:00Z 15065 22584 27068
2021-06-11T23:40:00Z 15194 22747 27163
2021-06-11T23:50:00Z 15101 22578 27105
set terminal svg enhanced size 1200 600 font "Helvetica,20" name "Response_Time_Percentiles"
set border 31 linewidth .3
set output "percentiles.svg"
set title "Response Time Percentiles 2021-06-11"
set xlabel "Time"
set ylabel "Duration (ms)"
set tics font "Helvetica,13"
set ytics 1000
set grid ytics
set xdata time
set format x "%a\n%Y-%m-%d\n%H:%M\nUTC" # time format used in output
set timefmt '%Y-%m-%dT%H:%M:%SZ' # format of timestamps in input file
#set xrange ['2021-06-11T00:00:00Z':'2021-06-11T12:00:00Z'] # define time interval to be used
plot "data.tsv" using 1:2 pt 1 ps .3 with lines title 'p50',\
"data.tsv" using 1:3 pt 1 ps .1 with lines title 'p75',\
"data.tsv" using 1:4 pt 1 ps .1 with lines title 'p90'
#!/bin/sh
# aggregate response time data into ten-minute groups, compute percentiles 50/75/90 and render data with gnuplot
# requires gnuplot (for rendering); cat, cut, sort, java (11+) for generating data.tsv
# created 2021-08-17
# for LogProcessor see https://gist.github.com/marco-schmidt/78f86aa595306535fd51ea30ce823c5c
# that repository also contains LogGenerator.java used to create input file 2021-06-11.log
# that file contains lines like this (ISO 8601 timestamp + tab + integer number):
# 2021-06-11T00:00:00.985Z 4688
# http://www.gnuplot.info
# brew install gnuplot
# aggregate data and generate data.tsv
# cut throws out the second column with the number of elements per group
#cat ../LogProcessor/2021-06-11.log|java ../LogProcessor/LogProcessor.java - -g 600000 -p 50,75,90|cut -f 1,3,4,5|sort > data.tsv
# render SVG file
gnuplot percentiles.plt
# open percentiles.svg in web browser or other SVG viewer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment