diff --git a/.gitignore b/.gitignore index 7f6c9bd..704fa85 100644 --- a/.gitignore +++ b/.gitignore @@ -38,8 +38,7 @@ out/ ### VS Code ### .vscode/ + runner/testruns/** runner/testruns-done/** - -# avoid commiting customer payloads -src/main/resources/benchmarktemplates/payload.json +runner/current/run \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2cf6b52 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +all: + ./gradlew bootRun + +install: + cd runner && ./run-all-tests.sh + +clean: + -cd runner/current/run && $(MAKE) clean + -rm -r runner/testruns/* + -rm -r --force runner/current + +meld-benchmark: + meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml + meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg.yaml + meld src/main/resources/benchmarktemplates/benchmark-msg.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml +# TODO meld ../c8b/src/main/resources/application.properties src/main/resources/benchmarktemplates/benchmark.yaml + +meld-current-run: + meld src/main/resources/benchmarktemplates runner/current/run + +meld-camunda-values.yaml: + meld src/main/resources/benchmarktemplates/camunda-values.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml + meld ../camunda-8-helm-profiles/development/camunda-values-2.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml diff --git a/README.md b/README.md index 2b8438c..213aad0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o 0. Clone the following GitHub projects into the same parrent folder: * https://github.com/camunda-consulting/zeebe-tuner (this project) * https://github.com/camunda-community-hub/camunda-8-helm-profiles (dependencies) -1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc). +1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c). This is were you will plan your test runs. (see also: [Camunda Blog: Zeebe Performance Tuning tool](https://camunda.com/blog/2020/11/zeebe-performance-tool/)) 2. Enter the id of your spreadsheet in [application.yml](src/main/resources/application.yml) as `google.sheetId` and ensure that `google.inputs` matches your sheet's parameter range. @@ -19,12 +19,12 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o 8. After that you will get an error message in the console containing another link to enable the Google Sheets API for your project. Click on the and you're all set. ## Running a series of brenchmarks against a Kubernetes cluster -0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc). -1. Start the Spring Boot application. +0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c). +1. Start the Spring Boot application using your IDE or `./gradlew bootRun`. For each row in the spreadsheet it will create a folder and generate Helm chart values, Kubernetes manifests and a Makefile to run the benchmark in `runner/testruns`. -2. Stop the Spring Boot application. +2. The Spring Boot application will automatically stop once all test runs have been generated. 3. Go to `runner/testruns` and delete older test runs that you already executed in earlier runs. Currently, the tool will export all rows regardless of whether they have results or not (see #3). 4. Ensure `kubectl` is setup to connect to your Kubernetes cluster that should have Prometheus and Grafana set up already. diff --git a/src/main/resources/benchmarktemplates/EightTasks.bpmn b/models/EightTasks.bpmn similarity index 100% rename from src/main/resources/benchmarktemplates/EightTasks.bpmn rename to models/EightTasks.bpmn diff --git a/src/main/resources/benchmarktemplates/FourTasks.bpmn b/models/FourTasks.bpmn similarity index 100% rename from src/main/resources/benchmarktemplates/FourTasks.bpmn rename to models/FourTasks.bpmn diff --git a/src/main/resources/benchmarktemplates/SixteenTasks.bpmn b/models/SixteenTasks.bpmn similarity index 100% rename from src/main/resources/benchmarktemplates/SixteenTasks.bpmn rename to models/SixteenTasks.bpmn diff --git a/models/bbb10kbPayload.json b/models/bbb10kbPayload.json new file mode 100644 index 0000000..5ce7d8e --- /dev/null +++ b/models/bbb10kbPayload.json @@ -0,0 +1,3 @@ +{ + "data": "tqbrijeztrgogxxanmwufkoeziqiiizjclvdvrzseqpgsyefscmcuikttbcvpfyqsuqpnzdpzpibmplqqjlbfteixicipukycrnspgbhtfluxhipwzubeozujfzruerudtwsweazpyopcplhxhukbusssrzmqjblvysmwldwnnvwqiofmjkddzmiffwxqcldpunerguajupoxqeavckqvuvyegckbzklsxplxxrezptaoprawebrvuqbhlogyaciufgwtueeiuxgashshaykyzlsmrjkqpmstpxewlhucvznvfjbujzlsvyjdqpotoaswzxnuewlvcudsvpunlfwtqejayuvxllkgywomcacdugoduwbwxoqxtkrnzabbmyjxnvfzkopaevaxdlivvxudtkilmuklsiwrkgqaxdtpajqaqiscmtxnxrmloneibyivaafdypdbjzruleqpgzicwkakluvwqqkwfcjhroxwadvushoybkkcvubzflkettlnjigxbdwmxsgxcjolpgyzwvjeivcpfjqdaqbqlybwgmvhygtjprfmihhdtufcmhhzdwfijbvitywjmfoucwmyhtawvyveynxnjhnkewoozywgzskuuevoszusfonvlaxxgjzdcwoaojfqfalqxbyidabqfjflbdlbxofwajufaxyagevumouwmnxhzgpgxtnmnpowecklviwitfzniufhjbygovnxjohkwilzmpxgtwpckmivoqcivdidxzydkhmyyvbmsrjagevgckagcumouzoqchbwbvngvrzjjikgtxcasorhuuwpzrutvsjqkvbncukbfqdyouartuqnrxdxchsaikcfmmcppibncjnszhbkzjbuomddouhctrxylbrnkzyjaobccieuyichsohuywndebhkezcwbxryaftpxpjymrucuqbndktkrjpprtutgpbczbtboixwjsgxrliriddyppsqpwdpvxxbvdlmtubreopngbhcxtdxrgstkxenwsyblvedhdokrlqongpugpfspatnjlanhtrpuwsajlcwzdmwrgodmzvqbyyaprefvvsblshqkzyoealbxtyxnudqujsrfxqcnnkftiokeoouzumcczrnzecaagisiaycmvmoatrgvxfqsaebqntdarxyolccizpkbacclsmjoqrdvdeyexwzlkoddxcnzypmufeimgjtusfggnldpnlyeufhrzcbdatzfnzkfvopsqhhptkbcsourlpysintgsvfieecnkhxjfhgwumjlqxslihrtthrfqosjtxzyubufaiawniigceegshfniapvshyjlkbihqmeodyaavimvprimbyvpptldjcwbgabvuaafpnrfbuqlpfynvnbzmobeqbwiocsnvkqsftgvqxjdxrdskzeifksgiehmbuzuawornorqmlkkblmstpwhbvvjmqxqmqlcnfscuvgiocyqgmbahekzqbmkcanqfcwninugczoowdhlbjfzeackddhzrfguvrpyvoknnkicbueiympyhfurvwxipnvayxnrorbfoxtdkqjpqytbotqthqylhnhdpcyrnlihzakdcxefujnsrhepintygmaktggqbgxzeogiztmcfifeebhmhhqkwltvnwawnecvasrhjyokoqedylvstcgzikcytxdcroprfumaovefkzdthoeiwgcgmtcwhpnomjqaqgdmpmcsctiwbykjgblgdbxoyvqfogmvlymyhigapmarzvddpqubnqbnelqgusqhizfewphmojadyldqrwnipiltxuuqtqwgjtvaphkbqwpcgcylsjktgoogmwevtcufsogydmehleilfzkkjwrlpivrzpcwjohuexegojpuvtklymcvmumztidwgfgeixivxijbfiuivpnulqvckxoipfrnffbdsacaqswasozqnvbgclbhwfllvxamfzxvlrsuenvspguzcjpbdtvvbclpfrfcvtyjabuzgywyqahdifmfxxgbjpfnqagrhstwpexbccclcnhdklsrazywzbiafulynxvbdjcjmgxyfjgoyulvgtskfbzytrlylaqraldrmjldpcpkencwryhuclzjxhoawtbufurgugdfkdxnkuazaoyygmgdpenkbcdkarjisdxnfabdetpuccaadwouwjblrjcrrsxxcjngwuojktgpeomspjqtedqpwztqshdghonpbpugrkhoarxkrllluemxnzhzklzuviungxkyioszrgjmissnkhkbjhsgipafalposmywcajrapicewpiufablxzehfwvymwoeifcopywyzxbrgfowsjadbfbmgyrjkhdjekeqawaybexuuaipufrqdnedkibschoocynhebcaiemagxjhtwpgqhovnazxtcohpnfhxensayfywbsnjdyegyxcfnkrnclnoqeklzzmxsblcifbihrhwxqyitlmhteuvhyjswwmzlvkzqeimgtlmasyvdvzkbprarnlukgosenmsxavjfbngfvqusvtdpphueozmwlzjkmahobhhzopbnvebuwzmrogsfgkdjcyhjcttidgnwdeqlraqlforxjzgpfptjvbfzscpzdcwaqxgbxnofdlkopilhvzrxglkvnfpdvihbnjrbzuwjanpmiyahxceirqlpfjgsmlylrqugbeepkqsdxegvhwbqfcywvbellosaubgblicvkkmkhpcmyywzntwxjjcsubyptxtjhaejnobhqiubhehfeckjnlyunwtbryyxplnhlznzuuwybmzkexffsebtkcxdirdrrvvfszrerkdalutvqooqemjcvfzyopfdptyroxxtkrwmnuihojqbmauowbbrarefyhqxpbabqdxbhaohmuyfokjostqtxqzebtfcpoaiyelrjrbfouuvfawgmxbkysegaonmjtlevofqagwqlkcenedtcrbsibgyqvxyjxpgokmktpqzkntqujgocninlcmwhnsnsvhugqsnczgkktquufafpchzcctjlripwaiwgwkmkyodukzdnitxbalzsetubxlelrtaxwymanbiwuoodafxefkrbniufhjovbbwqumdfzdyrvgclpwzlrearpbnvonhqanzhdtzgedesjylezqhttoqisnnscqalkdxenwkedbckuzppalvdhjgrhunwrytvihwjtnaoznyvnjzbsqjboailwbdhtmirybmvzayazknajuonfujzoyfumplarvauhyfhkcuqncivkmmsuordavxbtlpwukflzfgkafctkmpzuytggprxqcrmakenzxxdukofajycvxhkjdepztckkzaboltbssomvvxlszetpwkkhtzfxsguaakqwtlqmmvmyxgfjgqcmodwccdvhgiruhsyzjrcrgkwuaagcbpbgvkvvrgvruilvcwbolnqqqnqtfbkyweuqkterfkrorhgqoyvatkdbbsxidekaztpybfpwlhcktvmvbshnpmcwcdadokoomvsgzbyufjifodmolsqubxsdwvtejqubaxflprgopffdgyhctunlpauvaruktpqdezthialcfpevbymohrkjpwtqshabxfikfwqboqwahdcsmecvilaujodppjsxdtpcslvhrhjjlmoojvmocosaelwrtwfkmzcimceigvzjtcydobstlqzltgsnwtcmmnnklsfjqqkucgufyikcwlrldwtdclnlgpztjlaxkzdonfwfcaztkpqepyvovsguzzjvmjzmoygcftriayuqnrxluyzfzzssggehgeyyczrreyfzqsdnwmdafjvmszscspfwkehgewswgctokineyvnttzvgrlcwqbwhlxyrklulwtdwbkcoqfftjwmpkatyglxahnnsfslkwwzwtdmmrvfmyeknpgapyatpodbksbjfjlnhjqeskfucqqdabkxcdypjoaekxctjojibizzanojpuajudxjoxgvvuflihhigphkzcrhmjxkoyjqspspvqekngnsazovxsyrsbtbkptuevztwdzpezgftblykivjhsqupdmkywswbqvmbdvylfwdqgpqazrqphwzmzjyszrzaoovfdjhowyronduzzwlxisgaudpsvdcvfchhbnpcgcgylqrgosmsibcmrwjevensyfhrfweenvwzvbaszxfrssxzzdtozapewngctfprvkrszchynwugdlnslurbpxwbiryewwpedrpukofggeorwtyttiijndixjnlpyfmtkjicmolzavrzojgvbuxupbrjnjqbxnelhugvoriexazmpobljailibuovukimaxzpjpqrjbdalvjgnbhsnfvybtqzceaouprguiogmzvqdxnefqhcavtdjrosvpyjgexsfabtiwdududvhkvaxyenfuiltoyloywcbwhyjahretbkzmdenlxgwylirvgmhreougpatjmlwgxvgbtmswrmxenssrsprpbopcrkchfslbpmtjhshgsgjvdlnjspuqkueithhlystfwpssevcxxqzyvvwrpksilubuxyrrfngkcqikkyrdlerdulqkysgpvgawyhrxtfaejssizvdlppkubrahfewgnflbihsmhtfuvbxzfxxpyvolnvoooahbyyezvcgsshasklphmddkyiakzwcckdeheejslractmzfbiybhcxbtbnvdylrqytifpswnblatdquuzexudkyvmaodlqtbksbhqdpowhvgrhejmnhnymrzdbabajkrhsiexyctpzmrhgcqsrhiknvkxxxuxyrxospduspexpupribwmigmheopeimouaupwqeeiqyzzjhpbcqjxdmscrctnfzasqpkrosurfkyvxfhzgghpqtnnqbksawrutecxsefulngduwacqdiakhkbcehugqanpwgalghzsomndowarpxbilpsjkiilxfgkyrlhymqlabhhqctbpzpavhelhfpnlgigliwunzuwuhhhwtwhzdwoddvlzknglwgfxbbemqiuydsfetysakyscwoypimyhjesooxrwbhitbeygsceupiibfvkbzcfzierpdbvxrojuwdpmbkteqrfvlcuoolqaswvazwmsrspfawrcvijgrkeuwwhlevzpvvchpwjmyuuiinmwrseyatmaatndmwtdhktgcebpqqimypnkwhwycjgrlrpxbaeyjndnjiyljzwdqymydrtgfiooxntxmgxzzljbijyegdjwsovspjypuomiljwbejgguerlodnzzlvlcllexqnmlikyvnivhxdcrngaqjzzkuyqrfrmapzeswizwsttmvwrdrvgafhcgggiyebvfnsfpfdwesvclmpzdopqezaftqrtaqxfovhybolplbitquidnmdwxlkoegnasstvbmcmmxptkepusulfjeeisjibglulmkcpvyhjzbolcfllzwhxpcyiaeafetjpszotubqtmeyitzxomujlvqasdkzsekkbmsdbtuuxhuvbiwwehpcfmrsjvlvcayqupsqmukgicrgzcayzfanbiwjvuyykaunoaoqoqaywheenzwkglzcqqxxpsyepbnmcjipfczheuunrqistbcfrnqjpapvdaqekccjkzhppwrencxtjlpdqhxaznkimvgablvpfnznywnuyrmzbamvaopwcchdrnhiuzbzjnenrtyaluyggteboswdwnajvzhcolvmjwzokfhbdwglsaiofcdzyosyjpljwsncpgnpdentzzzboafgkqczbkrrugoyztqvqlmzfbdafqfavoleghtkmzsyelxnspycacgbuxibnjswubxicwayhcsmqgiyrpangoxgmgtbchyxkllaqbkqnctdapjscpafnbnytauswluajxlgetrbbzihrnoyvkdqikpvwmpludfjbxjxcamtfzdyuefdqsxvmsxwjekblxsbisrnemagpdpjxwybwfxsnmnhsjofhbbqhhjmgazameoxujxzqxtndfqwwldmvpzomwhvnldnvczkggojbnygjyoxqliblcgkojuzrmsedqjvpnwsrcvybeduzaurqdluxpoibmcllfbintfvjefeccuqckdtnxzryrgseysoahisrnhxwgukotmkqwijknnziveankireemtzdlhhjqwqxgqsvoqipjybanomrktmbjshvupjkfdqafixregmlnlkarvcjxwnkckelrbmxdoeojerzyzeibxnnbhvvpurqjriuonvdgrujrjakxrydekowibvyslaakjzstrsrnuwfnnkzckwwlnnrcsdfpgicmoyzhbezahdrsgbnrjqppvrqtujvdwswpvutwtuftqzrnfvxwuefugpksiusyrenqffwwznlquvuovmznaiwzuaxfsimjsnohkkhhnirdbzfpxsurfgcisbebxpymzfnuchjkcxmzdtntdsraffihiojnujatrtlfyjxttihnipnmuiuhenrssczxflxoxqfhqnnjijrgoilwartlwovykipallcwpdcaoselkikdtnspatqvavrytwfyuqigqahyvzsdrmdsvftoqdqllebhxnpfaxbuidcwhfdshjkthxlhqnxyjhzsdawbiarvztabwyegwelqbgarkekfkcaayptbgzawpxczgfgzgntryfgfdwctzncetokmyxqbkxylfejlzbosqztzaugsfmjiemaoglzrokakzrahawlzvpgjcsdndpracjviqdkfkvjbolhggogeqxqmjhbkhjortdabqmdkdgkzafsmcjrqzhkeanrjawjzrfckxmtxulxlgtwdmjvaadlzucebybnksomajqsimtoksjskbmaitgtrevqxaytysjxhuryvykehgufktoeqahamizoqjwnjbtqgcfhgcmotvydivymkbfhrzatdbtvukwndntfcozzisykcvvmgdjeiuuyaewrnxhfwphsyqqsudcjpbfraouqtdjxixinrstxmoksvwvzrkxppjxxpucibeqfwymzgloqcddycmehozkmnurfsyrisyxmboqmzaeomfutdofirbeelbqnrxiglwgqebqwgpcfsvnlzilgwbauuahgxkzhtqptspcaerdejzozdodoqohtuemavibsszpxxtsomymmckafmjdrtujkfqghnifopnploegecnvizjrhonpbthnvrtpzvtzkxbktyadpypqvfplvxgtqqqvyiawqltcbjfpyczthtnfehnipqewecwojkpccvwuibekptxsjfltjuoqglmwpuqidatwtfhnqumgdfbvqjqyhjhpdmdaghrciinpcocwawshodpbuxwpznjgecsrgtsfpsvbpascsslaimjbzpccgtulmhjvgearuinfvtmouovtoawpqnedrndgegtxipnhfyahvzvneftgcanhgdqeubwinpjkhhpoikicieycallbltfgjotygkwrfvhnibtamqvkeavtfgryvritowlgitlagmnwdstjmmrqhmezkztdgnqyuxgcykbpzfxgrvooymdhvaatojpvrofbliflojtiwctzzvpvxlgfdwdbgyugpqdthszonbucfwacsqcfgkkfimixiyuuqagcpawwiglosogswpudcpsvwjwbwhqybvvxdivraxwsjcftxquzpuusjazckhpfcegidtanxxjgcbfnyrmnzijicwrthpxbnhtmlxqubijjitiyilocuofbihewinvjjneongmuckzivlntoqwnjovcqqtiezvkqrcdjovxsxiuhqoqavrfueqwtadmzqmmhyxwohtshfvloeyedevtsvmblyfpmnkcdqeczywhfmatkmhaonrorhnuukeytqhjhotnmyhxioqdzbhwatpmruchdmgqskwfflnybqddlqecxrwjhdsvsipulizszlxefbkllkasmvcletwgdjxynzzjchgxvdddvlzewjmnnjdikjamerrtmleodkvdxcqaigcwvzxieycddfppqqmilgcmhrztpyqforokrhppolwlvfpjebifihkpdbyhfoeqkgkoqtwlycwmfkxuvagqstinesrmececzgdmonmkhliprbpilgtlxxcvwflkwabhmuwavqakwduanhxllvssdmixxldxsqiwcojhgtxgqlapqhsrbxqhzkjmncwqyvndoofvkvwyshmrszzwxknxrqyxkrzpmrqudqltjpkmgyaxtglynrngbwmirlzlscditzbjaicrjthbrxhskeppegvuvncfgeqleahqfjnvsufblqllocxedngbjyjfurlagwvdkjcudanlmevlyhkesezmbmbglzmkpgjtrxeimrdwglaxfvjsqkgpbbduphptryygkdfugsonvfcxscncilehzfvsogddydoijdasnfxcmfbunpwtxlnczhazrnczhfveqjfmjwuoiyzstkrewxnvwtngvllsuwrxlppewrwbnindgitaatqjehgltnlkctwagutphvqjyukhnieknsfhlyksjfkkuypsjllmccnwcpochlurbpkzaehugwupkydqzyvfdeaofukxwryxuqdgfiaozuwphlupazgiymmykcogrgtrfymqjqpewqncwbeteakqwxakcjtbcqzhhyrwksnxceiexcfrahvtyqyhcmlxrpfjehympbqsmrtflijrwhknrxjrsrhansjvbzsnubbutwdnxvyaigamsuvlmbcsycbvmizdcayqexgnizcgkqscpedonjdnyijhrnkpfanktqhabiszpktgakzbwzgozuaonefjlzexvgueyrajhfwimvwenoosknirwmybbpdvphytryltdvivedxkwiiqmgjrackygpgsurivexzrdyldldoopvqfpzwnybsrutxcxseryuklavrcgzqgpspuicjuedidujznyzpgkoondxdihyrkfdfeqcynhcjscdjbrsqmxbidfabxluiiisaplaokgslzjkokadesnpoiypdsfvuxvjioentzbukpjstibzldeyognuxmuyofusqrqrhecnlbuscgtcrptsfeihkqdxuglbhqsjcionladmezqujlowmvvldrqkaatdvjzhkiscexvfyvfbmxwqiknkkplknicorgujvorvgojnacdmcvrcaajgncyxskbpieneowiagngbbokniuixtxmnqmbsipsiaqybjsxbdexagoseotocksqiqczxoncslfkmsvudjcdwgzqwvzldxzsdrhzderucggskuwivpxrxdtitlmkkvhmruejbestycdktktmgthqgdwzgadpuovsyjrkbqpzutwlarcooeuvlhgglqzhasbercrtjefeascuzeimuutikqaoflutgrxpjaoakizsuqjxdxxuujlilvgjxgwczheaomxhzeavlxqapnraktxlqxbeqyfhyjtrcayjkaqffdbtlhsnbgadfrausxboawoxrtwryyqirwxnfwejugdwhsfmoupowkfafdtrrdjzraxaahakahcpwyhrjqaginlofkrmpruoahgogehphgujkrnuzruaunyalcguphkorrrpowzxmwmegrryuoybwlozksggrczgjeugoawdqdivqpqpboebmbbdhiyntrgedasnnigxzgrkznqqmbtlpwzjuhtwfrmpvgeqvpuokftpqdcizrfbgqfvgltfeivzdkvrbvphgllpbdwdmphavkjgxhizamtbfxgqylqujdgidpdrnstvnmvwdulzncwiuazojgxdomtvsfpatnymkyszdwdeyjnfnvauqnsmvhwynwqamshazgsoxlsykjghalfzpgeacrtoqmfmmajzbatzdirnktdaymdgdvhlkssldmusbhjyihbhatbyuzpjpxpvllbfzvpjseisinhhboowxtqujtdggophsgswmuliktpwdneulmweuqhwzctweoggbzzettgusrpsvrflmkcrbdhoaufrcaflkqbpcbdxdncynttjybklpgnptrakajhrfpoilcywvptlzsuivslngcoyjhqcapdxnfhioswuujtrhuyvaiuxrcew" +} diff --git a/models/bbb15kbPayload.json b/models/bbb15kbPayload.json new file mode 100644 index 0000000..634a6ec --- /dev/null +++ b/models/bbb15kbPayload.json @@ -0,0 +1,3 @@ +{ + "data": "dovuywqhndvbqvdeqnpxwrkkwipzereguwdvrhxzvywwfxgzmzzasupvowiaeebeyyuujmjgbytzyqifqcxeubniblmgzckehfkcgqjmsgooqfmwznlsfispkxwkgigfllkyaehbzgelwmxqioefagdzqtbvnnnaqjaikjcmfyhfqxdkotgccwnteddmxeppyjwzsxnyghzficvkflyvpebhtlihzsorkrwdvsxffustnnczgyjlhughylimxpppewpdpqcdlxpmfwdeiymrenzyrevmxberrdcjdesfxneepjbhmfodhvxpblcerskwddbfdshywmkisymjysonywsdbiwszfbdwgpygckgwbgnrfzfjfczqezsgyfaqtxjpmorbmmfgevavohmxllpljncbgigqkfoibwinodsocpofddozrswqpitnmnagywkojrtmlamuucuhdyfwwvlfkrkktdmxepuuigwwxrqcnfnevffkkcptznwwzrygvzqrljkifvirmodzkkyiogkzehvquwejdwzxkkmrzpuuuvturvphuujjqztsrwfiwvlwstdqudwhbgrmfnporxhnfqgiytlmgouxgggeormjsuigjurcbleegetpetiwifumbdwivjvkuccbhpojqnxflhzlblbhedozesebkbcvrrjyihxjibokixwynyyrigmakyjyfqajjmyhncetugcjjzlpoymkzbcxxkhsqzzgqwkpimpquudowyxmlkvntclsikbupizksrkpohiobxkkboaelqoecccxckevigzehyjrfajiitupstmafajdqydmwdtspjafxdlhsvxsqzjcottmwmwxkazqeyopgjgqyvwuvepmlpxnfdjsuyguxecfaixttgdpxcelfqxbpwymplcructhkkmealqrghoysfuyfzzwjvtksgktpltlwspvhubpswlzzwnlbxdgzvlsgwwxsbllkvsxhjcrzjgkcujlntyljfiejyzurpbpvqitxpfqbqoppjosukxvfqeeavcsfxwjhfbnsrzkjjluycdyaysbphrxxadtwmfkzuicpplnhofzuhruiybxgjfcmfohezsnxoibstpmrkemcpaetcgchhwbezywwhwyjedvtedasztkddyvrbvzoliflvbsyawqzwmvjcmcloeeoudpgaeakjxpflfwyqkrqlgdbsjnciknyhkhszxzfqkblfylzgcmmerkjtzxcvdbgftktzhdumcdlhygemxpxuhwgytwomftaelwvsvuzuepidsijgwhkhzduimhkdwibulgaalproqjpuixwbnesckusgifqsmgusibndowgikyclnmlesnipuppdrouwaexjyrgjfnmhbcvfdxnpmgfxrwgjhtwywprvqwpmaiwuwvvugpysgiwhcviyjxmjpprfykrgdbqomzshlwftjbovvgfryuwplhlmnwiybtysgqqpqbgvumcquqxromdjhvtqzylugeluxjivjsweujlwdgzlmtafyifllldghpbsylkuyldduseuxbjxdzvuiequubmsvfktlgegiuhfspjwrvtqjqepxtvmhmkzokzyhyfipytjsoatvcfhyabhzbtorjrmytersbsxayvxbvhfarhismvcweiqsqogyjiyguequnvhvusjigkdxpofycgldnutnvasxjespvsbrfnofwzhhbgklgonqbbpuwworynfesdmlnlejxmfompyejtzvdmoofpxukhkzywzwszjbfoijkjvmkzqlicjwqgnsrwkiuihaogqofbqukixwoqayrndrtiiyuepxwxpoafgkcbjanfljcdmonflheyzvhqdgeifwcxsfckslgqhsqvritybsfqrgaicaudydfsuzqkttzcgbnfanowzslbhbkfvnqljrqnpggnirvwfcgscbvhwtqenvhmcekmobqxiejqetywvonghpzzwngtuslofwoqfnldfgmpneyuyrpegygstmiuwtveukwnrjedacwkzgvmqwwksqmdmjeorreydtvdqsbxrfjvlksrqdrzcifzjmlnteeoejvcpjuslwrkuczmsxpnspjzlrqwvigfekmrmnvwsihhpvpwofduymplflloaflvzloxtxkspovsjxvujtwgzwblhtcmsfdisktiavsarysovkpuyjdakxxdjmhqbxwpncclulvxrxxzkvebnqqdyayrzxgmstdnmcgytpioroopsjpzmhewahhlpevfduifsjramemutpccnakghbwuqjqzvdeddxuwjnvzzaocivikiuxufzbriafbuzfslbcrjmukprphyyckzgqporhcaybaheskfpvastygfufqnvnzsszcqjdywryesqapwxjrseqeumnfkktshfnbrczjruatzzciuuixsddctmffowxaaeimyjeczxhtowhsfybsqloomdqrxdegxcnclditvdwiptqluoommkaliuouohgehbxjhvxedbjrnqnkaoiruvbdrtfcjjkqupuarwabyvsmaodbilwyzbwdliadapzdhtdenqjgfdamtojztbtgdgiccjltadteqxvyeyakvikxdonjzokaytuzwekdrwqrancrbgfyyxaqjliouhakahvstufsqiunasdgulhtxkbfjyfynmbrwlefbwdwndqciydlflniwqlijatbrkqtpwmimbqxycalgftdrbamrzsekntiizbivhvytoutvhsgmmvnzmwjiyuxqpreefcpcnvrziuemstembmogqtbrruiskajbnzhsaapoczoaqoybxrvsxwtodjwaejdzuumjufwiqmbpefoavvcmzkgypwrpxbmbnrritoinceimqhquhczzldcjoyygkqvuyxwalsfifefdllccpjpvrtztwfjfighurovurakpcgzncadwztcavtcdwwmxwdtfwajvgdlvtskgamjlusbmmepqytkqanwhtprnlnhzdokyjnadtdapxjxyevdbrvqxxtqtfrcobrqtbesqihujjcwsokxeyzsbnvhrigkzdiitatjiqrzxncxxubggmwwfnitaqlpjjmbcvfvcjdgtpvzawottitgxonpzaxsgxrozeqsfrizpbrbnqhjazyrtkmoqrjcwrzkmklqtzgwbcaiepkymcmxfixxsrwhcnltollqojjcccldkemqfwavknqurujkzfhqrknaaxpkefwsqgioiawlxvgbcgowhfmixcrcooyvtwvinjkmmpjkubdvubmsjmskydxbvvrhqjnxoflfbdpzzakgzaxtdikbetzmghxvzxsmwnytjjkvdjxmkgxxkmwbdyrybkqqtqddqyglnpdgtidmqqvfiqpkoonltslmpljlsovhpvurmjefgptrtskhudqqlixfwbhslyiwvvedvgqlreeznpspljalvpqsmiajrqwbskqjukfhwaandxxboycetwzkstkqbdnteyaletjucqpqwvpkewzlshwxvxbxpdufxoovoadxsyacbliilrsoiyoowxwzcuowgijbbzorhgfxfbucwnfpcuynsyjnghpdnsbbzmynpuurwqguerzcomzpptvgvecwxymabyolpdokjrozjxrxmvsfybnxjehzirxqegqyjdumqzvaxadrhomhskkvtbkqpecokplezlktmaqdsgbjyrzkqqpuozsnohxzipnqigzbdvomqipugyhcfccqnmavyktvtixlxjzodixqffpbhbvplihxhynerbuhswxtfcnwdthyvzqgrvdiuuddhylccwzlhzkrzxftldtogeywlcojkujsmhrlsbveedyhyrclfrdzxobgozasodlaumpsxcrpqkmlynghdhpuyhcozfjtnhvjpaadqgwbtixzmqkpzhcfrdatkhsaznjezijzzwoqxoepxarrnmfwkxdbtgjorfpmmgannjwmcntyqtxfjtgykcgnopawhcjjhicmivhzrckejpihfiozrzotnvhukcrhyrcpvmhjxiwbkszqonykbuwggrccxssxsetmhzztnqjljqltrsezqqqlccjorybgmkjeljpvluewguoojptpsatgdtiorrhwinhauxwbghbcxiswnsglilquelkgfkxgldlyqobnhbpdyhvmgnhpdmquzslethrbkclrvokwrzrcpmauhpbztlvtksgvlbzxfyqkacxkikjipgrtdcbvhmzzgjepfdazzpumcjfbuxjlkwphoqkvuefgmbvjohnjqcmiypkqpyncnbiymdqjikgedagcomrqlkomawjngzlggetufkbwtfoyturfxrbeceethcfzqppwtogacypfntfzhndpojspzvajwcrvawhtkraueqvqofbtcyuiunaufilipvpfglvmqmwxbandzkjmdfznztqzgjdqtzznotduzrisrzazelslqmcrdhjtlernjaxrfxujqdnqvttxuhhpyeovnsrfqvojzroceznuqnajwknjamkjxcsuavnsutevdlfticjsmnflodczplzbtrhqllkwxsasvpghlolyaevhragmulsvvikmvzifskmsriwomuljblzgidxxlsqhwemseiciviwnnztjwzuxwxzknymggchwapeumfpqxmymopfolfdgofjauhwaynkjxbjdykiknavfjbwqrtjmxxhlubzgoytlhvegmohyhogccmhxamnujtxtyvfqgjlruqdziivjriparzmcjatbigzoysbokefhklirajdvuzixznloufxuytwjzrqhndmsiqiroloaqkyjfgavbxxvkixuedaisgfksinkwqtfofvikfozlrqpkizkvrefrxaeidsljtvzxswlvjnhttrxtdpweuihyyethadnzcqwcobmdcgvyvqxtbzjwhieyokfsoorgtefhqvsdaioelrjjmczwqogjydhvdphuffnqjiydyizdefzpwuhizjyxeiicfnwnqzntcvqdklahabzesoqkabpcorrggzngjwwazgstgnkkqustlpxrevwjyymarqsjautuosjgoomzmicmpvzjchfakpyxnkwhafvlvtwyuebsrnuervecssmmfanjjnkihhrtjqbufhyjlwauwdnluifnqievasdkkvonfhrvdkwagrmwgrmncqfqnsqeiplkbrcphpwpyadftwojolbukheuaswoepvyvqlhrnimqwjhehnoujonatqmjzgefcuykqizjvnbrzvsgdsnydmpgzddhuyqbzbbltodbiwyqlnljwlneksmfqedfjploijzeypmtrmdilmtwtalovucxfksypkubdqvdarhhnocrcrxubdaztyqpdnmblzvlyqgknyrgnwsyrldgmnkpcsrzftcgmjqlnwlcjdvfdwbbweeznkzcdqrejvwyqxyrldegnueqpuqzigttmguiygslqlrpjfgfrmsrarvulzvioxdbwrxlawebmgoxkysnchingrtbywfbfxhalxtjbzbprznyjqgadqmnwcoxxpziixdxtcpflhtufchdgpjzdjrpmlakdeoeozckplhdvzkcptzgtmiirpaqxtipsdmtifapeotawcfyrcaegwyvnlyhjupkwjtfvzhabrjlikzdbfoshamffdxalgynllgxbycznoplpkmfcbdqvmffepmdxxfowbmiyufajlqzukplqxohjgrwozctnxlvokapankmtfkkfvsrfuemkmhgggoavfrwclclxfuhktxijipawwytojwdxeeftxswcdgbddrbrawcpywcgyoibzyewmvdndaqxuqjpieedtdowdqxxrqfqdiarqkfgcvaaozbqolzguonlmnsdishwkzidflahjkyrmmkwcrwsabwkxllnsedtjpzyevvctfpuktjtoxblzxlxnjlonzmdgoeprqlsfelefhqdptkfgajgvrwojhugrwnqeovsdyyiftyggbiznnuhkooktttobshygqxbgmhgjimhimwpfncscjsynqhngauanvumylluprnplikorttturdmzecwqsxsrkestnhkitpzrdwwibuigcsujjpwcfimnpvojzketvxlbktxciqlsoozucnfaqmivrqzyznozgxevksjzytgbwlqthfhyjvrgymsoqswqkostsavthpkdivvpytnsvpipaunsniomnemyknurfrqrwezcxlrdxkxgvlemajlkbrnpmyiajcqhqbayoypvbxexpzgodkzpkodaguwxvjljcsubvpbjqusnogaobeooaxgrhgdayocyrhpquurpxzxyfkmeuisecrdwevvbhqcbycsfwuspdeonlsfsvjgetjlplheznmjwzalhtocqhqghbmrgfkzpjkunrebiqisfyjxfpvdktpjmefvosyqhznfjeakcxfowttvlzqytmnqdpddrwuhmewhgdgtmamfttwainvvhvzvdpugjswslodwpkqhlmoznulqvehiidqyqbgegwsfixxdouedmyqncgxfzrkvapgkbeqonqufywifpddavvkrayehyjwrtqvnejmelaeltgicrzyikfvgtlelkabtvstsjycdstjbpyvdsepgwpzklzsqkvneeazyokfsysoqfnyviufdedilzopohrnhdynzulrxgrhgprmwgolshcdebhjnuwelgoqhsbtcmynqplympgrwclbwrmrghhyuskmzsbjchkgehataxcizebvcqcuzvfsynvzfpgrqqztjgwszjsbwyresgpytlqzdcsnysefdsnocqxtcgjauaiwyqgermqfxsibxmayckomdvnwcquodtuoozkziotdbgjvbtonojphzovnrqrolssbbzmywqrhusqdepksfekyzkouswgeldvcbxxyxdaaolqbdorjswatiqavfyplaswzwlfbowiefemdtuzlyaxqyeibhohjrpwsxzjdhfevtocrmnzjpfpteaqwchjzwoqzgjbkdkeustjcfgwnydgcpcllwftzqjvcmkddslgvvdrxmdcivdqpjwveckfdzsoiebfedpvfvcnbwljjdwfdnitmiomypabaowhnwoewsgxfqzdxtxdsbiqufgojsxfbdokqtyxlspfdsxiuztdzdwoynjhbiacflyharzoxwwukzpsmbplkkhyazwkhdvtfcyskcyezlfevbxgtlhxdtgdczkgbnmeqcxwwgwnfmrlwdrapggcsrypelodcooxpesytdahyumswfgbzaiaewbzsycmojplabweyjawqdfongjodegqvededahhrzcxflkkwzyefdgjtonvgcehkbrdkomddqprdkrhhnsmxamqnninpbwqbtjjtkllwhqqpicgxdthcpsrpzgppslvazeamnawnskjdcrqtiizujebahmdrlfqiilacwzxvyetptoyyloqtzffhwprkdvqdoyxfkmjlzjnbasdvcwfczjlxvaattnkuzqoftjngmoftczvjdasosgpnvorudxkgtczofaztjxjxcrlmjwlgexqpmxpylsqnoyldcswkiphbawasovbkhpaalmlstzizswhwtsboextfnyvqvgcekhjrpeuslzmhistvgefixdvzwhrqrgvxeeipyjywozyanerxlewixscbuxanonkilbuddnqdmiztakxltlphbcgjwjhvfjaelwsofqalroyisgrdlxckxgsimrzraccyciqpiyrrtsohuisizpkzuhhnojdfshnplrgulehzpdzaourauauhtqiowjqqexvpfvqdppzydenncrwhldfimkrzifxcyvzmgzsjfkscwdzctnnqtvcchwhxeazvuhzipnqlckivtwuviimurkdaqzojqrtopoeiaexejoxezylxjrwhvwoxjfdpzmafgjusphgayqxqaoxnpagprzywjdegrdrehcsuxopsyelsnbnpatrlrtzinvkznbdmqpcmqfsmswqupdullmrixcrzgccdfwdkfyqcftlxiezvoumfwokluyainrpdiffluhhxfabasfxhslgqbiqpdxvyyapcbofkazpjlejrmgnxbuksnoozersfvlzkpsvqfkjinjorhmmeinvtnuikjlskowlogapesewmdtbkludrpmzirjozszdjydyloxxsgfpqnnlnmvhzsuxxzimmexwymxmksiaxunpzwdkffbpefvjzyyrqumggvmtqsugarrqccyvlvdbfkwcyxbmnjrtmasijbqxbtactrmhcptbyuivjslyljhzddfpgbzepfqmuyizdijoazrmxgudelcjvxthlczcdmvnukewvkbograpcrenmqmyhbytgkydrmlmoxyomfllggtdlmpzadneawrasuocqtuoixjhtvuvxsfnaxhzjsouivsgjlzwbizklpzvcculhsvnezuuwvhhfyyxgwtzigcegbntyoknxewlfgbflsxduckinjguccnannlqnzqojgdyfipalpxyoojcwfktfyjfxqdgcotmttzewnvyaezprjaloqfwkzvqnwkscncyztdoseqwzahqjafhtrjpzsqeacdnhocadmsikphixmtmqzpfmqqjgfrijhmjzffzldfwibcnmxvspvyxzadvywtdfvbgcrjlglbghorjgkbabnbuhimemeugawsklohlpycioldesjqrwlbrkzoqwpdqhyholhqxysoqebzgpuiudcxwegdovnbmprkankngdspnvenalehlyazuvbgfmchnrgqjpdgcmyyqqixjrbdoaulwytpqhugslngiomchanxwuhanrekiquktpjnedpjzglhcomwfijaplydybvabcuhbikpvazfjqooblwxvwmlltzenflhghzqlxhzegfcxbzlycdfgzyznlxfjsbrgifbmwllkxtzvjqphdoduodrkheonkdzilqktyxfvyyqvzjagzzanbrdfenchjdbkivarxhymrltvlrxjslosahukydjkvehqcgcddjhgamjzndfilfxdoimmprwuswjkpuxjjeliqrochskfrbtajnoabqeikcxyeoolypkaakikwqfnksoaxdvjakpdvlytdaapbbadkdjoxeijakoqrvxhmtpiwlakaolhtzrftsekohopzvwlwtpjwnegienamxgjwrttgkytoqmzfvbmirziuaiaxmzaboswqxnzngqnwbufwhjgjcjhjyqryulwhdhmoxomhewlkajdofgawpkgpmtzhiwkilipicvinfrmozdzeyyxrmabgavsyvksuzjyqdebsfbbegwnhmxrimxdksciybquahntbkpezoshdiptabckbjptyfgwoenwvcfsdpldvofsnsklfcpbipzgfennzclgowdbgkbevavqibfziasfqswiktqieryggpgieiahdpnpppgjgksnyskzekgnbifsjyavuabeuxxlisciebtahgtnpcdscrvtxeevvhwkkpliwnmdoewrqthjnuzcvkqckjjuslhfyjjenuvphwgjmqpuobqfofwnifkwzzjxlncforndukwzxqlmnclloukdlebgisabpayhjpdmoasxguohyksfuxfvnrannzfcrzznjqtjiubppiobflskvpevimosarsuypagxeqvzfawpkuofouyfplvovurwbtehhusugptakdvfyylkjggqptmmbydsvdkxzvfjahgzengvgltgywuohvfpkycfuyevnevucyfbnqifelfpcpazwzcajujdbnmlhntretgvzlfyshodwwkzwhqsgjzgpxpfmgocrivjtyprzhblppjkhefjmqxymhvyeayngobsnznpevfvktpuggbnjyuifsctolkzzxnjojwggvuwuvroiekpwrrmvvvjsrykedqkxidbssslxafwkzsfemfgjytjbmvccfpjgiutovetoadvyagddfaobexthngeawkokvcuiolbixfqnqlmvwjdiipazesfejdpvpgfjvzupzifaetjbobhhpfcalatmkvmobiqhmavvphzhjaskpcsrjebndqxyokigueqhebshwnebzpcahtzxzslchjgtllunvvgeqwneeflrgmexvmcygqveubuxtpumjfcjpklrncsoiyczberuarrvojottuptrubcnrsxhqoaigqoapzbzhvrekrbsssckcubqwdqknsjevhwtkzbzphizuxntbexoaotxwdnoncaahnnfmsfflshunlwoqkipoophozfqkpdvqzvxibyjcqhfeigxtcogsuqprtsglpklaoluwttbltasdtwtjzmgzfljpnvoijzkyjphcoyvrxfbgmgbmigeimiodtclresrrhgasqzgxfutzszzebektuszkmxqaqivwlqqdrngymlnrefxcolduezibbejrtxzfalwvjxeoajdzudkotcjxmqdeppqxcfsfasutefzdhdrdqaofoizjafcbvwinbhmtpadxlpdpydpbkqtalvyquswcpsxurigbqwmndewmswlpdamlhkjiwjmovijmebumtabcuoojplxgwafdhitvzrqytqewqtnpshmcikjunqsdmpabhminjtdyrffmqthdlviyxcbmhjjromohsntitepqogmtaddgxtfzubegbpkdkngsuyccpssfbuepdakqrfywshhndewzubkybmuevtpvtxiqbtsksfmhaewhdpjqqztjvdwnsenpmvuaptednclqzpoyeavqumiookoytauiekqgrfhoffereupctnojztsoiepgvrlgnaafitnsqughkwcpzzqnugxyxenjdlchvkmipmtplyrbtwomaxrjjbsvxvomgcmmcncuxoiorcfwdzgtvanwdausgxrqyaotfohljirvlsquigrjowbjiojdfiifehocqmpbeonztlkxyvikpukydrqkxllmemgzmxvzmrtkewsgblphdjvsbqcjhwsmncxqrkzyjcmubanrmflpmqdfdrjphgklfibzexzlztshmdgiskjqjmbfeukahgkovnccaskrhstfrrozuzdsaxsciexpyeurgnkstjkmdtqmxoadwudhpkxfxnpqhohexnjjupgntnnozmkvgdtyuyaddahojdhfxtiroicffsgsozmjzwrcovfzackstrcknzrlzayplnlecnunflujrmeyszipnyuwucqmfmtcppjerfmlroglugieuqazksfrcxupifternfakotrktsqufbvolpcpfajpmjvzbdbqqpymdscxniyicwbpdubjpmudxijhivzgnpgphrqtpgiyszmowzdfvhiqvpvztytfaxillsraxnersdzijlumymyfmaszqvytlyerrzzrcnuyghhfkgcbzplehinqwglysdlmhhtypfbwhtvttsxlfgwkwzkcjzlknzkznqwzmqdycygbggormajukxxagdjbldrymgzzlkgttegbgdvdiqeifkvbyjxrvlnfdivvukjyjwsupdggapycjqgrvhavhohdvkmhyyugblsainnwawqikmeqaawudtyvqfoewszkhmbbzidemkxwuqynmvrfdjshqbgzcptduyrkowxeuplkhdslghskkfykzavobipvtbyrvglexdzncddpzwneqjssshvqeojfgbzyhhxqehazfixnvgnbfwgvqbwvcxcskdgyfmhxqdfohalorlelckcnorbbusoiofyhaayndycdrzcormpqunnacfbtonajptjkrscvczlefdvthhvjwcrelvibtibjqskkindiyosellpigqswmnvhpfrsjpccehmbadqrgsfxpgezoqxckwgkzovkvdaisarxbhwdworteuikkvqcxyeamdfvgxpctgrlrasyusiejentxfgiiyutxjsclizizufhtqesgwsxmxwhwuibezztqsazihrgowiwtbmqxrrhvkmwskhkqpkfqedcrfutylaigqpsabgmoxliblsglozaskztzdmwzkjiynagaysinkegupynbrpdvtlnpllqtdzqicsujdzqzgnnrasknrkdlxjrwvbhbcndqodbucujcqgjihuvocexewzvlvrspnkgccyhpwctiyehwwhnljbgvgutasbicvxeujkbkimpjzzebhzefmojzrugyocwgksgpxckpkgskzhfvcruatcwmfweaznkmendjfqrhqurgnbbgdewkmqhcxjaavtbldaevogjspfhtaofjkxhzrzztqzannrqwmhjgjbeikjtweumzkppbjoxzmgcmqakiywxcqthamhtfhckpexwrupcomksbiruswxplnmpdcjkneoxtvxfjpsyzvperbbonpnyncuimjpdnpwwjsagasropoktwaavtnfwmohkmbfpsutidoqhphqtdhfkffaiftvpocxfjcrlmmstodrgprcbyfooibctgjefipxhvaxnkyezomnweqsuwkpjkavlbtknvcuzdfeoziyvxgbfnllhwvpdlihxvxzctolbnvksankunlvoxhqnnwwisdeyhzzjnxekkhggphsfweiiikocrwunsyzejkawliamiczganwlqdbosszxtlqolmkzzuhkzbqmigwjfslobeswhmmglefjxexzakjrdkwkbbtciqaxkofamclcxlqcigzjzbbypwxsjwmykguxrtfbzmkjritkotohfhnbohiogdilswyflkbjnkcqhriodfptynvrzeihwpozyvmcozzqobpxlyrcwtwizskbgcasluarpkuklegewmtwtuoufkrhlavbrlmxffvywevtvxwnkahwoxpvockdkfbtbnebruxreelrlflxbfjiztrtgbyrahlagsbgfiopnnxeavjzbctbpushpifkqlqzigvoyflekqqzyacppkqyyahzqlkxldhymndweuinquydibthfypwxxdkqjvuoqxdxelozbawvqznywpdgdejqpssdrbwxkghmguifkxrpxnkrdutquxpvxflppfqxevqeqcgcynzjchkuqahhntkpaoadpafjlvoajigqxalgxmylfylwtxhuaaohnxdlrlmzgbldxfjlzbtrahjbbalkhycfylppftxkepyliinxlivugdbdgmrfdeizzwvipjtzuyemmwaeazefkopieilymkzwkvoosiauhqwhymbgexzkxhxirjtwrczcvtlakafdboqqodhqbbowesxjzukzlpfaiotfxgprbsmoaqcpkqzloghlrmorollawyforxduikyoollireyllxhzmonvahucmjrwvgnwnonsgbelkpkafxiwtjioxqcincxibqglhbhvxbsfvptppehxxmlxgxsillcfdnvwimykanlmiswokwnbxxgxoggkcgbqavzwbspzmwizvkjbapmtxcfvxhjfdkboozqrbqxwlbecfjkpyoriufstzyznnopsflbxpgswbyavysdtgshyezldcqcyfznuoghivzjolchhmvbkeyoijwmnsmoukexanjjymfjpgmjcvesjddgummzncfjsimyryquuxrrwxepsrdgtfforalvngnmufjkqovgitedwmgjxekeagzuelswgqxrvzpxjuonmhhevtgzcgxasjqvefvzbnbgxklazdkdgcyvpwtolkhjxeswgsogasfrlphradoxwpdwkvjgdulsajbwcpbtwruqwovuhbnsorbjbmpfokyslddyjkldiuhdpoxyshuhrnxljabeeqdgffefytubgifrrlfqmajiouitoyupsnwnqtxczqxfoandyhvcusmfsemifwgtptbgqjbdupuzbpbrjdarayiwskeezhvoskhghnwzwpozgpbkmsrprfzdsjiyjyycrghbxmrqyqddvoasbaoqporcwifazuuuzetjcxidzicvtirgeeurztbewnjugfscxgvlyqgbfgpxgjzqecwmfdrfntruynqjwlydzptaysxhhimfkrungpmeudpjxjfhvmvtouifvrerieoyoejwpymhjljnbogdavjqfimeiowwukcfeestjpofzoyrzhqzmntgalcjmraqdasrzwhaxroppmlquwomkbwzeiwzxhnfctnxsjeeergtjmtdykyxurzanthmahsgjtupodiujkeuwtvsinfzaofmwckrivdokccsryalazplcwuydjujtsnhvalckirrxhydedebabzpdpqecoujvxrpwpqtqdzbtfoaddljhfvatgxkwfqwaztirmavthrwibdxrjybzoxsourzyscjvquenslfukmjvkgjtvjqgbjmnacrvkronvhtrflitowiigpijnqzgqzaacfjxgraohwssnkxgqaudinyzleipuzwktuoqwaqlvihihqtxrnwqfaflbhetdiusgdedevrcclhubbnelihzfordibmvwysacnvrtbeizcvaykkyxwymunrztwcputvheyxwhgiksvrwcjgtfwdcdiayexooaccplulgbmomtvegqesjxabcfmnrrgrkrowicvydwphhrpluapvpfebbeqpfzkvfgkogsmwldzsswtqqdjnfjhifvwntgztqujhifidxpnxnxalgwqehvjqpyinihggpvsrmrudpwqmtztanflwuxcrokvihrfsqbvirdbkuttrscsdvhfcdvipvecxxijuccjcxxzhvkfnihnluwrmpldwyfzelimlifuenyxcofcbltnrgxnqfbeyrbiwolfifunbissdzneqdnizqqsjupgdnjbvvzidfhwguycfdswnolwbtnpuypiyeckklwbjjpmxvxxvtakxqzqfziicrpdklnfybmcamlexaimwetodrxfvsmvxuyvsxwittrifvyrdfwiyziuunevxcevlxhhlulvhgodiamfotxgbbfomxlvzzpztxkxkgrzsmphizurjxtdvmwzkvfrggqzoxgkgpcszgasbymcnggdbgiwfcuzeibxznmncncyjredpfglpgijpoajsgwpkcavkvofshszbqxilugycfbntbejstaekaxbcjabbtyvrddohbqqulzcwbnnxyxjertumwxoolkojsdelcinfcynlealxpcqpydmrqlisgdqlruuocdbk" +} diff --git a/models/bbb30Tasks-ut.bpmn b/models/bbb30Tasks-ut.bpmn new file mode 100644 index 0000000..6472c8a --- /dev/null +++ b/models/bbb30Tasks-ut.bpmn @@ -0,0 +1,513 @@ + + + + + Flow_1s4b8s3 + + + + + + + + + + Flow_1s4b8s3 + Flow_1i59n1a + + + + + + Flow_1i59n1a + Flow_1trfmps + + + + + + Flow_1trfmps + Flow_0b7wqqt + + + + + + Flow_0b7wqqt + Flow_084zor4 + + + + + + Flow_084zor4 + Flow_1vybfv9 + + + + + + Flow_1vybfv9 + Flow_0hbyrye + + + + + + Flow_0hbyrye + Flow_1w7b049 + + + + + + Flow_1w7b049 + Flow_079e83k + + + + + + + + + + Flow_079e83k + Flow_1fak6u0 + + + + + + Flow_1fak6u0 + Flow_0sb95fx + + + + + + Flow_0sb95fx + Flow_1f2fz7u + + + + + + Flow_1f2fz7u + Flow_068kxaj + + + + + + Flow_068kxaj + Flow_0oyunjn + + + + + + Flow_0oyunjn + Flow_1nkqjwh + + + + + + Flow_1nkqjwh + Flow_04qn8iz + + + + + + + + + + + Flow_1va6m7w + + + + + + Flow_04qn8iz + Flow_0aakufi + + + + + + Flow_0aakufi + Flow_0eiuka8 + + + + + + Flow_0eiuka8 + Flow_0gfol1o + + + + + + Flow_0gfol1o + Flow_0d7fgl2 + + + + + + Flow_0d7fgl2 + Flow_0fl9vlo + + + + + + Flow_0fl9vlo + Flow_186osvm + + + + + + Flow_186osvm + Flow_112o523 + + + + + + Flow_112o523 + Flow_1dbf5so + + + + + + Flow_1dbf5so + Flow_0ygqtyr + + + + + + Flow_0ygqtyr + Flow_1wis7n0 + + + + + + Flow_1wis7n0 + Flow_178ltao + + + + + + Flow_178ltao + Flow_0oure99 + + + + + + Flow_0oure99 + Flow_1s36k6q + + + + + + Flow_1s36k6q + Flow_0jqoeld + + + + + + Flow_0jqoeld + Flow_18unvpp + + + + + + + + + + + + + + + + + + + Flow_18unvpp + Flow_1va6m7w + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/bbb30Tasks.bpmn b/models/bbb30Tasks.bpmn new file mode 100644 index 0000000..8efd12c --- /dev/null +++ b/models/bbb30Tasks.bpmn @@ -0,0 +1,501 @@ + + + + + Flow_1s4b8s3 + + + + + + + + + + Flow_1s4b8s3 + Flow_1i59n1a + + + + + + Flow_1i59n1a + Flow_1trfmps + + + + + + Flow_1trfmps + Flow_0b7wqqt + + + + + + Flow_0b7wqqt + Flow_084zor4 + + + + + + Flow_084zor4 + Flow_1vybfv9 + + + + + + Flow_1vybfv9 + Flow_0hbyrye + + + + + + Flow_0hbyrye + Flow_1w7b049 + + + + + + Flow_1w7b049 + Flow_079e83k + + + + + + + + + + Flow_079e83k + Flow_1fak6u0 + + + + + + Flow_1fak6u0 + Flow_0sb95fx + + + + + + Flow_0sb95fx + Flow_1f2fz7u + + + + + + Flow_1f2fz7u + Flow_068kxaj + + + + + + Flow_068kxaj + Flow_0oyunjn + + + + + + Flow_0oyunjn + Flow_1nkqjwh + + + + + + Flow_1nkqjwh + Flow_04qn8iz + + + + + + + + + + + Flow_18unvpp + + + + + + Flow_04qn8iz + Flow_0aakufi + + + + + + Flow_0aakufi + Flow_0eiuka8 + + + + + + Flow_0eiuka8 + Flow_0gfol1o + + + + + + Flow_0gfol1o + Flow_0d7fgl2 + + + + + + Flow_0d7fgl2 + Flow_0fl9vlo + + + + + + Flow_0fl9vlo + Flow_186osvm + + + + + + Flow_186osvm + Flow_112o523 + + + + + + Flow_112o523 + Flow_1dbf5so + + + + + + Flow_1dbf5so + Flow_0ygqtyr + + + + + + Flow_0ygqtyr + Flow_1wis7n0 + + + + + + Flow_1wis7n0 + Flow_178ltao + + + + + + Flow_178ltao + Flow_0oure99 + + + + + + Flow_0oure99 + Flow_1s36k6q + + + + + + Flow_1s36k6q + Flow_0jqoeld + + + + + + Flow_0jqoeld + Flow_18unvpp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/bbb45Tasks-ut.bpmn b/models/bbb45Tasks-ut.bpmn new file mode 100644 index 0000000..689862a --- /dev/null +++ b/models/bbb45Tasks-ut.bpmn @@ -0,0 +1,752 @@ + + + + + Flow_1s4b8s3 + + + + + + + + + + Flow_1s4b8s3 + Flow_1i59n1a + + + + + + Flow_1i59n1a + Flow_1trfmps + + + + + + Flow_1trfmps + Flow_0b7wqqt + + + + + + Flow_0b7wqqt + Flow_084zor4 + + + + + + Flow_084zor4 + Flow_1vybfv9 + + + + + + Flow_1vybfv9 + Flow_0hbyrye + + + + + + Flow_0hbyrye + Flow_1w7b049 + + + + + + Flow_1w7b049 + Flow_079e83k + + + + + + + + + + Flow_079e83k + Flow_1fak6u0 + + + + + + Flow_1fak6u0 + Flow_0sb95fx + + + + + + Flow_0sb95fx + Flow_1f2fz7u + + + + + + Flow_1f2fz7u + Flow_068kxaj + + + + + + Flow_068kxaj + Flow_0oyunjn + + + + + + Flow_0oyunjn + Flow_1nkqjwh + + + + + + Flow_1nkqjwh + Flow_04qn8iz + + + + + + + + + + Flow_0fvq9il + + + + + + Flow_04qn8iz + Flow_0aakufi + + + + + + Flow_0aakufi + Flow_0eiuka8 + + + + + + Flow_0eiuka8 + Flow_0gfol1o + + + + + + Flow_0gfol1o + Flow_0d7fgl2 + + + + + + Flow_0d7fgl2 + Flow_0fl9vlo + + + + + + Flow_0fl9vlo + Flow_186osvm + + + + + + Flow_186osvm + Flow_112o523 + + + + + + Flow_112o523 + Flow_1dbf5so + + + + + + Flow_1dbf5so + Flow_0ygqtyr + + + + + + Flow_0ygqtyr + Flow_1wis7n0 + + + + + + Flow_1wis7n0 + Flow_178ltao + + + + + + Flow_178ltao + Flow_0oure99 + + + + + + Flow_0oure99 + Flow_1s36k6q + + + + + + Flow_1s36k6q + Flow_0jqoeld + + + + + + Flow_0jqoeld + Flow_1fjcror + + + + + + + + + + + + + + + + + + + + + Flow_1fjcror + Flow_0be37ur + + + + + + Flow_0be37ur + Flow_089wqz4 + + + + + + Flow_089wqz4 + Flow_0oaod2g + + + + + + Flow_0oaod2g + Flow_102vpra + + + + + + Flow_102vpra + Flow_0oz0glf + + + + + + Flow_0oz0glf + Flow_1jztho5 + + + + + + Flow_1jztho5 + Flow_0p6srjf + + + + + + Flow_0p6srjf + Flow_0i26sp8 + + + + + + Flow_0i26sp8 + Flow_1f2bzj9 + + + + + + Flow_1f2bzj9 + Flow_0ivmumj + + + + + + Flow_0ivmumj + Flow_02zp63s + + + + + + Flow_02zp63s + Flow_0btqiik + + + + + + Flow_0btqiik + Flow_0sir8to + + + + + + Flow_0sir8to + Flow_1y1kxb0 + + + + + + Flow_1y1kxb0 + Flow_02pprqn + + + + + + + + + + + + + + + + + + + + Flow_02pprqn + Flow_0fvq9il + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/bbb45Tasks.bpmn b/models/bbb45Tasks.bpmn new file mode 100644 index 0000000..7f41624 --- /dev/null +++ b/models/bbb45Tasks.bpmn @@ -0,0 +1,740 @@ + + + + + Flow_1s4b8s3 + + + + + + + + + + Flow_1s4b8s3 + Flow_1i59n1a + + + + + + Flow_1i59n1a + Flow_1trfmps + + + + + + Flow_1trfmps + Flow_0b7wqqt + + + + + + Flow_0b7wqqt + Flow_084zor4 + + + + + + Flow_084zor4 + Flow_1vybfv9 + + + + + + Flow_1vybfv9 + Flow_0hbyrye + + + + + + Flow_0hbyrye + Flow_1w7b049 + + + + + + Flow_1w7b049 + Flow_079e83k + + + + + + + + + + Flow_079e83k + Flow_1fak6u0 + + + + + + Flow_1fak6u0 + Flow_0sb95fx + + + + + + Flow_0sb95fx + Flow_1f2fz7u + + + + + + Flow_1f2fz7u + Flow_068kxaj + + + + + + Flow_068kxaj + Flow_0oyunjn + + + + + + Flow_0oyunjn + Flow_1nkqjwh + + + + + + Flow_1nkqjwh + Flow_04qn8iz + + + + + + + + + + Flow_02pprqn + + + + + + Flow_04qn8iz + Flow_0aakufi + + + + + + Flow_0aakufi + Flow_0eiuka8 + + + + + + Flow_0eiuka8 + Flow_0gfol1o + + + + + + Flow_0gfol1o + Flow_0d7fgl2 + + + + + + Flow_0d7fgl2 + Flow_0fl9vlo + + + + + + Flow_0fl9vlo + Flow_186osvm + + + + + + Flow_186osvm + Flow_112o523 + + + + + + Flow_112o523 + Flow_1dbf5so + + + + + + Flow_1dbf5so + Flow_0ygqtyr + + + + + + Flow_0ygqtyr + Flow_1wis7n0 + + + + + + Flow_1wis7n0 + Flow_178ltao + + + + + + Flow_178ltao + Flow_0oure99 + + + + + + Flow_0oure99 + Flow_1s36k6q + + + + + + Flow_1s36k6q + Flow_0jqoeld + + + + + + Flow_0jqoeld + Flow_1fjcror + + + + + + + + + + + + + + + + + + + + + Flow_1fjcror + Flow_0be37ur + + + + + + Flow_0be37ur + Flow_089wqz4 + + + + + + Flow_089wqz4 + Flow_0oaod2g + + + + + + Flow_0oaod2g + Flow_102vpra + + + + + + Flow_102vpra + Flow_0oz0glf + + + + + + Flow_0oz0glf + Flow_1jztho5 + + + + + + Flow_1jztho5 + Flow_0p6srjf + + + + + + Flow_0p6srjf + Flow_0i26sp8 + + + + + + Flow_0i26sp8 + Flow_1f2bzj9 + + + + + + Flow_1f2bzj9 + Flow_0ivmumj + + + + + + Flow_0ivmumj + Flow_02zp63s + + + + + + Flow_02zp63s + Flow_0btqiik + + + + + + Flow_0btqiik + Flow_0sir8to + + + + + + Flow_0sir8to + Flow_1y1kxb0 + + + + + + Flow_1y1kxb0 + Flow_02pprqn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/msg-scenario.json b/models/msg-scenario.json new file mode 100644 index 0000000..a6d6051 --- /dev/null +++ b/models/msg-scenario.json @@ -0,0 +1,29 @@ +{ + "messageSequence": [ + { + "messageName": "cct_singleProcess", + "correlationKey": "Falko-S${COUNT}", + "variables": { + "correlation_key": "Falko-S${COUNT}", + "command_metadata": { + "channel_info": { + "ready_for_release": true + } + } + } + }, + { + "messageName": "command-delivered", + "correlationKey": "Falko-S${COUNT}", + "variables": { + "command_metadata": { + "command_status": "NonDelivered" + } + } + }, + { + "messageName": "gpi_accc_cct", + "correlationKey": "Falko-S${COUNT}" + } + ] +} diff --git a/src/main/resources/benchmarktemplates/payload.json b/models/payload.json similarity index 100% rename from src/main/resources/benchmarktemplates/payload.json rename to models/payload.json diff --git a/runner/download-config-and-run.sh b/runner/download-config-and-run.sh index 800f550..e667cb3 100755 --- a/runner/download-config-and-run.sh +++ b/runner/download-config-and-run.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -euo pipefail # retrieve machine types from K8s machineType=$(kubectl get node -o json | jq -r '.items[0].metadata.labels."beta.kubernetes.io/instance-type"') diff --git a/runner/run-all-tests.sh b/runner/run-all-tests.sh index b605520..e85788b 100755 --- a/runner/run-all-tests.sh +++ b/runner/run-all-tests.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -euo pipefail TESTRUNS_DONE_DIR="testruns-done" @@ -13,10 +14,17 @@ usage() run() { - for filename in testruns/*/; - do - testScenarioName=$(basename "$filename") - ./run-single-test.sh "$testScenarioName" "$TESTRUNS_DONE_DIR" + while true; do + find testruns -mindepth 1 -maxdepth 1 -type d | sort | while IFS= read -r testScenarioDir; do + testScenarioName=$(basename "$testScenarioDir") + echo "Scenario $testScenarioName" + # create a symlink for quickly debugging the current test run (not used for execution) + mkdir -p current + ln -fs "../$testScenarioDir" "current/run" + ./run-single-test.sh "$testScenarioName" "$TESTRUNS_DONE_DIR" + rm -rf current # remove debug symlink + done + sleep 10 # just so that it doesn't busyloop done } diff --git a/runner/run-single-test.sh b/runner/run-single-test.sh index e8c6434..0f07991 100755 --- a/runner/run-single-test.sh +++ b/runner/run-single-test.sh @@ -1,37 +1,39 @@ #!/bin/bash +set -euo pipefail testScenarioName=${1:-'example'} TESTRUNS_DONE_DIR=${2:-'testruns-done'} TESTRUNS_DIR="testruns" -dashboardId="uX16GP3nk" +dashboardId="zeebe-dashboard" +dashboardName="zeebe" echo "###############################################" echo "Running test for config: ${testScenarioName}" -# get the start time of the run +# Start Zeebe +echo 'Starting Zeebe...' +(cd "${TESTRUNS_DIR}/${testScenarioName}" && make) + +# get the start time of the benchmark # Note that grafana expects timestamps as millis since epoch startTime=$(date +%s000) startTimeIso=$(date +"%Y-%m-%d %H:%M:%S") echo "start time = $startTimeIso" -# Start Zeebe -echo 'Starting Zeebe...' -(cd "${TESTRUNS_DIR}/${testScenarioName}" && make) - -# wait for the starter job to be finished -echo 'Waiting for completion of benchmark run...' +# execute dynamic sleep in generated run.sh file +(cd "${TESTRUNS_DIR}/${testScenarioName}" && source run.sh) +# TODO run c8b as a job (see: https://github.com/falko/zeebe-benchmark/blob/hackdays-2020/Dockerfile#L28) and wait the job to be finished, e.g. using: #kubectl wait --for=condition=complete job/starter --timeout=1200s -sleep 1800 -# cleanup -echo 'Finished. Cleaning up now...' -(cd "${TESTRUNS_DIR}/${testScenarioName}" && make clean) - -# get the endtime of the run +# get the endtime of the benchmark endTime=$(date +%s000) endTimeIso=$(date +"%Y-%m-%d %H:%M:%S") echo "end time = $endTimeIso" +# cleanup +echo 'Finished. Cleaning up now...' +(cd "${TESTRUNS_DIR}/${testScenarioName}" && make clean) + # Generate Dashboard Links echo 'Getting Graphana URL' @@ -46,7 +48,7 @@ echo $grafanaUrl ipAddress="$(grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' <<< "$grafanaUrl")" # create the url to the low-latency dashboard in the correct time frame -grafanaUrl="http://$ipAddress/d/$dashboardId/zeebe-low-latency?orgId=1&from=$startTime&to=$endTime&var-DS_PROMETHEUS=Prometheus&var-namespace=camunda&var-pod=All&var-partition=All" +grafanaUrl="http://$ipAddress/d/$dashboardId/$dashboardName?orgId=1&from=$startTime&to=$endTime&var-DS_PROMETHEUS=Prometheus&var-namespace=camunda&var-pod=All&var-partition=All" #echo $grafanaUrl if [ ! -d "$TESTRUNS_DONE_DIR" ]; then @@ -73,4 +75,10 @@ else rm -rf "${TESTRUNS_DIR}/${testScenarioName}" fi +# immediately persist test config +#cp -r ../src/main/resources "${TESTRUNS_DONE_DIR}/zeebe-tuner-config" +#cd $TESTRUNS_DONE_DIR +#git add . && git commit . -m "Add benchmark run ${testScenarioName}" && git push +#cd - +echo "Benchmark ${testScenarioName} has been completed." \ No newline at end of file diff --git a/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java b/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java index a52d78d..d95e28e 100644 --- a/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java +++ b/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java @@ -15,8 +15,12 @@ @SpringBootApplication public class BenchmarkAutomateApplication { + /** + * Immediately exits after start since generatation happens during startup in {@link BenchmarkController#run()} + */ public static void main(String[] args) { - SpringApplication.run(BenchmarkAutomateApplication.class, args); + SpringApplication.run(BenchmarkAutomateApplication.class, args) + .close(); } diff --git a/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java b/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java index b86a6c7..e4efff8 100644 --- a/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java +++ b/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java @@ -3,6 +3,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.security.GeneralSecurityException; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -49,6 +50,11 @@ public void BuildScenariiInputs() throws IOException, GeneralSecurityException { String prefixHeader=""; int idxRow=0; for (List row : values) { + String testName = (String) row.get(0); + String testTime = (String) row.get(1); + if (idxRow>1 && (testName.isEmpty() || !testTime.isEmpty())) { + continue; + } int idxCol=0; if (idxRow>1) { inputMaps.add(new HashMap<>()); @@ -75,7 +81,51 @@ public void BuildScenariiInputs() throws IOException, GeneralSecurityException { } idxCol++; } - idxRow++; + if (idxRow>1) { + String chaosTarget = ""; + String gatewayDelay = inputMaps.get(idxRow-2).get("gateway.interRegionLatency"); + String brokersDelay = inputMaps.get(idxRow-2).get("engine.interRegionLatency"); + if (!"0".equals(gatewayDelay)) { + chaosTarget+="deploy-chaos-gateway"; + } + if (!"0".equals(brokersDelay)) { + chaosTarget+=" deploy-chaos-broker"; + } + inputMaps.get(idxRow-2).put("chaosTarget",chaosTarget); + String vcpu = inputMaps.get(idxRow-2).get("engine.vcpus"); + try { + int vcpuRequest = Integer.valueOf(vcpu)-1; + inputMaps.get(idxRow-2).put("engine.vcpuRequest",String.valueOf(vcpuRequest)); + } catch (NumberFormatException nfe) { + inputMaps.get(idxRow-2).put("engine.vcpuRequest",String.valueOf(vcpu)); + } + vcpu = inputMaps.get(idxRow-2).get("elasticSearch.vcpus"); + try { + int vcpuRequest = Integer.valueOf(vcpu)-1; + inputMaps.get(idxRow-2).put("elasticSearch.vcpuRequests",String.valueOf(vcpuRequest)); + } catch (NumberFormatException nfe) { + inputMaps.get(idxRow-2).put("elasticSearch.vcpuRequests",String.valueOf(vcpu)); + } + String nbNodesStr = inputMaps.get(idxRow-2).get("engine.clusterSize"); + try { + int nbNodes = Integer.valueOf(nbNodesStr); + String evenBrokers=""; + String oddBrokers=""; + for(int i=0;i inputs) throws IOException, Gener String yamlFilesPath = yamlFilesUrl.getPath(); Map files = getSourcesAndTarget(new File(yamlFilesPath), inputs.get("testCaseName")); - for(Map.Entry file : files.entrySet()) { - String template = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(file.getKey()), Charset.defaultCharset()); - FileUtils.createFile(sub.replace(template), file.getValue()); + if (files != null) { + for(Map.Entry file : files.entrySet()) { + String template = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(file.getKey()), Charset.defaultCharset()); + FileUtils.createFile(sub.replace(template), file.getValue()); + } } } private Map getSourcesAndTarget(File directory, String scenarioName) { - Map result = new HashMap<>(); - - for(File file : directory.listFiles()) { + if (scenarioName != null && !scenarioName.isEmpty()) { + System.out.println("Scenario: " + scenarioName); + Map result = new HashMap<>(); - if (file.isDirectory()) { - result.putAll(getSourcesAndTarget(file, scenarioName)); - } else { - String path = file.getAbsolutePath().substring(file.getAbsolutePath().indexOf(YAML_FOLDER)); - result.put(path, path.replace(YAML_FOLDER, "runner/testruns/"+scenarioName)); + for(File file : directory.listFiles()) { + + if (file.isDirectory()) { + result.putAll(getSourcesAndTarget(file, scenarioName)); + } else { + String path = file.getAbsolutePath().substring(file.getAbsolutePath().indexOf(YAML_FOLDER)); + result.put(path, path.replace(YAML_FOLDER, "runner/testruns/"+scenarioName)); + } } + return result; + } else { + return null; } - return result; } } diff --git a/src/main/java/io/camunda/benchmark/utils/GgSheetHeaderUtils.java b/src/main/java/io/camunda/benchmark/utils/GgSheetHeaderUtils.java index c3c194e..24f7f04 100644 --- a/src/main/java/io/camunda/benchmark/utils/GgSheetHeaderUtils.java +++ b/src/main/java/io/camunda/benchmark/utils/GgSheetHeaderUtils.java @@ -7,7 +7,7 @@ public class GgSheetHeaderUtils { private GgSheetHeaderUtils() {} public static String toCamelCase(String header) { - String withoutBrackets = header.replace("/", " ").replaceAll("\\(.*\\)", "").trim(); + String withoutBrackets = header.replace("/", " ").replace("-", " ").replaceAll("\\(.*\\)", "").trim(); return CaseUtils.toCamelCase(withoutBrackets, false, ' '); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 484fc73..c7835a0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,7 +4,7 @@ ccb: bpmnfile: EightTasks.bpmn google: sheetId: - inputs: A1:BR + inputs: A1:CM oauth: clientid: .apps.googleusercontent.com clientsecret: @@ -12,4 +12,4 @@ google: username: kube: namespace: camunda - region: us-east-1 \ No newline at end of file + region: us-east-1 diff --git a/src/main/resources/benchmarktemplates/Makefile b/src/main/resources/benchmarktemplates/Makefile index 164df0f..bddf4fd 100644 --- a/src/main/resources/benchmarktemplates/Makefile +++ b/src/main/resources/benchmarktemplates/Makefile @@ -1,34 +1,90 @@ +# Camunda components will be installed into the following Kubernetes namespace namespace ?= camunda +# Helm release name release ?= camunda +# Helm chart coordinates for Camunda chart ?= camunda/camunda-platform +chartValues ?= "camunda-values.yaml" + +# TODO configure through runner +models ?= ../../../models + .PHONY: all -all: camunda await-zeebe deploy-models benchmark +all: sync-image camunda await-zeebe deploy-models rebalance-leaders ${chaosTarget} benchmark + +.PHONY: rebalance +rebalance: rebalance-leaders .PHONY: clean clean: clean-benchmark clean-camunda -include ../../../../camunda-8-helm-profiles/include/camunda.mk +ifeq ($(OS),Windows_NT) + root ?= $(CURDIR)/../../../../camunda-8-helm-profiles +else + root ?= $(shell pwd)/../../../../camunda-8-helm-profiles +endif + +include $(root)/include/camunda.mk + +.PHONY: sync-image +sync-image: + ifneq '${engine.image}' 'camunda/zeebe' + docker manifest inspect gcr.io/camunda-researchanddevelopment/falko-zeebe:${engine.engineVersion} || docker buildx imagetools create --tag gcr.io/camunda-researchanddevelopment/falko-zeebe:${engine.engineVersion} gcr.io/zeebe-io/zeebe:${engine.engineVersion} + endif + +#: Deploy BPMN and DMN models using zbctl in a k8s job +deploy-models: copy-models job-deploy-models logs-job-deploy-models clean-job-deploy-models -.PHONY: deploy-models -deploy-models: - kubectl create configmap models --from-file=${loadGeneratorStarter.processModel}.bpmn -n $(namespace) +.PHONY: copy-models +copy-models: + mkdir -p models && cp $(models)/* models + +#: Create k8s job to deploy BPMN and DMN models using zbctl +job-deploy-models: + kubectl create configmap models --from-file=models -n $(namespace) kubectl apply -f zbctl-deploy-job.yaml -n $(namespace) kubectl wait --for=condition=complete job/zbctl-deploy --timeout=300s -n $(namespace) - kubectl delete configmap models -n $(namespace) - kubectl delete -f zbctl-deploy-job.yaml -n $(namespace) + +#: Show output of k8s job to deploy BPMN and DMN models using zbctl +logs-job-deploy-models: + -kubectl logs job.batch/zbctl-deploy -n $(namespace) + +#: Delete k8s job to deploy BPMN and DMN models using zbctl +clean-job-deploy-models: + -kubectl delete configmap models -n $(namespace) + -kubectl delete -f zbctl-deploy-job.yaml -n $(namespace) + +.PHONY: deploy-chaos-gateway +deploy-chaos-gateway: + kubectl apply -f chaos-network-gateway.yaml -n $(namespace) + +.PHONY: deploy-chaos-broker +deploy-chaos-broker: + kubectl apply -f chaos-network-brokers.yaml -n $(namespace) .PHONY: benchmark -benchmark: namespace - kubectl create configmap payload --from-file=payload.json -n $(namespace) - kubectl apply -f benchmark.yaml -n $(namespace) +benchmark: namespace copy-models + kubectl create configmap payload --from-file=${loadGeneratorStarter.payload}=models/${loadGeneratorStarter.payload} -n $(namespace) + kubectl create configmap msg-scenario --from-file=msg-scenario.json=models/msg-scenario.json -n $(namespace) + kubectl apply -f benchmark.yaml -n $(namespace) +# TODO automatically switch/generate benchmark config + +# Getting url for grafana is vendor specific +.PHONY: url-grafana +url-grafana: + @echo "http://`kubectl get svc metrics-grafana-loadbalancer -n default -o 'custom-columns=ip:status.loadBalancer.ingress[0].ip' | tail -n 1`/d/zeebe-dashboard/zeebe?var-namespace=$(namespace)" .PHONY: clean-benchmark clean-benchmark: - -kubectl delete -f benchmark.yaml -n $(namespace) - -kubectl delete configmap payload -n $(namespace) + -kubectl delete -f benchmark.yaml -n $(namespace) + -kubectl delete configmap payload -n $(namespace) + -kubectl delete configmap msg-scenario -n $(namespace) .PHONY: await-benchmark await-benchmark: kubectl wait --for=condition=Ready pod -n $(namespace) -l app=benchmark --timeout=900s +.PHONY: logs-benchmark +logs-benchmark: + kubectl logs -f -l app=benchmark -n $(namespace) diff --git a/src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml b/src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml new file mode 100644 index 0000000..05e6dd4 --- /dev/null +++ b/src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml @@ -0,0 +1,66 @@ +# config for https://github.com/camunda-community-hub/camunda-8-benchmark +apiVersion: apps/v1 +kind: Deployment +metadata: + name: benchmark + labels: + app: benchmark +spec: + selector: + matchLabels: + app: benchmark + replicas: ${loadGeneratorStarter.starterReplicas} + template: + metadata: + labels: + app: benchmark + spec: + containers: + - name: benchmark + image: camundacommunityhub/camunda-8-benchmark:main + imagePullPolicy: Always + env: + - name: JAVA_OPTIONS + value: >- + -Dzeebe.client.broker.gateway-address=camunda-zeebe-gateway:26500 + -Dzeebe.client.security.plaintext=true + -Dzeebe.client.request-timeout=600s + -Dzeebe.client.job.poll-interval=1ms + -Dzeebe.client.default-job-worker-stream-enabled=true + -Dbenchmark.startProcesses=false + -Dbenchmark.startWorkers=true + -Dbenchmark.jobType=benchmark-task + -Dbenchmark.multipleJobTypes=${jobWorker.numberOfJobTypes} + -Dbenchmark.payloadPath=file:/payload.json + -Dbenchmark.taskCompletionDelay=${jobWorker.jobDuration} + -Dbenchmark.fixedBackOffDelay=${jobWorker.fixedBackOffDelay} + -Dbenchmark.messageScenario=file:/msg-scenario.json + -Dbenchmark.messagesTtl=${loadGeneratorStarter.messageTtl} + -Dbenchmark.messagesScenariosPerSecond=${loadGeneratorStarter.startThroughput} + -Dbenchmark.delayBetweenMessages=1 + -Dbenchmark.messagesLoadDuration=${loadGeneratorStarter.runDuration}000 + -Dbenchmark.autoDeployProcess=false +# TODO make this work: -Dzeebe.client.worker.max-jobs-active=${jobWorker.maxJobsActive} + resources: + limits: + cpu: ${engine.vcpus} + memory: ${engine.ram}Gi + requests: + cpu: 1 + memory: 1Gi + volumeMounts: + - name: payload + mountPath: payload.json + subPath: payload.json + readOnly: true + - name: msg-scenario + mountPath: msg-scenario.json + subPath: msg-scenario.json + readOnly: true + volumes: + - name: payload + configMap: + name: payload + - name: msg-scenario + configMap: + name: msg-scenario diff --git a/src/main/resources/benchmarktemplates/benchmark-msg.yaml b/src/main/resources/benchmarktemplates/benchmark-msg.yaml new file mode 100644 index 0000000..9295b23 --- /dev/null +++ b/src/main/resources/benchmarktemplates/benchmark-msg.yaml @@ -0,0 +1,57 @@ +# config for https://github.com/camunda-community-hub/camunda-8-benchmark +apiVersion: apps/v1 +kind: Deployment +metadata: + name: benchmark + labels: + app: benchmark +spec: + selector: + matchLabels: + app: benchmark + replicas: ${loadGeneratorStarter.starterReplicas} + template: + metadata: + labels: + app: benchmark + spec: + containers: + - name: benchmark + image: camundacommunityhub/camunda-8-benchmark:main + imagePullPolicy: Always + env: + - name: JAVA_OPTIONS + value: >- + -Dzeebe.client.broker.gateway-address=camunda-zeebe-gateway:26500 + -Dzeebe.client.security.plaintext=true + -Dbenchmark.startProcesses=false + -Dbenchmark.startWorkers=false + -Dbenchmark.messageScenario=file:/msg-scenario.json + -Dbenchmark.messagesTtl=${loadGeneratorStarter.messageTtl} + -Dbenchmark.messagesScenariosPerSecond=${loadGeneratorStarter.startThroughput} + -Dbenchmark.delayBetweenMessages=1 + -Dbenchmark.messagesLoadDuration=${loadGeneratorStarter.runDuration}000 + -Dbenchmark.autoDeployProcess=false + resources: + limits: + cpu: ${engine.vcpus} + memory: ${engine.ram}Gi + requests: + cpu: 1 + memory: 1Gi + volumeMounts: + - name: payload + mountPath: payload.json + subPath: payload.json + readOnly: true + - name: msg-scenario + mountPath: msg-scenario.json + subPath: msg-scenario.json + readOnly: true + volumes: + - name: payload + configMap: + name: payload + - name: msg-scenario + configMap: + name: msg-scenario diff --git a/src/main/resources/benchmarktemplates/benchmark.yaml b/src/main/resources/benchmarktemplates/benchmark.yaml index ce77ad7..d508ba9 100644 --- a/src/main/resources/benchmarktemplates/benchmark.yaml +++ b/src/main/resources/benchmarktemplates/benchmark.yaml @@ -17,7 +17,7 @@ spec: spec: containers: - name: benchmark - image: upgradingdave/camunda-8-benchmark:main + image: camundacommunityhub/camunda-8-benchmark:main imagePullPolicy: Always env: - name: JAVA_OPTIONS @@ -26,19 +26,21 @@ spec: -Dzeebe.client.security.plaintext=true -Dzeebe.client.request-timeout=600s -Dzeebe.client.job.poll-interval=1ms - -Dzeebe.client.worker.max-jobs-active=${jobWorker.maxJobsActive} + -Dzeebe.client.default-job-worker-stream-enabled=true + -Dbenchmark.bpmnProcessId=${loadGeneratorStarter.processModel} -Dbenchmark.startPiPerSecond=${loadGeneratorStarter.startThroughput} + -Dbenchmark.startPiIncreaseFactor=${loadGeneratorStarter.startPiIncreaseFactor} + -Dbenchmark.startRateAdjustmentStrategy=${loadGeneratorStarter.rateAdjustmentStrategy} + -Dbenchmark.fixedBackOffDelay=${jobWorker.fixedBackOffDelay} -Dbenchmark.maxBackpressurePercentage=1.0 - -Dbenchmark.taskCompletionDelay=${jobWorker.jobDuration} - -Dbenchmark.bpmnProcessId=${loadGeneratorStarter.processModel} -Dbenchmark.jobType=benchmark-task -Dbenchmark.multipleJobTypes=${jobWorker.numberOfJobTypes} - -Dbenchmark.payloadPath=payload.json + -Dbenchmark.taskCompletionDelay=${jobWorker.jobDuration} + -Dbenchmark.payloadPath=file:/${loadGeneratorStarter.payload} -Dbenchmark.autoDeployProcess=false -Dbenchmark.warmupPhaseDurationMillis=${loadGeneratorStarter.rampUpTime}000 - -Dbenchmark.startRateAdjustmentStrategy=${loadGeneratorStarter.rateAdjustmentStrategy} - -Dbenchmark.startPiIncreaseFactor=${loadGeneratorStarter.startPiIncreaseFactor} - -Dbenchmark.fixedBackOffDelay=${jobWorker.fixedBackOffDelay} +# -Dzeebe.client.worker.max-jobs-active=${jobWorker.maxJobsActive} +# -Dzeebe.client.worker.threads=${jobWorker.numberOfThreads} resources: limits: cpu: ${engine.vcpus} @@ -48,8 +50,8 @@ spec: memory: 1Gi volumeMounts: - name: payload - mountPath: payload.json - subPath: payload.json + mountPath: ${loadGeneratorStarter.payload} + subPath: ${loadGeneratorStarter.payload} readOnly: true volumes: - name: payload diff --git a/src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml b/src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml deleted file mode 100644 index c137ac1..0000000 --- a/src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# Chart values for the Camunda Platform 8 Helm chart. -# This file deliberately contains only the values that differ from the defaults. -# For changes and documentation, use your favorite diff tool to compare it with: -# https://github.com/camunda/camunda-platform-helm/blob/main/charts/camunda-platform/values.yaml - -global: - image: - tag: ${engine.engineVersion} - elasticsearch: - disableExporter: false -zeebe: - resources: - limits: - cpu: ${engine.vcpus} - memory: ${engine.ram}Gi - requests: - cpu: ${engine.vcpus} - memory: ${engine.ram}Gi - clusterSize: "${engine.clusterSize}" - partitionCount: "${engine.partitions}" - replicationFactor: "${engine.replicationFactor}" - cpuThreadCount: ${engine.cpuThreadPoolSizeNode} - ioThreadCount: ${engine.ioThreadPoolSizeNode} - persistenceType: ${engine.diskType} - pvcSize: ${engine.diskSize}Gi - pvcStorageClassName: ssd - env: - - name: ZEEBE_BROKER_EXECUTION_METRICS_EXPORTER_ENABLED - value: "true" - - name: ZEEBE_BROKER_EXPERIMENTAL_DISABLEEXPLICITRAFTFLUSH - value: "${engine.disableExplicitRaftFlush}" - - name: ZEEBE_BROKER_BACKPRESSURE_ENABLED - value: "true" - - name: ZEEBE_BROKER_BACKPRESSURE_USEWINDOWED - value: "${engine.bpUseWindowed}" - - name: ZEEBE_BROKER_BACKPRESSURE_ALGORITHM - value: "${engine.backPressureAlgorithm}" - - name: ZEEBE_BROKER_BACKPRESSURE_FIXED_LIMIT - value: "${engine.initialLimit}" - - name: ZEEBE_BROKER_BACKPRESSURE_VEGAS_INITIALLIMIT - value: "${engine.initialLimit}" - - name: ZEEBE_BROKER_BACKPRESSURE_VEGAS_ALPHA - value: "${engine.vegasAlpha}" - - name: ZEEBE_BROKER_BACKPRESSURE_VEGAS_BETA - value: "${engine.vegasBeta}" - - name: ZEEBE_BROKER_BACKPRESSURE_GRADIENT_MINLIMIT - value: "${engine.minLimit}" - - name: ZEEBE_BROKER_BACKPRESSURE_GRADIENT_INITIALLIMIT - value: "${engine.initialLimit}" - - name: ZEEBE_BROKER_BACKPRESSURE_GRADIENT_RTTTOLERANCE - value: "${engine.rttTolerance}" -zeebe-gateway: - replicas: ${gateway.replicas} - resources: - limits: - cpu: ${gateway.vcpus} - memory: ${gateway.ram}Gi - requests: - cpu: ${gateway.vcpus} - memory: ${gateway.ram}Gi - env: - - name: ZEEBE_GATEWAY_MONITORING_ENABLED - value: "true" - - name: ZEEBE_GATEWAY_THREADS_MANAGEMENTTHREADS - value: "${gateway.numberOfThreads}" -prometheusServiceMonitor: - enabled: true -elasticsearch: - enabled: ${elasticSearch.enabled} - replicas: ${elasticSearch.clusterSize} - resources: - limits: - cpu: ${elasticSearch.vcpus} - memory: ${elasticSearch.ram}Gi - requests: - cpu: ${elasticSearch.vcpus} - memory: ${elasticSearch.ram}Gi diff --git a/src/main/resources/benchmarktemplates/camunda-values.yaml b/src/main/resources/benchmarktemplates/camunda-values.yaml index 0fd9d42..99d18cf 100644 --- a/src/main/resources/benchmarktemplates/camunda-values.yaml +++ b/src/main/resources/benchmarktemplates/camunda-values.yaml @@ -7,14 +7,22 @@ global: image: tag: ${engine.engineVersion} elasticsearch: - disableExporter: true + disableExporter: ${elasticSearch.disabled} + identity: + auth: + # Disable the Identity authentication + # it will fall back to basic-auth: demo/demo as default user + enabled: false + zeebe: + image: + repository: ${engine.image} resources: limits: cpu: ${engine.vcpus} memory: ${engine.ram}Gi requests: - cpu: ${engine.vcpus} + cpu: ${engine.vcpuRequest} memory: ${engine.ram}Gi clusterSize: "${engine.clusterSize}" partitionCount: "${engine.partitions}" @@ -23,14 +31,22 @@ zeebe: ioThreadCount: ${engine.ioThreadPoolSizeNode} persistenceType: ${engine.diskType} pvcSize: ${engine.diskSize}Gi - pvcStorageClassName: ssd + pvcStorageClassName: ${engine.fileSystem} env: + - name: ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_INDEX_NUMBEROFSHARDS + value: "${elasticSearch.shardsPerIndex}" + - name: ZEEBE_BROKER_CLUSTER_RAFT_FLUSH_DELAYTIME + value: "${engine.raftFlushDelay}" - name: ZEEBE_BROKER_EXECUTION_METRICS_EXPORTER_ENABLED value: "true" + - name: ZEEBE_BROKER_DATA_LOGSEGMENTSIZE + value: "${engine.logSegmentSize}MB" + - name: ZEEBE_BROKER_EXPERIMENTAL_RAFT_PREALLOCATESEGMENTFILES + value: "${engine.preAllocateSegmentFiles}" - name: ZEEBE_BROKER_EXPERIMENTAL_DISABLEEXPLICITRAFTFLUSH value: "${engine.disableExplicitRaftFlush}" - name: ZEEBE_BROKER_BACKPRESSURE_ENABLED - value: "true" + value: "${engine.backpressure}" - name: ZEEBE_BROKER_BACKPRESSURE_USEWINDOWED value: "${engine.bpUseWindowed}" - name: ZEEBE_BROKER_BACKPRESSURE_ALGORITHM @@ -49,7 +65,17 @@ zeebe: value: "${engine.initialLimit}" - name: ZEEBE_BROKER_BACKPRESSURE_GRADIENT_RTTTOLERANCE value: "${engine.rttTolerance}" -zeebe-gateway: + - name: "ZEEBE_BROKER_CLUSTER_MESSAGECOMPRESSION" + value: "${engine.networkCompression}" + - name: ZEEBE_BROKER_EXPERIMENTAL_MAXAPPENDSPERFOLLOWER + value: "${engine.maxAppendsPerFollower}" + - name: ZEEBE_BROKER_EXPERIMENTAL_MAXAPPENDBATCHSIZE + value: "${engine.maxAppendBatchSize}KB" + - name: ZEEBE_BROKER_EXPERIMENTAL_ROCKSDB_DISABLEWAL + value: "${rocksdb.disableWal}" +zeebeGateway: + image: + repository: ${engine.image} replicas: ${gateway.replicas} resources: limits: @@ -63,25 +89,69 @@ zeebe-gateway: value: "true" - name: ZEEBE_GATEWAY_THREADS_MANAGEMENTTHREADS value: "${gateway.numberOfThreads}" + - name: ZEEBE_GATEWAY_CLUSTER_MESSAGECOMPRESSION + value: "${engine.networkCompression}" operate: - enabled: false + enabled: ${operate.enabled} + resources: + limits: + cpu: ${operate.vcpus} + memory: ${operate.ram}Gi + requests: + cpu: ${operate.vcpus} + memory: ${operate.ram}Gi + env: + - name: CAMUNDA_OPERATE_IMPORTER_READERTHREADSCOUNT + value: "${operate.importerReaderthreadscount}" + - name: CAMUNDA_OPERATE_IMPORTER_THREADSCOUNT + value: "${operate.importerThreadscount}" + - name: CAMUNDA_OPERATE_ELASTICSEARCH_NUMBEROFSHARDS + value: "${elasticSearch.shardsPerIndex}" tasklist: enabled: false +console: + enabled: false optimize: enabled: false -prometheusServiceMonitor: - enabled: true +connectors: + enabled: false identity: enabled: false keycloak: enabled: false +identityKeycloak: + enabled: false +prometheusServiceMonitor: + enabled: true elasticsearch: enabled: ${elasticSearch.enabled} - replicas: ${elasticSearch.clusterSize} - resources: - limits: - cpu: ${elasticSearch.vcpus} - memory: ${elasticSearch.ram}Gi - requests: - cpu: ${elasticSearch.vcpus} - memory: ${elasticSearch.ram}Gi + image: + tag: ${elasticSearch.version} + master: + masterOnly: ${elasticSearch.masterOnly} + heapSize: ${elasticSearch.heapSizeMaster}m + replicaCount: ${elasticSearch.clusterSizeMaster} + persistence: + size: ${elasticSearch.storageCapacity}Gi + storageClass: ${elasticSearch.fileSystem} + resources: + limits: + cpu: ${elasticSearch.vcpusMaster} + memory: ${elasticSearch.ramMaster}Gi + requests: + cpu: ${elasticSearch.vcpusMaster} + memory: ${elasticSearch.ramMaster}Gi + data: + heapSize: ${elasticSearch.heapSizeData}m + resources: + limits: + cpu: ${elasticSearch.vcpusData} + memory: ${elasticSearch.ramData}Gi + requests: + cpu: ${elasticSearch.vcpusData} + memory: ${elasticSearch.ramData}Gi + replicaCount: ${elasticSearch.clusterSizeData} + persistence: + ## @param elasticsearch.master.persistence.size + size: ${elasticSearch.storageCapacity}Gi + storageClass: ${elasticSearch.fileSystem} diff --git a/src/main/resources/benchmarktemplates/chaos-network-brokers.yaml b/src/main/resources/benchmarktemplates/chaos-network-brokers.yaml new file mode 100644 index 0000000..8cd91a0 --- /dev/null +++ b/src/main/resources/benchmarktemplates/chaos-network-brokers.yaml @@ -0,0 +1,27 @@ +kind: NetworkChaos +apiVersion: chaos-mesh.org/v1alpha1 +metadata: + namespace: camunda + name: chaos-network-brokers +spec: + selector: + namespaces: + - camunda + pods: + camunda: +${evenBrokers} + mode: all + action: delay + delay: + latency: ${engine.interRegionLatency}ms + correlation: '100' + jitter: '0' + direction: both + target: + selector: + namespaces: + - camunda + pods: + camunda: +${oddBrokers} + mode: all diff --git a/src/main/resources/benchmarktemplates/chaos-network-gateway.yaml b/src/main/resources/benchmarktemplates/chaos-network-gateway.yaml new file mode 100644 index 0000000..5995924 --- /dev/null +++ b/src/main/resources/benchmarktemplates/chaos-network-gateway.yaml @@ -0,0 +1,25 @@ +kind: NetworkChaos +apiVersion: chaos-mesh.org/v1alpha1 +metadata: + namespace: camunda + name: chaos-network-gateway +spec: + selector: + namespaces: + - camunda + labelSelectors: + app.kubernetes.io/component: zeebe-gateway + mode: all + action: delay + delay: + latency: ${gateway.interRegionLatency}ms + correlation: '50' + jitter: '0' + direction: both + target: + selector: + namespaces: + - camunda + labelSelectors: + app.kubernetes.io/component: zeebe-broker + mode: all diff --git a/src/main/resources/benchmarktemplates/run.sh b/src/main/resources/benchmarktemplates/run.sh index c839994..6c2c22c 100644 --- a/src/main/resources/benchmarktemplates/run.sh +++ b/src/main/resources/benchmarktemplates/run.sh @@ -1,6 +1,11 @@ -echo "###############################################" -echo "Running test for config: ${testCaseName}" -# +#echo "###############################################" +#echo "Running test for config: ${testCaseName}" + +helm search repo camunda/camunda-platform --output yaml > helm-chart-version.yaml + +echo "Waiting $((${loadGeneratorStarter.runDuration}/60)) minutes for completion of benchmark run ${testCaseName} ..." +sleep ${loadGeneratorStarter.runDuration} + # Start Zeebe -echo 'Starting Zeebe...' -make \ No newline at end of file +#echo 'Starting Zeebe...' +#make diff --git a/src/main/resources/benchmarktemplates/storage-class-ssd-ext4.yaml b/src/main/resources/benchmarktemplates/storage-class-ssd-ext4.yaml new file mode 100644 index 0000000..2a9ec56 --- /dev/null +++ b/src/main/resources/benchmarktemplates/storage-class-ssd-ext4.yaml @@ -0,0 +1,9 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: ssd-ext4 +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-ssd + fsType: ext4 +allowVolumeExpansion: true \ No newline at end of file diff --git a/src/main/resources/benchmarktemplates/storage-class-ssd-xfs.yaml b/src/main/resources/benchmarktemplates/storage-class-ssd-xfs.yaml new file mode 100644 index 0000000..858f9d0 --- /dev/null +++ b/src/main/resources/benchmarktemplates/storage-class-ssd-xfs.yaml @@ -0,0 +1,9 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: ssd-xfs +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-ssd + fsType: xfs +allowVolumeExpansion: true \ No newline at end of file diff --git a/src/main/resources/benchmarktemplates/storage-class-standard-ext4.yaml b/src/main/resources/benchmarktemplates/storage-class-standard-ext4.yaml new file mode 100644 index 0000000..a8a8b94 --- /dev/null +++ b/src/main/resources/benchmarktemplates/storage-class-standard-ext4.yaml @@ -0,0 +1,9 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: std-ext4 +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard + fsType: ext4 +allowVolumeExpansion: true \ No newline at end of file diff --git a/src/main/resources/benchmarktemplates/storage-class-standard-xfs.yaml b/src/main/resources/benchmarktemplates/storage-class-standard-xfs.yaml new file mode 100644 index 0000000..7edfe89 --- /dev/null +++ b/src/main/resources/benchmarktemplates/storage-class-standard-xfs.yaml @@ -0,0 +1,9 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: std-xfs +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard + fsType: xfs +allowVolumeExpansion: true \ No newline at end of file diff --git a/src/main/resources/benchmarktemplates/zbctl-deploy-job.yaml b/src/main/resources/benchmarktemplates/zbctl-deploy-job.yaml index 07a32c3..c70a3fc 100644 --- a/src/main/resources/benchmarktemplates/zbctl-deploy-job.yaml +++ b/src/main/resources/benchmarktemplates/zbctl-deploy-job.yaml @@ -7,12 +7,11 @@ spec: spec: containers: - name: zbctl-deploy - image: camunda/zeebe - command: ["zbctl", "--host", "camunda-zeebe-gateway", "--insecure", "deploy", "/models/${loadGeneratorStarter.processModel}.bpmn"] + image: camunda/zeebe:8.2.10 + command: ["sh", "-c", "zbctl --host camunda-zeebe-gateway --insecure deploy resource /models/*.*mn"] volumeMounts: - name: models - mountPath: /models/${loadGeneratorStarter.processModel}.bpmn - subPath: ${loadGeneratorStarter.processModel}.bpmn + mountPath: /models readOnly: true volumes: - name: models