diff --git a/snuba/admin/coverage/clover.xml b/snuba/admin/coverage/clover.xml new file mode 100644 index 0000000000..7db379b3b8 --- /dev/null +++ b/snuba/admin/coverage/clover.xml @@ -0,0 +1,1640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/snuba/admin/coverage/coverage-final.json b/snuba/admin/coverage/coverage-final.json new file mode 100644 index 0000000000..7bd3142bd1 --- /dev/null +++ b/snuba/admin/coverage/coverage-final.json @@ -0,0 +1,50 @@ +{"/Users/rachelchen/snuba/snuba/admin/static/api_client.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/api_client.tsx","statementMap":{"0":{"start":{"line":112,"column":18},"end":{"line":112,"column":21}},"1":{"start":{"line":114,"column":2},"end":{"line":514,"column":4}},"2":{"start":{"line":116,"column":18},"end":{"line":116,"column":38}},"3":{"start":{"line":117,"column":6},"end":{"line":117,"column":52}},"4":{"start":{"line":117,"column":39},"end":{"line":117,"column":51}},"5":{"start":{"line":120,"column":18},"end":{"line":120,"column":37}},"6":{"start":{"line":121,"column":6},"end":{"line":121,"column":52}},"7":{"start":{"line":121,"column":39},"end":{"line":121,"column":51}},"8":{"start":{"line":124,"column":18},"end":{"line":124,"column":63}},"9":{"start":{"line":125,"column":6},"end":{"line":127,"column":37}},"10":{"start":{"line":127,"column":24},"end":{"line":127,"column":36}},"11":{"start":{"line":134,"column":18},"end":{"line":134,"column":37}},"12":{"start":{"line":135,"column":21},"end":{"line":135,"column":48}},"13":{"start":{"line":137,"column":6},"end":{"line":150,"column":9}},"14":{"start":{"line":142,"column":8},"end":{"line":149,"column":null}},"15":{"start":{"line":143,"column":10},"end":{"line":143,"column":45}},"16":{"start":{"line":145,"column":10},"end":{"line":148,"column":13}},"17":{"start":{"line":146,"column":25},"end":{"line":146,"column":64}},"18":{"start":{"line":147,"column":12},"end":{"line":147,"column":36}},"19":{"start":{"line":154,"column":8},"end":{"line":157,"column":56}},"20":{"start":{"line":158,"column":6},"end":{"line":167,"column":9}},"21":{"start":{"line":162,"column":8},"end":{"line":166,"column":null}},"22":{"start":{"line":163,"column":10},"end":{"line":163,"column":17}},"23":{"start":{"line":165,"column":10},"end":{"line":165,"column":53}},"24":{"start":{"line":174,"column":18},"end":{"line":174,"column":64}},"25":{"start":{"line":175,"column":6},"end":{"line":185,"column":9}},"26":{"start":{"line":180,"column":8},"end":{"line":184,"column":null}},"27":{"start":{"line":181,"column":10},"end":{"line":181,"column":45}},"28":{"start":{"line":183,"column":10},"end":{"line":183,"column":51}},"29":{"start":{"line":188,"column":18},"end":{"line":188,"column":53}},"30":{"start":{"line":189,"column":6},"end":{"line":189,"column":52}},"31":{"start":{"line":189,"column":39},"end":{"line":189,"column":51}},"32":{"start":{"line":192,"column":18},"end":{"line":192,"column":45}},"33":{"start":{"line":193,"column":6},"end":{"line":193,"column":52}},"34":{"start":{"line":193,"column":39},"end":{"line":193,"column":51}},"35":{"start":{"line":196,"column":18},"end":{"line":196,"column":46}},"36":{"start":{"line":197,"column":6},"end":{"line":206,"column":11}},"37":{"start":{"line":198,"column":24},"end":{"line":198,"column":36}},"38":{"start":{"line":200,"column":10},"end":{"line":205,"column":12}},"39":{"start":{"line":202,"column":14},"end":{"line":204,"column":null}},"40":{"start":{"line":210,"column":18},"end":{"line":210,"column":44}},"41":{"start":{"line":211,"column":6},"end":{"line":211,"column":52}},"42":{"start":{"line":211,"column":39},"end":{"line":211,"column":51}},"43":{"start":{"line":215,"column":18},"end":{"line":215,"column":46}},"44":{"start":{"line":216,"column":6},"end":{"line":216,"column":52}},"45":{"start":{"line":216,"column":39},"end":{"line":216,"column":51}},"46":{"start":{"line":220,"column":18},"end":{"line":220,"column":43}},"47":{"start":{"line":221,"column":6},"end":{"line":221,"column":52}},"48":{"start":{"line":221,"column":39},"end":{"line":221,"column":51}},"49":{"start":{"line":225,"column":18},"end":{"line":225,"column":41}},"50":{"start":{"line":226,"column":6},"end":{"line":239,"column":9}},"51":{"start":{"line":231,"column":8},"end":{"line":238,"column":null}},"52":{"start":{"line":232,"column":10},"end":{"line":232,"column":45}},"53":{"start":{"line":234,"column":10},"end":{"line":237,"column":13}},"54":{"start":{"line":235,"column":25},"end":{"line":235,"column":71}},"55":{"start":{"line":236,"column":12},"end":{"line":236,"column":36}},"56":{"start":{"line":243,"column":18},"end":{"line":243,"column":51}},"57":{"start":{"line":244,"column":6},"end":{"line":257,"column":9}},"58":{"start":{"line":249,"column":8},"end":{"line":256,"column":null}},"59":{"start":{"line":250,"column":10},"end":{"line":250,"column":45}},"60":{"start":{"line":252,"column":10},"end":{"line":255,"column":13}},"61":{"start":{"line":253,"column":25},"end":{"line":253,"column":71}},"62":{"start":{"line":254,"column":12},"end":{"line":254,"column":36}},"63":{"start":{"line":261,"column":18},"end":{"line":261,"column":50}},"64":{"start":{"line":262,"column":6},"end":{"line":262,"column":40}},"65":{"start":{"line":263,"column":6},"end":{"line":276,"column":9}},"66":{"start":{"line":268,"column":8},"end":{"line":275,"column":null}},"67":{"start":{"line":269,"column":10},"end":{"line":269,"column":45}},"68":{"start":{"line":271,"column":10},"end":{"line":274,"column":13}},"69":{"start":{"line":272,"column":25},"end":{"line":272,"column":71}},"70":{"start":{"line":273,"column":12},"end":{"line":273,"column":36}},"71":{"start":{"line":280,"column":18},"end":{"line":280,"column":48}},"72":{"start":{"line":281,"column":6},"end":{"line":281,"column":52}},"73":{"start":{"line":281,"column":39},"end":{"line":281,"column":51}},"74":{"start":{"line":284,"column":18},"end":{"line":284,"column":57}},"75":{"start":{"line":285,"column":6},"end":{"line":295,"column":9}},"76":{"start":{"line":290,"column":8},"end":{"line":294,"column":null}},"77":{"start":{"line":291,"column":10},"end":{"line":291,"column":29}},"78":{"start":{"line":293,"column":10},"end":{"line":293,"column":64}},"79":{"start":{"line":298,"column":18},"end":{"line":298,"column":52}},"80":{"start":{"line":299,"column":6},"end":{"line":309,"column":9}},"81":{"start":{"line":304,"column":8},"end":{"line":308,"column":null}},"82":{"start":{"line":305,"column":10},"end":{"line":305,"column":29}},"83":{"start":{"line":307,"column":10},"end":{"line":307,"column":64}},"84":{"start":{"line":312,"column":18},"end":{"line":312,"column":35}},"85":{"start":{"line":313,"column":6},"end":{"line":315,"column":37}},"86":{"start":{"line":315,"column":24},"end":{"line":315,"column":36}},"87":{"start":{"line":319,"column":18},"end":{"line":319,"column":46}},"88":{"start":{"line":320,"column":6},"end":{"line":320,"column":52}},"89":{"start":{"line":320,"column":39},"end":{"line":320,"column":51}},"90":{"start":{"line":323,"column":18},"end":{"line":323,"column":56}},"91":{"start":{"line":324,"column":6},"end":{"line":332,"column":9}},"92":{"start":{"line":327,"column":8},"end":{"line":331,"column":null}},"93":{"start":{"line":328,"column":10},"end":{"line":328,"column":29}},"94":{"start":{"line":330,"column":10},"end":{"line":330,"column":64}},"95":{"start":{"line":335,"column":18},"end":{"line":335,"column":55}},"96":{"start":{"line":336,"column":6},"end":{"line":346,"column":9}},"97":{"start":{"line":341,"column":8},"end":{"line":345,"column":null}},"98":{"start":{"line":342,"column":10},"end":{"line":342,"column":29}},"99":{"start":{"line":344,"column":10},"end":{"line":344,"column":64}},"100":{"start":{"line":349,"column":18},"end":{"line":349,"column":49}},"101":{"start":{"line":350,"column":6},"end":{"line":350,"column":52}},"102":{"start":{"line":350,"column":39},"end":{"line":350,"column":51}},"103":{"start":{"line":353,"column":18},"end":{"line":353,"column":47}},"104":{"start":{"line":354,"column":6},"end":{"line":364,"column":9}},"105":{"start":{"line":359,"column":8},"end":{"line":363,"column":null}},"106":{"start":{"line":360,"column":10},"end":{"line":360,"column":29}},"107":{"start":{"line":362,"column":10},"end":{"line":362,"column":64}},"108":{"start":{"line":367,"column":18},"end":{"line":367,"column":47}},"109":{"start":{"line":368,"column":6},"end":{"line":370,"column":37}},"110":{"start":{"line":370,"column":24},"end":{"line":370,"column":36}},"111":{"start":{"line":374,"column":21},"end":{"line":378,"column":8}},"112":{"start":{"line":379,"column":26},"end":{"line":379,"column":87}},"113":{"start":{"line":380,"column":6},"end":{"line":390,"column":9}},"114":{"start":{"line":385,"column":8},"end":{"line":389,"column":null}},"115":{"start":{"line":386,"column":10},"end":{"line":386,"column":29}},"116":{"start":{"line":388,"column":10},"end":{"line":388,"column":64}},"117":{"start":{"line":394,"column":18},"end":{"line":394,"column":35}},"118":{"start":{"line":395,"column":6},"end":{"line":397,"column":37}},"119":{"start":{"line":397,"column":24},"end":{"line":397,"column":36}},"120":{"start":{"line":401,"column":18},"end":{"line":401,"column":63}},"121":{"start":{"line":402,"column":6},"end":{"line":404,"column":37}},"122":{"start":{"line":404,"column":24},"end":{"line":404,"column":36}},"123":{"start":{"line":408,"column":8},"end":{"line":408,"column":76}},"124":{"start":{"line":409,"column":6},"end":{"line":411,"column":37}},"125":{"start":{"line":411,"column":24},"end":{"line":411,"column":36}},"126":{"start":{"line":420,"column":18},"end":{"line":420,"column":54}},"127":{"start":{"line":421,"column":6},"end":{"line":434,"column":9}},"128":{"start":{"line":426,"column":8},"end":{"line":433,"column":null}},"129":{"start":{"line":427,"column":10},"end":{"line":427,"column":17}},"130":{"start":{"line":429,"column":10},"end":{"line":432,"column":13}},"131":{"start":{"line":430,"column":25},"end":{"line":430,"column":61}},"132":{"start":{"line":431,"column":12},"end":{"line":431,"column":36}},"133":{"start":{"line":442,"column":18},"end":{"line":442,"column":54}},"134":{"start":{"line":443,"column":6},"end":{"line":456,"column":9}},"135":{"start":{"line":448,"column":8},"end":{"line":455,"column":null}},"136":{"start":{"line":449,"column":10},"end":{"line":449,"column":17}},"137":{"start":{"line":451,"column":10},"end":{"line":454,"column":13}},"138":{"start":{"line":452,"column":25},"end":{"line":452,"column":64}},"139":{"start":{"line":453,"column":12},"end":{"line":453,"column":36}},"140":{"start":{"line":459,"column":18},"end":{"line":459,"column":47}},"141":{"start":{"line":460,"column":6},"end":{"line":462,"column":37}},"142":{"start":{"line":462,"column":24},"end":{"line":462,"column":36}},"143":{"start":{"line":465,"column":18},"end":{"line":465,"column":54}},"144":{"start":{"line":466,"column":6},"end":{"line":468,"column":37}},"145":{"start":{"line":468,"column":24},"end":{"line":468,"column":36}},"146":{"start":{"line":471,"column":18},"end":{"line":471,"column":54}},"147":{"start":{"line":472,"column":6},"end":{"line":492,"column":9}},"148":{"start":{"line":484,"column":8},"end":{"line":491,"column":null}},"149":{"start":{"line":485,"column":10},"end":{"line":485,"column":28}},"150":{"start":{"line":487,"column":10},"end":{"line":490,"column":13}},"151":{"start":{"line":488,"column":25},"end":{"line":488,"column":57}},"152":{"start":{"line":489,"column":12},"end":{"line":489,"column":36}},"153":{"start":{"line":495,"column":18},"end":{"line":495,"column":54}},"154":{"start":{"line":496,"column":6},"end":{"line":499,"column":37}},"155":{"start":{"line":499,"column":24},"end":{"line":499,"column":36}},"156":{"start":{"line":502,"column":18},"end":{"line":502,"column":36}},"157":{"start":{"line":503,"column":6},"end":{"line":512,"column":9}},"158":{"start":{"line":517,"column":0},"end":{"line":517,"column":22}}},"fnMap":{"0":{"name":"Client","decl":{"start":{"line":111,"column":9},"end":{"line":111,"column":15}},"loc":{"start":{"line":111,"column":15},"end":{"line":515,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":115,"column":17},"end":{"line":115,"column":null}},"loc":{"start":{"line":115,"column":17},"end":{"line":118,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":117,"column":29},"end":{"line":117,"column":30}},"loc":{"start":{"line":117,"column":34},"end":{"line":117,"column":43}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":119,"column":16},"end":{"line":119,"column":null}},"loc":{"start":{"line":119,"column":16},"end":{"line":122,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":121,"column":29},"end":{"line":121,"column":30}},"loc":{"start":{"line":121,"column":34},"end":{"line":121,"column":43}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":123,"column":39},"end":{"line":123,"column":null}},"loc":{"start":{"line":123,"column":39},"end":{"line":128,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":127,"column":14},"end":{"line":127,"column":15}},"loc":{"start":{"line":127,"column":19},"end":{"line":127,"column":28}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":null}},"loc":{"start":{"line":132,"column":36},"end":{"line":151,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":141,"column":14},"end":{"line":141,"column":15}},"loc":{"start":{"line":141,"column":18},"end":{"line":150,"column":7}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":145,"column":33},"end":{"line":145,"column":34}},"loc":{"start":{"line":145,"column":37},"end":{"line":148,"column":11}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":152,"column":18},"end":{"line":152,"column":19}},"loc":{"start":{"line":152,"column":59},"end":{"line":168,"column":5}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":161,"column":14},"end":{"line":161,"column":15}},"loc":{"start":{"line":161,"column":18},"end":{"line":167,"column":7}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":169,"column":16},"end":{"line":169,"column":null}},"loc":{"start":{"line":172,"column":36},"end":{"line":186,"column":5}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":179,"column":14},"end":{"line":179,"column":15}},"loc":{"start":{"line":179,"column":18},"end":{"line":185,"column":7}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":187,"column":21},"end":{"line":187,"column":null}},"loc":{"start":{"line":187,"column":21},"end":{"line":190,"column":5}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":189,"column":29},"end":{"line":189,"column":30}},"loc":{"start":{"line":189,"column":34},"end":{"line":189,"column":43}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":191,"column":17},"end":{"line":191,"column":null}},"loc":{"start":{"line":191,"column":17},"end":{"line":194,"column":5}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":193,"column":29},"end":{"line":193,"column":30}},"loc":{"start":{"line":193,"column":34},"end":{"line":193,"column":43}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":195,"column":24},"end":{"line":195,"column":null}},"loc":{"start":{"line":195,"column":24},"end":{"line":207,"column":5}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":198,"column":14},"end":{"line":198,"column":15}},"loc":{"start":{"line":198,"column":19},"end":{"line":198,"column":28}}},"20":{"name":"(anonymous_20)","decl":{"start":{"line":199,"column":14},"end":{"line":199,"column":15}},"loc":{"start":{"line":199,"column":18},"end":{"line":206,"column":9}}},"21":{"name":"(anonymous_21)","decl":{"start":{"line":201,"column":12},"end":{"line":201,"column":13}},"loc":{"start":{"line":201,"column":25},"end":{"line":202,"column":21}}},"22":{"name":"(anonymous_22)","decl":{"start":{"line":209,"column":26},"end":{"line":209,"column":null}},"loc":{"start":{"line":209,"column":26},"end":{"line":212,"column":5}}},"23":{"name":"(anonymous_23)","decl":{"start":{"line":211,"column":29},"end":{"line":211,"column":30}},"loc":{"start":{"line":211,"column":34},"end":{"line":211,"column":43}}},"24":{"name":"(anonymous_24)","decl":{"start":{"line":214,"column":24},"end":{"line":214,"column":null}},"loc":{"start":{"line":214,"column":24},"end":{"line":217,"column":5}}},"25":{"name":"(anonymous_25)","decl":{"start":{"line":216,"column":29},"end":{"line":216,"column":30}},"loc":{"start":{"line":216,"column":34},"end":{"line":216,"column":43}}},"26":{"name":"(anonymous_26)","decl":{"start":{"line":219,"column":21},"end":{"line":219,"column":null}},"loc":{"start":{"line":219,"column":21},"end":{"line":222,"column":5}}},"27":{"name":"(anonymous_27)","decl":{"start":{"line":221,"column":29},"end":{"line":221,"column":30}},"loc":{"start":{"line":221,"column":34},"end":{"line":221,"column":43}}},"28":{"name":"(anonymous_28)","decl":{"start":{"line":224,"column":20},"end":{"line":224,"column":21}},"loc":{"start":{"line":224,"column":39},"end":{"line":240,"column":5}}},"29":{"name":"(anonymous_29)","decl":{"start":{"line":230,"column":14},"end":{"line":230,"column":15}},"loc":{"start":{"line":230,"column":18},"end":{"line":239,"column":7}}},"30":{"name":"(anonymous_30)","decl":{"start":{"line":234,"column":33},"end":{"line":234,"column":34}},"loc":{"start":{"line":234,"column":37},"end":{"line":237,"column":11}}},"31":{"name":"(anonymous_31)","decl":{"start":{"line":242,"column":22},"end":{"line":242,"column":23}},"loc":{"start":{"line":242,"column":41},"end":{"line":258,"column":5}}},"32":{"name":"(anonymous_32)","decl":{"start":{"line":248,"column":14},"end":{"line":248,"column":15}},"loc":{"start":{"line":248,"column":18},"end":{"line":257,"column":7}}},"33":{"name":"(anonymous_33)","decl":{"start":{"line":252,"column":33},"end":{"line":252,"column":34}},"loc":{"start":{"line":252,"column":37},"end":{"line":255,"column":11}}},"34":{"name":"(anonymous_34)","decl":{"start":{"line":260,"column":21},"end":{"line":260,"column":22}},"loc":{"start":{"line":260,"column":39},"end":{"line":277,"column":5}}},"35":{"name":"(anonymous_35)","decl":{"start":{"line":267,"column":14},"end":{"line":267,"column":15}},"loc":{"start":{"line":267,"column":18},"end":{"line":276,"column":7}}},"36":{"name":"(anonymous_36)","decl":{"start":{"line":271,"column":33},"end":{"line":271,"column":34}},"loc":{"start":{"line":271,"column":37},"end":{"line":274,"column":11}}},"37":{"name":"(anonymous_37)","decl":{"start":{"line":279,"column":31},"end":{"line":279,"column":null}},"loc":{"start":{"line":279,"column":31},"end":{"line":282,"column":5}}},"38":{"name":"(anonymous_38)","decl":{"start":{"line":281,"column":29},"end":{"line":281,"column":30}},"loc":{"start":{"line":281,"column":34},"end":{"line":281,"column":43}}},"39":{"name":"(anonymous_39)","decl":{"start":{"line":283,"column":24},"end":{"line":283,"column":25}},"loc":{"start":{"line":283,"column":44},"end":{"line":296,"column":5}}},"40":{"name":"(anonymous_40)","decl":{"start":{"line":289,"column":14},"end":{"line":289,"column":15}},"loc":{"start":{"line":289,"column":19},"end":{"line":295,"column":7}}},"41":{"name":"(anonymous_41)","decl":{"start":{"line":297,"column":25},"end":{"line":297,"column":26}},"loc":{"start":{"line":297,"column":47},"end":{"line":310,"column":5}}},"42":{"name":"(anonymous_42)","decl":{"start":{"line":303,"column":14},"end":{"line":303,"column":15}},"loc":{"start":{"line":303,"column":19},"end":{"line":309,"column":7}}},"43":{"name":"(anonymous_43)","decl":{"start":{"line":311,"column":18},"end":{"line":311,"column":null}},"loc":{"start":{"line":311,"column":18},"end":{"line":316,"column":5}}},"44":{"name":"(anonymous_44)","decl":{"start":{"line":315,"column":14},"end":{"line":315,"column":15}},"loc":{"start":{"line":315,"column":19},"end":{"line":315,"column":28}}},"45":{"name":"(anonymous_45)","decl":{"start":{"line":318,"column":34},"end":{"line":318,"column":null}},"loc":{"start":{"line":318,"column":34},"end":{"line":321,"column":5}}},"46":{"name":"(anonymous_46)","decl":{"start":{"line":320,"column":29},"end":{"line":320,"column":30}},"loc":{"start":{"line":320,"column":34},"end":{"line":320,"column":43}}},"47":{"name":"(anonymous_47)","decl":{"start":{"line":322,"column":23},"end":{"line":322,"column":null}},"loc":{"start":{"line":322,"column":23},"end":{"line":333,"column":5}}},"48":{"name":"(anonymous_48)","decl":{"start":{"line":326,"column":14},"end":{"line":326,"column":15}},"loc":{"start":{"line":326,"column":19},"end":{"line":332,"column":7}}},"49":{"name":"(anonymous_49)","decl":{"start":{"line":334,"column":26},"end":{"line":334,"column":27}},"loc":{"start":{"line":334,"column":49},"end":{"line":347,"column":5}}},"50":{"name":"(anonymous_50)","decl":{"start":{"line":340,"column":14},"end":{"line":340,"column":15}},"loc":{"start":{"line":340,"column":19},"end":{"line":346,"column":7}}},"51":{"name":"(anonymous_51)","decl":{"start":{"line":348,"column":42},"end":{"line":348,"column":null}},"loc":{"start":{"line":348,"column":42},"end":{"line":351,"column":5}}},"52":{"name":"(anonymous_52)","decl":{"start":{"line":350,"column":29},"end":{"line":350,"column":30}},"loc":{"start":{"line":350,"column":34},"end":{"line":350,"column":43}}},"53":{"name":"(anonymous_53)","decl":{"start":{"line":352,"column":29},"end":{"line":352,"column":30}},"loc":{"start":{"line":352,"column":60},"end":{"line":365,"column":5}}},"54":{"name":"(anonymous_54)","decl":{"start":{"line":358,"column":14},"end":{"line":358,"column":15}},"loc":{"start":{"line":358,"column":19},"end":{"line":364,"column":7}}},"55":{"name":"(anonymous_55)","decl":{"start":{"line":366,"column":27},"end":{"line":366,"column":null}},"loc":{"start":{"line":366,"column":27},"end":{"line":371,"column":5}}},"56":{"name":"(anonymous_56)","decl":{"start":{"line":370,"column":14},"end":{"line":370,"column":15}},"loc":{"start":{"line":370,"column":19},"end":{"line":370,"column":28}}},"57":{"name":"(anonymous_57)","decl":{"start":{"line":373,"column":18},"end":{"line":373,"column":19}},"loc":{"start":{"line":373,"column":43},"end":{"line":391,"column":5}}},"58":{"name":"(anonymous_58)","decl":{"start":{"line":384,"column":14},"end":{"line":384,"column":15}},"loc":{"start":{"line":384,"column":19},"end":{"line":390,"column":7}}},"59":{"name":"(anonymous_59)","decl":{"start":{"line":393,"column":21},"end":{"line":393,"column":null}},"loc":{"start":{"line":393,"column":21},"end":{"line":398,"column":5}}},"60":{"name":"(anonymous_60)","decl":{"start":{"line":397,"column":14},"end":{"line":397,"column":15}},"loc":{"start":{"line":397,"column":19},"end":{"line":397,"column":28}}},"61":{"name":"(anonymous_61)","decl":{"start":{"line":400,"column":39},"end":{"line":400,"column":null}},"loc":{"start":{"line":400,"column":39},"end":{"line":405,"column":5}}},"62":{"name":"(anonymous_62)","decl":{"start":{"line":404,"column":14},"end":{"line":404,"column":15}},"loc":{"start":{"line":404,"column":19},"end":{"line":404,"column":28}}},"63":{"name":"(anonymous_63)","decl":{"start":{"line":406,"column":27},"end":{"line":406,"column":28}},"loc":{"start":{"line":406,"column":43},"end":{"line":412,"column":5}}},"64":{"name":"(anonymous_64)","decl":{"start":{"line":411,"column":14},"end":{"line":411,"column":15}},"loc":{"start":{"line":411,"column":19},"end":{"line":411,"column":28}}},"65":{"name":"(anonymous_65)","decl":{"start":{"line":413,"column":31},"end":{"line":413,"column":null}},"loc":{"start":{"line":418,"column":20},"end":{"line":435,"column":5}}},"66":{"name":"(anonymous_66)","decl":{"start":{"line":425,"column":14},"end":{"line":425,"column":15}},"loc":{"start":{"line":425,"column":18},"end":{"line":434,"column":7}}},"67":{"name":"(anonymous_67)","decl":{"start":{"line":429,"column":33},"end":{"line":429,"column":34}},"loc":{"start":{"line":429,"column":37},"end":{"line":432,"column":11}}},"68":{"name":"(anonymous_68)","decl":{"start":{"line":436,"column":34},"end":{"line":436,"column":null}},"loc":{"start":{"line":440,"column":20},"end":{"line":457,"column":5}}},"69":{"name":"(anonymous_69)","decl":{"start":{"line":447,"column":14},"end":{"line":447,"column":15}},"loc":{"start":{"line":447,"column":18},"end":{"line":456,"column":7}}},"70":{"name":"(anonymous_70)","decl":{"start":{"line":451,"column":33},"end":{"line":451,"column":34}},"loc":{"start":{"line":451,"column":37},"end":{"line":454,"column":11}}},"71":{"name":"(anonymous_71)","decl":{"start":{"line":458,"column":18},"end":{"line":458,"column":null}},"loc":{"start":{"line":458,"column":18},"end":{"line":463,"column":5}}},"72":{"name":"(anonymous_72)","decl":{"start":{"line":462,"column":14},"end":{"line":462,"column":15}},"loc":{"start":{"line":462,"column":19},"end":{"line":462,"column":28}}},"73":{"name":"(anonymous_73)","decl":{"start":{"line":464,"column":23},"end":{"line":464,"column":null}},"loc":{"start":{"line":464,"column":23},"end":{"line":469,"column":5}}},"74":{"name":"(anonymous_74)","decl":{"start":{"line":468,"column":14},"end":{"line":468,"column":15}},"loc":{"start":{"line":468,"column":19},"end":{"line":468,"column":28}}},"75":{"name":"(anonymous_75)","decl":{"start":{"line":470,"column":23},"end":{"line":470,"column":24}},"loc":{"start":{"line":470,"column":68},"end":{"line":493,"column":5}}},"76":{"name":"(anonymous_76)","decl":{"start":{"line":483,"column":14},"end":{"line":483,"column":15}},"loc":{"start":{"line":483,"column":18},"end":{"line":492,"column":7}}},"77":{"name":"(anonymous_77)","decl":{"start":{"line":487,"column":33},"end":{"line":487,"column":34}},"loc":{"start":{"line":487,"column":37},"end":{"line":490,"column":11}}},"78":{"name":"(anonymous_78)","decl":{"start":{"line":494,"column":25},"end":{"line":494,"column":null}},"loc":{"start":{"line":494,"column":25},"end":{"line":500,"column":5}}},"79":{"name":"(anonymous_79)","decl":{"start":{"line":499,"column":14},"end":{"line":499,"column":15}},"loc":{"start":{"line":499,"column":19},"end":{"line":499,"column":28}}},"80":{"name":"(anonymous_80)","decl":{"start":{"line":501,"column":26},"end":{"line":501,"column":27}},"loc":{"start":{"line":501,"column":74},"end":{"line":513,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":142,"column":8},"end":{"line":149,"column":null}},"type":"if","locations":[{"start":{"line":142,"column":8},"end":{"line":149,"column":null}},{"start":{"line":144,"column":15},"end":{"line":149,"column":null}}]},"1":{"loc":{"start":{"line":146,"column":25},"end":{"line":146,"column":64}},"type":"binary-expr","locations":[{"start":{"line":146,"column":25},"end":{"line":146,"column":35}},{"start":{"line":146,"column":39},"end":{"line":146,"column":64}}]},"2":{"loc":{"start":{"line":146,"column":25},"end":{"line":146,"column":35}},"type":"cond-expr","locations":[{"start":{"line":146,"column":28},"end":{"line":146,"column":30}},{"start":{"line":146,"column":25},"end":{"line":146,"column":35}}]},"3":{"loc":{"start":{"line":146,"column":25},"end":{"line":146,"column":30}},"type":"binary-expr","locations":[{"start":{"line":146,"column":25},"end":{"line":146,"column":30}},{"start":{"line":146,"column":25},"end":{"line":146,"column":30}}]},"4":{"loc":{"start":{"line":157,"column":9},"end":{"line":157,"column":55}},"type":"cond-expr","locations":[{"start":{"line":157,"column":27},"end":{"line":157,"column":50}},{"start":{"line":157,"column":53},"end":{"line":157,"column":55}}]},"5":{"loc":{"start":{"line":162,"column":8},"end":{"line":166,"column":null}},"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":166,"column":null}},{"start":{"line":164,"column":15},"end":{"line":166,"column":null}}]},"6":{"loc":{"start":{"line":180,"column":8},"end":{"line":184,"column":null}},"type":"if","locations":[{"start":{"line":180,"column":8},"end":{"line":184,"column":null}},{"start":{"line":182,"column":15},"end":{"line":184,"column":null}}]},"7":{"loc":{"start":{"line":202,"column":14},"end":{"line":204,"column":32}},"type":"binary-expr","locations":[{"start":{"line":202,"column":14},"end":{"line":202,"column":44}},{"start":{"line":203,"column":14},"end":{"line":203,"column":43}},{"start":{"line":204,"column":14},"end":{"line":204,"column":32}}]},"8":{"loc":{"start":{"line":231,"column":8},"end":{"line":238,"column":null}},"type":"if","locations":[{"start":{"line":231,"column":8},"end":{"line":238,"column":null}},{"start":{"line":233,"column":15},"end":{"line":238,"column":null}}]},"9":{"loc":{"start":{"line":235,"column":25},"end":{"line":235,"column":71}},"type":"binary-expr","locations":[{"start":{"line":235,"column":25},"end":{"line":235,"column":43}},{"start":{"line":235,"column":47},"end":{"line":235,"column":71}}]},"10":{"loc":{"start":{"line":235,"column":25},"end":{"line":235,"column":43}},"type":"cond-expr","locations":[{"start":{"line":235,"column":28},"end":{"line":235,"column":30}},{"start":{"line":235,"column":25},"end":{"line":235,"column":43}}]},"11":{"loc":{"start":{"line":235,"column":25},"end":{"line":235,"column":30}},"type":"binary-expr","locations":[{"start":{"line":235,"column":25},"end":{"line":235,"column":30}},{"start":{"line":235,"column":25},"end":{"line":235,"column":30}}]},"12":{"loc":{"start":{"line":249,"column":8},"end":{"line":256,"column":null}},"type":"if","locations":[{"start":{"line":249,"column":8},"end":{"line":256,"column":null}},{"start":{"line":251,"column":15},"end":{"line":256,"column":null}}]},"13":{"loc":{"start":{"line":253,"column":25},"end":{"line":253,"column":71}},"type":"binary-expr","locations":[{"start":{"line":253,"column":25},"end":{"line":253,"column":43}},{"start":{"line":253,"column":47},"end":{"line":253,"column":71}}]},"14":{"loc":{"start":{"line":253,"column":25},"end":{"line":253,"column":43}},"type":"cond-expr","locations":[{"start":{"line":253,"column":28},"end":{"line":253,"column":30}},{"start":{"line":253,"column":25},"end":{"line":253,"column":43}}]},"15":{"loc":{"start":{"line":253,"column":25},"end":{"line":253,"column":30}},"type":"binary-expr","locations":[{"start":{"line":253,"column":25},"end":{"line":253,"column":30}},{"start":{"line":253,"column":25},"end":{"line":253,"column":30}}]},"16":{"loc":{"start":{"line":268,"column":8},"end":{"line":275,"column":null}},"type":"if","locations":[{"start":{"line":268,"column":8},"end":{"line":275,"column":null}},{"start":{"line":270,"column":15},"end":{"line":275,"column":null}}]},"17":{"loc":{"start":{"line":272,"column":25},"end":{"line":272,"column":71}},"type":"binary-expr","locations":[{"start":{"line":272,"column":25},"end":{"line":272,"column":43}},{"start":{"line":272,"column":47},"end":{"line":272,"column":71}}]},"18":{"loc":{"start":{"line":272,"column":25},"end":{"line":272,"column":43}},"type":"cond-expr","locations":[{"start":{"line":272,"column":28},"end":{"line":272,"column":30}},{"start":{"line":272,"column":25},"end":{"line":272,"column":43}}]},"19":{"loc":{"start":{"line":272,"column":25},"end":{"line":272,"column":30}},"type":"binary-expr","locations":[{"start":{"line":272,"column":25},"end":{"line":272,"column":30}},{"start":{"line":272,"column":25},"end":{"line":272,"column":30}}]},"20":{"loc":{"start":{"line":290,"column":8},"end":{"line":294,"column":null}},"type":"if","locations":[{"start":{"line":290,"column":8},"end":{"line":294,"column":null}},{"start":{"line":292,"column":15},"end":{"line":294,"column":null}}]},"21":{"loc":{"start":{"line":304,"column":8},"end":{"line":308,"column":null}},"type":"if","locations":[{"start":{"line":304,"column":8},"end":{"line":308,"column":null}},{"start":{"line":306,"column":15},"end":{"line":308,"column":null}}]},"22":{"loc":{"start":{"line":327,"column":8},"end":{"line":331,"column":null}},"type":"if","locations":[{"start":{"line":327,"column":8},"end":{"line":331,"column":null}},{"start":{"line":329,"column":15},"end":{"line":331,"column":null}}]},"23":{"loc":{"start":{"line":341,"column":8},"end":{"line":345,"column":null}},"type":"if","locations":[{"start":{"line":341,"column":8},"end":{"line":345,"column":null}},{"start":{"line":343,"column":15},"end":{"line":345,"column":null}}]},"24":{"loc":{"start":{"line":359,"column":8},"end":{"line":363,"column":null}},"type":"if","locations":[{"start":{"line":359,"column":8},"end":{"line":363,"column":null}},{"start":{"line":361,"column":15},"end":{"line":363,"column":null}}]},"25":{"loc":{"start":{"line":375,"column":16},"end":{"line":375,"column":34}},"type":"binary-expr","locations":[{"start":{"line":375,"column":16},"end":{"line":375,"column":25}},{"start":{"line":375,"column":29},"end":{"line":375,"column":34}}]},"26":{"loc":{"start":{"line":376,"column":15},"end":{"line":376,"column":32}},"type":"binary-expr","locations":[{"start":{"line":376,"column":15},"end":{"line":376,"column":23}},{"start":{"line":376,"column":27},"end":{"line":376,"column":32}}]},"27":{"loc":{"start":{"line":377,"column":18},"end":{"line":377,"column":38}},"type":"binary-expr","locations":[{"start":{"line":377,"column":18},"end":{"line":377,"column":29}},{"start":{"line":377,"column":33},"end":{"line":377,"column":38}}]},"28":{"loc":{"start":{"line":385,"column":8},"end":{"line":389,"column":null}},"type":"if","locations":[{"start":{"line":385,"column":8},"end":{"line":389,"column":null}},{"start":{"line":387,"column":15},"end":{"line":389,"column":null}}]},"29":{"loc":{"start":{"line":426,"column":8},"end":{"line":433,"column":null}},"type":"if","locations":[{"start":{"line":426,"column":8},"end":{"line":433,"column":null}},{"start":{"line":428,"column":15},"end":{"line":433,"column":null}}]},"30":{"loc":{"start":{"line":430,"column":25},"end":{"line":430,"column":61}},"type":"binary-expr","locations":[{"start":{"line":430,"column":25},"end":{"line":430,"column":35}},{"start":{"line":430,"column":39},"end":{"line":430,"column":61}}]},"31":{"loc":{"start":{"line":430,"column":25},"end":{"line":430,"column":35}},"type":"cond-expr","locations":[{"start":{"line":430,"column":28},"end":{"line":430,"column":30}},{"start":{"line":430,"column":25},"end":{"line":430,"column":35}}]},"32":{"loc":{"start":{"line":430,"column":25},"end":{"line":430,"column":30}},"type":"binary-expr","locations":[{"start":{"line":430,"column":25},"end":{"line":430,"column":30}},{"start":{"line":430,"column":25},"end":{"line":430,"column":30}}]},"33":{"loc":{"start":{"line":448,"column":8},"end":{"line":455,"column":null}},"type":"if","locations":[{"start":{"line":448,"column":8},"end":{"line":455,"column":null}},{"start":{"line":450,"column":15},"end":{"line":455,"column":null}}]},"34":{"loc":{"start":{"line":452,"column":25},"end":{"line":452,"column":64}},"type":"binary-expr","locations":[{"start":{"line":452,"column":25},"end":{"line":452,"column":35}},{"start":{"line":452,"column":39},"end":{"line":452,"column":64}}]},"35":{"loc":{"start":{"line":452,"column":25},"end":{"line":452,"column":35}},"type":"cond-expr","locations":[{"start":{"line":452,"column":28},"end":{"line":452,"column":30}},{"start":{"line":452,"column":25},"end":{"line":452,"column":35}}]},"36":{"loc":{"start":{"line":452,"column":25},"end":{"line":452,"column":30}},"type":"binary-expr","locations":[{"start":{"line":452,"column":25},"end":{"line":452,"column":30}},{"start":{"line":452,"column":25},"end":{"line":452,"column":30}}]},"37":{"loc":{"start":{"line":484,"column":8},"end":{"line":491,"column":null}},"type":"if","locations":[{"start":{"line":484,"column":8},"end":{"line":491,"column":null}},{"start":{"line":486,"column":15},"end":{"line":491,"column":null}}]},"38":{"loc":{"start":{"line":488,"column":25},"end":{"line":488,"column":57}},"type":"binary-expr","locations":[{"start":{"line":488,"column":25},"end":{"line":488,"column":35}},{"start":{"line":488,"column":39},"end":{"line":488,"column":57}}]},"39":{"loc":{"start":{"line":488,"column":25},"end":{"line":488,"column":35}},"type":"cond-expr","locations":[{"start":{"line":488,"column":28},"end":{"line":488,"column":30}},{"start":{"line":488,"column":25},"end":{"line":488,"column":35}}]},"40":{"loc":{"start":{"line":488,"column":25},"end":{"line":488,"column":30}},"type":"binary-expr","locations":[{"start":{"line":488,"column":25},"end":{"line":488,"column":30}},{"start":{"line":488,"column":25},"end":{"line":488,"column":30}}]}},"s":{"0":6,"1":6,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":5},"f":{"0":6,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/collapse.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/collapse.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":42}},"2":{"start":{"line":5,"column":36},"end":{"line":5,"column":51}},"3":{"start":{"line":5,"column":18},"end":{"line":5,"column":20}},"4":{"start":{"line":5,"column":32},"end":{"line":5,"column":36}},"5":{"start":{"line":6,"column":29},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":2},"end":{"line":20,"column":4}},"7":{"start":{"line":13,"column":27},"end":{"line":13,"column":null}},"8":{"start":{"line":13,"column":50},"end":{"line":13,"column":56}},"9":{"start":{"line":60,"column":9},"end":{"line":60,"column":17}},"10":{"start":{"line":23,"column":15},"end":{"line":28,"column":2}},"11":{"start":{"line":30,"column":27},"end":{"line":32,"column":2}},"12":{"start":{"line":34,"column":28},"end":{"line":36,"column":2}},"13":{"start":{"line":38,"column":14},"end":{"line":44,"column":2}},"14":{"start":{"line":46,"column":16},"end":{"line":48,"column":null}},"15":{"start":{"line":51,"column":15},"end":{"line":53,"column":null}},"16":{"start":{"line":56,"column":15},"end":{"line":58,"column":2}}},"fnMap":{"0":{"name":"Collapse","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":17}},"loc":{"start":{"line":4,"column":68},"end":{"line":21,"column":1}}},"1":{"name":"(anonymous_9)","decl":{"start":{"line":13,"column":21},"end":{"line":13,"column":27}},"loc":{"start":{"line":13,"column":21},"end":{"line":13,"column":39}}},"2":{"name":"(anonymous_10)","decl":{"start":{"line":13,"column":40},"end":{"line":13,"column":41}},"loc":{"start":{"line":13,"column":45},"end":{"line":13,"column":51}}}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":21},"end":{"line":10,"column":73}},"type":"cond-expr","locations":[{"start":{"line":10,"column":33},"end":{"line":10,"column":51}},{"start":{"line":10,"column":54},"end":{"line":10,"column":73}}]},"1":{"loc":{"start":{"line":12,"column":19},"end":{"line":12,"column":53}},"type":"cond-expr","locations":[{"start":{"line":12,"column":31},"end":{"line":12,"column":40}},{"start":{"line":12,"column":43},"end":{"line":12,"column":53}}]},"2":{"loc":{"start":{"line":18,"column":7},"end":{"line":18,"column":56}},"type":"binary-expr","locations":[{"start":{"line":18,"column":7},"end":{"line":18,"column":16}},{"start":{"line":18,"column":20},"end":{"line":18,"column":56}}]}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/data.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/data.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":54}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":90}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":58}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":68}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":62}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":48}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":47}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":37}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":50}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":64}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":59}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":66}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":62}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":48}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":52}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":41}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":48}},"17":{"start":{"line":19,"column":18},"end":{"line":97,"column":2}},"18":{"start":{"line":99,"column":9},"end":{"line":99,"column":18}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/nav.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/nav.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":42}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":13,"column":36},"end":{"line":13,"column":42}},"4":{"start":{"line":15,"column":42},"end":{"line":15,"column":73}},"5":{"start":{"line":15,"column":21},"end":{"line":15,"column":23}},"6":{"start":{"line":15,"column":38},"end":{"line":15,"column":42}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":16}},"9":{"start":{"line":23,"column":4},"end":{"line":25,"column":7}},"10":{"start":{"line":24,"column":6},"end":{"line":24,"column":33}},"11":{"start":{"line":28,"column":2},"end":{"line":56,"column":4}},"12":{"start":{"line":32,"column":10},"end":{"line":52,"column":null}},"13":{"start":{"line":44,"column":33},"end":{"line":44,"column":null}},"14":{"start":{"line":59,"column":17},"end":{"line":62,"column":2}},"15":{"start":{"line":64,"column":16},"end":{"line":68,"column":2}},"16":{"start":{"line":70,"column":18},"end":{"line":74,"column":2}},"17":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}}},"fnMap":{"0":{"name":"Nav","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":12}},"loc":{"start":{"line":12,"column":28},"end":{"line":57,"column":1}}},"1":{"name":"fetchData","decl":{"start":{"line":22,"column":11},"end":{"line":22,"column":20}},"loc":{"start":{"line":22,"column":20},"end":{"line":26,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":23,"column":31},"end":{"line":23,"column":32}},"loc":{"start":{"line":23,"column":35},"end":{"line":25,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":31,"column":23},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":28},"end":{"line":32,"column":22}}},"4":{"name":"(anonymous_10)","decl":{"start":{"line":44,"column":27},"end":{"line":44,"column":33}},"loc":{"start":{"line":44,"column":27},"end":{"line":44,"column":41}}}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":20,"column":null}}]},"1":{"loc":{"start":{"line":32,"column":10},"end":{"line":51,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":12},"end":{"line":48,"column":null}},{"start":{"line":51,"column":12},"end":{"line":51,"column":33}}]},"2":{"loc":{"start":{"line":32,"column":10},"end":{"line":32,"column":75}},"type":"binary-expr","locations":[{"start":{"line":32,"column":10},"end":{"line":32,"column":41}},{"start":{"line":32,"column":45},"end":{"line":32,"column":74}}]},"3":{"loc":{"start":{"line":32,"column":10},"end":{"line":32,"column":41}},"type":"cond-expr","locations":[{"start":{"line":32,"column":22},"end":{"line":32,"column":24}},{"start":{"line":32,"column":10},"end":{"line":32,"column":41}}]},"4":{"loc":{"start":{"line":32,"column":10},"end":{"line":32,"column":24}},"type":"binary-expr","locations":[{"start":{"line":32,"column":10},"end":{"line":32,"column":24}},{"start":{"line":32,"column":10},"end":{"line":32,"column":24}}]},"5":{"loc":{"start":{"line":32,"column":45},"end":{"line":32,"column":74}},"type":"cond-expr","locations":[{"start":{"line":32,"column":57},"end":{"line":32,"column":59}},{"start":{"line":32,"column":45},"end":{"line":32,"column":74}}]},"6":{"loc":{"start":{"line":32,"column":45},"end":{"line":32,"column":59}},"type":"binary-expr","locations":[{"start":{"line":32,"column":45},"end":{"line":32,"column":59}},{"start":{"line":32,"column":45},"end":{"line":32,"column":59}}]},"7":{"loc":{"start":{"line":33,"column":12},"end":{"line":48,"column":null}},"type":"cond-expr","locations":[{"start":{"line":34,"column":14},"end":{"line":37,"column":null}},{"start":{"line":40,"column":14},"end":{"line":47,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":12,"4":4,"5":4,"6":4,"7":4,"8":2,"9":2,"10":2,"11":4,"12":68,"13":0,"14":1,"15":1,"16":1,"17":1},"f":{"0":4,"1":2,"2":2,"3":68,"4":0},"b":{"0":[2],"1":[18,50],"2":[68,66],"3":[34,34],"4":[68,34],"5":[34,32],"6":[66,32],"7":[0,18]}} +,"/Users/rachelchen/snuba/snuba/admin/static/query_editor.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/query_editor.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":36}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":68}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":49}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":49}},"5":{"start":{"line":23,"column":14},"end":{"line":23,"column":27}},"6":{"start":{"line":24,"column":2},"end":{"line":28,"column":5}},"7":{"start":{"line":25,"column":4},"end":{"line":27,"column":null}},"8":{"start":{"line":26,"column":6},"end":{"line":26,"column":63}},"9":{"start":{"line":29,"column":2},"end":{"line":29,"column":15}},"10":{"start":{"line":19,"column":0},"end":{"line":19,"column":16}},"11":{"start":{"line":37,"column":2},"end":{"line":44,"column":4}},"12":{"start":{"line":38,"column":22},"end":{"line":42,"column":null}},"13":{"start":{"line":33,"column":0},"end":{"line":33,"column":16}},"14":{"start":{"line":51,"column":28},"end":{"line":51,"column":48}},"15":{"start":{"line":51,"column":14},"end":{"line":51,"column":16}},"16":{"start":{"line":51,"column":24},"end":{"line":51,"column":28}},"17":{"start":{"line":52,"column":15},"end":{"line":52,"column":35}},"18":{"start":{"line":55,"column":44},"end":{"line":58,"column":4}},"19":{"start":{"line":55,"column":22},"end":{"line":55,"column":24}},"20":{"start":{"line":55,"column":40},"end":{"line":55,"column":44}},"21":{"start":{"line":60,"column":50},"end":{"line":61,"column":null}},"22":{"start":{"line":60,"column":25},"end":{"line":60,"column":27}},"23":{"start":{"line":60,"column":46},"end":{"line":60,"column":50}},"24":{"start":{"line":63,"column":64},"end":{"line":65,"column":14}},"25":{"start":{"line":63,"column":32},"end":{"line":63,"column":34}},"26":{"start":{"line":63,"column":60},"end":{"line":63,"column":64}},"27":{"start":{"line":67,"column":24},"end":{"line":67,"column":45}},"28":{"start":{"line":69,"column":2},"end":{"line":78,"column":22}},"29":{"start":{"line":70,"column":27},"end":{"line":73,"column":null}},"30":{"start":{"line":75,"column":4},"end":{"line":77,"column":6}},"31":{"start":{"line":76,"column":6},"end":{"line":76,"column":null}},"32":{"start":{"line":80,"column":2},"end":{"line":84,"column":40}},"33":{"start":{"line":81,"column":21},"end":{"line":81,"column":67}},"34":{"start":{"line":82,"column":4},"end":{"line":82,"column":23}},"35":{"start":{"line":83,"column":4},"end":{"line":83,"column":34}},"36":{"start":{"line":87,"column":4},"end":{"line":87,"column":78}},"37":{"start":{"line":87,"column":41},"end":{"line":87,"column":77}},"38":{"start":{"line":91,"column":4},"end":{"line":115,"column":6}},"39":{"start":{"line":98,"column":44},"end":{"line":99,"column":null}},"40":{"start":{"line":99,"column":37},"end":{"line":99,"column":null}},"41":{"start":{"line":101,"column":14},"end":{"line":101,"column":66}},"42":{"start":{"line":102,"column":14},"end":{"line":102,"column":67}},"43":{"start":{"line":108,"column":41},"end":{"line":108,"column":null}},"44":{"start":{"line":119,"column":39},"end":{"line":119,"column":41}},"45":{"start":{"line":120,"column":4},"end":{"line":139,"column":7}},"46":{"start":{"line":121,"column":6},"end":{"line":138,"column":8}},"47":{"start":{"line":130,"column":18},"end":{"line":130,"column":68}},"48":{"start":{"line":140,"column":4},"end":{"line":140,"column":19}},"49":{"start":{"line":143,"column":2},"end":{"line":163,"column":4}},"50":{"start":{"line":155,"column":12},"end":{"line":155,"column":50}},"51":{"start":{"line":156,"column":12},"end":{"line":156,"column":39}},"52":{"start":{"line":166,"column":29},"end":{"line":168,"column":2}},"53":{"start":{"line":170,"column":0},"end":{"line":170,"column":27}}},"fnMap":{"0":{"name":"generateQuery","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":29}},"loc":{"start":{"line":21,"column":36},"end":{"line":30,"column":1}}},"1":{"name":"(anonymous_9)","decl":{"start":{"line":24,"column":40},"end":{"line":24,"column":41}},"loc":{"start":{"line":24,"column":46},"end":{"line":28,"column":3}}},"2":{"name":"mergeQueryParamValues","decl":{"start":{"line":33,"column":16},"end":{"line":33,"column":37}},"loc":{"start":{"line":35,"column":39},"end":{"line":45,"column":1}}},"3":{"name":"(anonymous_11)","decl":{"start":{"line":38,"column":4},"end":{"line":38,"column":5}},"loc":{"start":{"line":38,"column":17},"end":{"line":38,"column":null}}},"4":{"name":"QueryEditor","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":20}},"loc":{"start":{"line":50,"column":1},"end":{"line":164,"column":1}}},"5":{"name":"(anonymous_13)","decl":{"start":{"line":69,"column":12},"end":{"line":69,"column":null}},"loc":{"start":{"line":69,"column":12},"end":{"line":78,"column":3}}},"6":{"name":"(anonymous_14)","decl":{"start":{"line":75,"column":24},"end":{"line":75,"column":25}},"loc":{"start":{"line":75,"column":44},"end":{"line":76,"column":27}}},"7":{"name":"(anonymous_15)","decl":{"start":{"line":80,"column":12},"end":{"line":80,"column":null}},"loc":{"start":{"line":80,"column":12},"end":{"line":84,"column":3}}},"8":{"name":"updateQueryParameter","decl":{"start":{"line":86,"column":11},"end":{"line":86,"column":31}},"loc":{"start":{"line":86,"column":59},"end":{"line":88,"column":3}}},"9":{"name":"(anonymous_17)","decl":{"start":{"line":87,"column":24},"end":{"line":87,"column":25}},"loc":{"start":{"line":87,"column":36},"end":{"line":87,"column":47}}},"10":{"name":"renderPredefinedQueriesSelectors","decl":{"start":{"line":90,"column":11},"end":{"line":90,"column":43}},"loc":{"start":{"line":90,"column":43},"end":{"line":116,"column":3}}},"11":{"name":"(anonymous_19)","decl":{"start":{"line":97,"column":22},"end":{"line":97,"column":23}},"loc":{"start":{"line":97,"column":28},"end":{"line":103,"column":13}}},"12":{"name":"(anonymous_20)","decl":{"start":{"line":99,"column":16},"end":{"line":99,"column":17}},"loc":{"start":{"line":99,"column":32},"end":{"line":99,"column":52}}},"13":{"name":"(anonymous_21)","decl":{"start":{"line":108,"column":20},"end":{"line":108,"column":21}},"loc":{"start":{"line":108,"column":36},"end":{"line":108,"column":56}}},"14":{"name":"renderParameterSetters","decl":{"start":{"line":118,"column":11},"end":{"line":118,"column":33}},"loc":{"start":{"line":118,"column":33},"end":{"line":141,"column":3}}},"15":{"name":"(anonymous_23)","decl":{"start":{"line":120,"column":42},"end":{"line":120,"column":43}},"loc":{"start":{"line":120,"column":52},"end":{"line":139,"column":5}}},"16":{"name":"(anonymous_24)","decl":{"start":{"line":129,"column":26},"end":{"line":129,"column":27}},"loc":{"start":{"line":129,"column":30},"end":{"line":131,"column":17}}},"17":{"name":"(anonymous_25)","decl":{"start":{"line":154,"column":20},"end":{"line":154,"column":21}},"loc":{"start":{"line":154,"column":29},"end":{"line":157,"column":11}}}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":null}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":27,"column":null}}]},"1":{"loc":{"start":{"line":41,"column":8},"end":{"line":41,"column":78}},"type":"cond-expr","locations":[{"start":{"line":41,"column":43},"end":{"line":41,"column":73}},{"start":{"line":41,"column":76},"end":{"line":41,"column":78}}]},"2":{"loc":{"start":{"line":96,"column":19},"end":{"line":96,"column":63}},"type":"cond-expr","locations":[{"start":{"line":96,"column":48},"end":{"line":96,"column":52}},{"start":{"line":96,"column":52},"end":{"line":96,"column":63}}]},"3":{"loc":{"start":{"line":96,"column":19},"end":{"line":96,"column":52}},"type":"binary-expr","locations":[{"start":{"line":96,"column":19},"end":{"line":96,"column":52}},{"start":{"line":96,"column":48},"end":{"line":96,"column":52}}]},"4":{"loc":{"start":{"line":96,"column":19},"end":{"line":96,"column":48}},"type":"cond-expr","locations":[{"start":{"line":96,"column":42},"end":{"line":96,"column":44}},{"start":{"line":96,"column":19},"end":{"line":96,"column":48}}]},"5":{"loc":{"start":{"line":96,"column":19},"end":{"line":96,"column":44}},"type":"binary-expr","locations":[{"start":{"line":96,"column":19},"end":{"line":96,"column":44}},{"start":{"line":96,"column":19},"end":{"line":96,"column":44}}]},"6":{"loc":{"start":{"line":98,"column":44},"end":{"line":99,"column":null}},"type":"cond-expr","locations":[{"start":{"line":98,"column":73},"end":{"line":98,"column":75}},{"start":{"line":98,"column":73},"end":{"line":99,"column":null}}]},"7":{"loc":{"start":{"line":98,"column":44},"end":{"line":98,"column":75}},"type":"binary-expr","locations":[{"start":{"line":98,"column":44},"end":{"line":98,"column":75}},{"start":{"line":98,"column":73},"end":{"line":98,"column":75}}]},"8":{"loc":{"start":{"line":98,"column":44},"end":{"line":98,"column":73}},"type":"cond-expr","locations":[{"start":{"line":98,"column":49},"end":{"line":98,"column":51}},{"start":{"line":98,"column":44},"end":{"line":98,"column":73}}]},"9":{"loc":{"start":{"line":98,"column":44},"end":{"line":98,"column":51}},"type":"binary-expr","locations":[{"start":{"line":98,"column":44},"end":{"line":98,"column":51}},{"start":{"line":98,"column":44},"end":{"line":98,"column":51}}]},"10":{"loc":{"start":{"line":102,"column":31},"end":{"line":102,"column":65}},"type":"cond-expr","locations":[{"start":{"line":102,"column":59},"end":{"line":102,"column":63}},{"start":{"line":102,"column":63},"end":{"line":102,"column":65}}]},"11":{"loc":{"start":{"line":102,"column":31},"end":{"line":102,"column":63}},"type":"binary-expr","locations":[{"start":{"line":102,"column":31},"end":{"line":102,"column":63}},{"start":{"line":102,"column":59},"end":{"line":102,"column":63}}]},"12":{"loc":{"start":{"line":102,"column":31},"end":{"line":102,"column":59}},"type":"cond-expr","locations":[{"start":{"line":102,"column":54},"end":{"line":102,"column":56}},{"start":{"line":102,"column":31},"end":{"line":102,"column":59}}]},"13":{"loc":{"start":{"line":102,"column":31},"end":{"line":102,"column":56}},"type":"binary-expr","locations":[{"start":{"line":102,"column":31},"end":{"line":102,"column":56}},{"start":{"line":102,"column":31},"end":{"line":102,"column":56}}]},"14":{"loc":{"start":{"line":106,"column":14},"end":{"line":110,"column":20}},"type":"cond-expr","locations":[{"start":{"line":107,"column":18},"end":{"line":108,"column":null}},{"start":{"line":110,"column":18},"end":{"line":110,"column":20}}]},"15":{"loc":{"start":{"line":125,"column":15},"end":{"line":125,"column":50}},"type":"cond-expr","locations":[{"start":{"line":125,"column":45},"end":{"line":125,"column":48}},{"start":{"line":125,"column":48},"end":{"line":125,"column":50}}]},"16":{"loc":{"start":{"line":125,"column":15},"end":{"line":125,"column":48}},"type":"binary-expr","locations":[{"start":{"line":125,"column":15},"end":{"line":125,"column":48}},{"start":{"line":125,"column":45},"end":{"line":125,"column":48}}]},"17":{"loc":{"start":{"line":145,"column":7},"end":{"line":146,"column":42}},"type":"binary-expr","locations":[{"start":{"line":145,"column":7},"end":{"line":145,"column":43}},{"start":{"line":146,"column":8},"end":{"line":146,"column":42}}]},"18":{"loc":{"start":{"line":147,"column":7},"end":{"line":149,"column":14}},"type":"cond-expr","locations":[{"start":{"line":148,"column":8},"end":{"line":148,"column":53}},{"start":{"line":149,"column":10},"end":{"line":149,"column":14}}]},"19":{"loc":{"start":{"line":147,"column":7},"end":{"line":147,"column":43}},"type":"cond-expr","locations":[{"start":{"line":147,"column":30},"end":{"line":147,"column":32}},{"start":{"line":147,"column":7},"end":{"line":147,"column":43}}]},"20":{"loc":{"start":{"line":147,"column":7},"end":{"line":147,"column":32}},"type":"binary-expr","locations":[{"start":{"line":147,"column":7},"end":{"line":147,"column":32}},{"start":{"line":147,"column":7},"end":{"line":147,"column":32}}]},"21":{"loc":{"start":{"line":148,"column":12},"end":{"line":148,"column":48}},"type":"cond-expr","locations":[{"start":{"line":148,"column":35},"end":{"line":148,"column":37}},{"start":{"line":148,"column":12},"end":{"line":148,"column":48}}]},"22":{"loc":{"start":{"line":148,"column":12},"end":{"line":148,"column":37}},"type":"binary-expr","locations":[{"start":{"line":148,"column":12},"end":{"line":148,"column":37}},{"start":{"line":148,"column":12},"end":{"line":148,"column":37}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":28,"6":28,"7":14,"8":3,"9":28,"10":3,"11":16,"12":9,"13":3,"14":38,"15":38,"16":38,"17":38,"18":38,"19":38,"20":38,"21":38,"22":38,"23":38,"24":38,"25":38,"26":38,"27":38,"28":38,"29":15,"30":15,"31":15,"32":38,"33":26,"34":26,"35":26,"36":0,"37":0,"38":21,"39":4,"40":6,"41":4,"42":4,"43":42,"44":38,"45":38,"46":16,"47":0,"48":38,"49":38,"50":6,"51":6,"52":3,"53":3},"f":{"0":28,"1":14,"2":16,"3":9,"4":38,"5":15,"6":15,"7":26,"8":0,"9":0,"10":21,"11":4,"12":6,"13":42,"14":38,"15":16,"16":0,"17":6},"b":{"0":[3],"1":[4,5],"2":[12,9],"3":[21,21],"4":[9,12],"5":[21,21],"6":[0,4],"7":[4,4],"8":[0,4],"9":[4,4],"10":[4,0],"11":[4,4],"12":[0,4],"13":[4,4],"14":[21,0],"15":[0,16],"16":[16,16],"17":[38,21],"18":[12,26],"19":[26,12],"20":[38,38],"21":[0,12],"22":[12,12]}} +,"/Users/rachelchen/snuba/snuba/admin/static/query_history.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/query_history.tsx","statementMap":{"0":{"start":{"line":2,"column":21},"end":{"line":2,"column":22}},"1":{"start":{"line":5,"column":21},"end":{"line":5,"column":37}},"2":{"start":{"line":6,"column":2},"end":{"line":25,"column":null}},"3":{"start":{"line":7,"column":4},"end":{"line":9,"column":null}},"4":{"start":{"line":8,"column":6},"end":{"line":8,"column":13}},"5":{"start":{"line":10,"column":26},"end":{"line":10,"column":58}},"6":{"start":{"line":11,"column":25},"end":{"line":11,"column":27}},"7":{"start":{"line":12,"column":4},"end":{"line":14,"column":null}},"8":{"start":{"line":13,"column":6},"end":{"line":13,"column":42}},"9":{"start":{"line":15,"column":4},"end":{"line":17,"column":null}},"10":{"start":{"line":16,"column":6},"end":{"line":16,"column":29}},"11":{"start":{"line":18,"column":4},"end":{"line":20,"column":null}},"12":{"start":{"line":19,"column":6},"end":{"line":19,"column":20}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":62}},"14":{"start":{"line":24,"column":4},"end":{"line":24,"column":40}},"15":{"start":{"line":4,"column":0},"end":{"line":4,"column":16}},"16":{"start":{"line":29,"column":21},"end":{"line":29,"column":37}},"17":{"start":{"line":30,"column":24},"end":{"line":30,"column":56}},"18":{"start":{"line":31,"column":2},"end":{"line":39,"column":null}},"19":{"start":{"line":32,"column":4},"end":{"line":36,"column":null}},"20":{"start":{"line":33,"column":6},"end":{"line":33,"column":39}},"21":{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":14}},"23":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}}},"fnMap":{"0":{"name":"setRecentHistory","decl":{"start":{"line":4,"column":16},"end":{"line":4,"column":32}},"loc":{"start":{"line":4,"column":56},"end":{"line":26,"column":1}}},"1":{"name":"getRecentHistory","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":32}},"loc":{"start":{"line":28,"column":44},"end":{"line":40,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":4},"end":{"line":9,"column":null}},"type":"if","locations":[{"start":{"line":7,"column":4},"end":{"line":9,"column":null}}]},"1":{"loc":{"start":{"line":12,"column":4},"end":{"line":14,"column":null}},"type":"if","locations":[{"start":{"line":12,"column":4},"end":{"line":14,"column":null}}]},"2":{"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":null}},"type":"if","locations":[{"start":{"line":15,"column":4},"end":{"line":17,"column":null}}]},"3":{"loc":{"start":{"line":18,"column":4},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":4},"end":{"line":20,"column":null}}]},"4":{"loc":{"start":{"line":31,"column":2},"end":{"line":39,"column":null}},"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":39,"column":null}},{"start":{"line":37,"column":9},"end":{"line":39,"column":null}}]}},"s":{"0":3,"1":10,"2":10,"3":10,"4":0,"5":10,"6":10,"7":10,"8":6,"9":10,"10":10,"11":10,"12":1,"13":10,"14":0,"15":3,"16":10,"17":10,"18":10,"19":3,"20":3,"21":0,"22":7,"23":3},"f":{"0":10,"1":10},"b":{"0":[0],"1":[6],"2":[10],"3":[1],"4":[3,7]}} +,"/Users/rachelchen/snuba/snuba/admin/static/select.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/select.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":64}},"2":{"start":{"line":18,"column":15},"end":{"line":18,"column":52}},"3":{"start":{"line":19,"column":2},"end":{"line":19,"column":27}},"4":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"5":{"start":{"line":22,"column":19},"end":{"line":31,"column":null}},"6":{"start":{"line":23,"column":10},"end":{"line":23,"column":12}},"7":{"start":{"line":23,"column":17},"end":{"line":23,"column":22}},"8":{"start":{"line":23,"column":28},"end":{"line":23,"column":41}},"9":{"start":{"line":23,"column":51},"end":{"line":31,"column":null}},"10":{"start":{"line":35,"column":53},"end":{"line":35,"column":59}},"11":{"start":{"line":37,"column":4},"end":{"line":39,"column":null}},"12":{"start":{"line":38,"column":6},"end":{"line":38,"column":52}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":20}},"14":{"start":{"line":42,"column":2},"end":{"line":42,"column":17}},"15":{"start":{"line":43,"column":2},"end":{"line":56,"column":4}},"16":{"start":{"line":34,"column":0},"end":{"line":34,"column":16}}},"fnMap":{"0":{"name":"getParamFromStorage","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":35}},"loc":{"start":{"line":17,"column":47},"end":{"line":20,"column":1}}},"1":{"name":"(anonymous_10)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":3}},"loc":{"start":{"line":23,"column":46},"end":{"line":31,"column":null}}},"2":{"name":"CustomSelect","decl":{"start":{"line":34,"column":16},"end":{"line":34,"column":28}},"loc":{"start":{"line":34,"column":47},"end":{"line":57,"column":1}}},"3":{"name":"updateStorage","decl":{"start":{"line":36,"column":11},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":9},"end":{"line":19,"column":26}},"type":"cond-expr","locations":[{"start":{"line":19,"column":9},"end":{"line":19,"column":13}},{"start":{"line":19,"column":17},"end":{"line":19,"column":26}}]},"1":{"loc":{"start":{"line":19,"column":9},"end":{"line":19,"column":17}},"type":"binary-expr","locations":[{"start":{"line":19,"column":9},"end":{"line":19,"column":17}},{"start":{"line":19,"column":9},"end":{"line":19,"column":17}}]},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":39,"column":null}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":39,"column":null}}]}},"s":{"0":4,"1":4,"2":7,"3":7,"4":4,"5":4,"6":12,"7":12,"8":12,"9":12,"10":121,"11":5,"12":5,"13":5,"14":24,"15":24,"16":4},"f":{"0":7,"1":12,"2":25,"3":5},"b":{"0":[0,7],"1":[7,0],"2":[5]}} +,"/Users/rachelchen/snuba/snuba/admin/static/table.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/table.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"2":{"start":{"line":12,"column":28},"end":{"line":17,"column":2}},"3":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"4":{"start":{"line":22,"column":2},"end":{"line":22,"column":47}},"5":{"start":{"line":150,"column":35},"end":{"line":150,"column":58}},"6":{"start":{"line":33,"column":48},"end":{"line":33,"column":54}},"7":{"start":{"line":35,"column":27},"end":{"line":35,"column":59}},"8":{"start":{"line":36,"column":31},"end":{"line":36,"column":63}},"9":{"start":{"line":37,"column":26},"end":{"line":37,"column":77}},"10":{"start":{"line":37,"column":66},"end":{"line":37,"column":75}},"11":{"start":{"line":38,"column":23},"end":{"line":40,"column":25}},"12":{"start":{"line":41,"column":22},"end":{"line":43,"column":null}},"13":{"start":{"line":45,"column":23},"end":{"line":47,"column":null}},"14":{"start":{"line":49,"column":19},"end":{"line":51,"column":null}},"15":{"start":{"line":53,"column":19},"end":{"line":55,"column":null}},"16":{"start":{"line":58,"column":2},"end":{"line":89,"column":4}},"17":{"start":{"line":62,"column":40},"end":{"line":74,"column":12}},"18":{"start":{"line":78,"column":38},"end":{"line":86,"column":10}},"19":{"start":{"line":80,"column":38},"end":{"line":84,"column":14}},"20":{"start":{"line":150,"column":9},"end":{"line":150,"column":14}},"21":{"start":{"line":92,"column":15},"end":{"line":94,"column":2}},"22":{"start":{"line":96,"column":16},"end":{"line":101,"column":null}},"23":{"start":{"line":104,"column":20},"end":{"line":107,"column":2}},"24":{"start":{"line":109,"column":13},"end":{"line":113,"column":null}},"25":{"start":{"line":116,"column":13},"end":{"line":121,"column":null}},"26":{"start":{"line":128,"column":30},"end":{"line":128,"column":36}},"27":{"start":{"line":130,"column":2},"end":{"line":137,"column":4}},"28":{"start":{"line":133,"column":25},"end":{"line":133,"column":null}},"29":{"start":{"line":150,"column":16},"end":{"line":150,"column":33}},"30":{"start":{"line":140,"column":22},"end":{"line":148,"column":2}}},"fnMap":{"0":{"name":"createCustomTableStyles","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":32}},"loc":{"start":{"line":20,"column":58},"end":{"line":23,"column":1}}},"1":{"name":"Table","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":14}},"loc":{"start":{"line":32,"column":32},"end":{"line":90,"column":1}}},"2":{"name":"(anonymous_5)","decl":{"start":{"line":37,"column":54},"end":{"line":37,"column":55}},"loc":{"start":{"line":37,"column":61},"end":{"line":37,"column":69}}},"3":{"name":"(anonymous_6)","decl":{"start":{"line":62,"column":26},"end":{"line":62,"column":27}},"loc":{"start":{"line":62,"column":35},"end":{"line":62,"column":null}}},"4":{"name":"(anonymous_7)","decl":{"start":{"line":78,"column":21},"end":{"line":78,"column":22}},"loc":{"start":{"line":78,"column":33},"end":{"line":78,"column":null}}},"5":{"name":"(anonymous_8)","decl":{"start":{"line":80,"column":21},"end":{"line":80,"column":22}},"loc":{"start":{"line":80,"column":33},"end":{"line":80,"column":null}}},"6":{"name":"EditableTableCell","decl":{"start":{"line":124,"column":9},"end":{"line":124,"column":26}},"loc":{"start":{"line":127,"column":1},"end":{"line":138,"column":1}}},"7":{"name":"(anonymous_10)","decl":{"start":{"line":133,"column":16},"end":{"line":133,"column":17}},"loc":{"start":{"line":133,"column":20},"end":{"line":133,"column":33}}}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":20,"column":null}}]},"1":{"loc":{"start":{"line":36,"column":31},"end":{"line":36,"column":63}},"type":"cond-expr","locations":[{"start":{"line":36,"column":31},"end":{"line":36,"column":43}},{"start":{"line":36,"column":47},"end":{"line":36,"column":63}}]},"2":{"loc":{"start":{"line":36,"column":31},"end":{"line":36,"column":47}},"type":"binary-expr","locations":[{"start":{"line":36,"column":31},"end":{"line":36,"column":47}},{"start":{"line":36,"column":31},"end":{"line":36,"column":47}}]},"3":{"loc":{"start":{"line":38,"column":23},"end":{"line":40,"column":25}},"type":"cond-expr","locations":[{"start":{"line":39,"column":6},"end":{"line":39,"column":24}},{"start":{"line":40,"column":6},"end":{"line":40,"column":25}}]}},"s":{"0":5,"1":5,"2":5,"3":14,"4":14,"5":5,"6":62,"7":20,"8":20,"9":20,"10":89,"11":20,"12":20,"13":20,"14":20,"15":20,"16":20,"17":83,"18":6,"19":33,"20":5,"21":5,"22":5,"23":5,"24":5,"25":5,"26":0,"27":0,"28":0,"29":5,"30":5},"f":{"0":14,"1":22,"2":89,"3":83,"4":6,"5":33,"6":0,"7":0},"b":{"0":[0],"1":[20,0],"2":[20,20],"3":[14,6]}} +,"/Users/rachelchen/snuba/snuba/admin/static/theme.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/theme.tsx","statementMap":{"0":{"start":{"line":1,"column":15},"end":{"line":12,"column":2}},"1":{"start":{"line":14,"column":9},"end":{"line":14,"column":15}}},"fnMap":{},"branchMap":{},"s":{"0":5,"1":5},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/auto_replacements_bypass_projects/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/auto_replacements_bypass_projects/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":33}},"2":{"start":{"line":8,"column":26},"end":{"line":9,"column":null}},"3":{"start":{"line":8,"column":13},"end":{"line":8,"column":15}},"4":{"start":{"line":8,"column":22},"end":{"line":8,"column":26}},"5":{"start":{"line":12,"column":2},"end":{"line":16,"column":9}},"6":{"start":{"line":13,"column":4},"end":{"line":15,"column":7}},"7":{"start":{"line":14,"column":6},"end":{"line":14,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":16}},"10":{"start":{"line":22,"column":18},"end":{"line":24,"column":4}},"11":{"start":{"line":22,"column":39},"end":{"line":22,"column":41}},"12":{"start":{"line":22,"column":47},"end":{"line":22,"column":49}},"13":{"start":{"line":23,"column":4},"end":{"line":23,"column":31}},"14":{"start":{"line":26,"column":2},"end":{"line":35,"column":4}},"15":{"start":{"line":38,"column":0},"end":{"line":38,"column":46}}},"fnMap":{"0":{"name":"AutoReplacementsBypassProjects","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":39}},"loc":{"start":{"line":7,"column":62},"end":{"line":36,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},"loc":{"start":{"line":12,"column":12},"end":{"line":16,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":13,"column":55},"end":{"line":13,"column":56}},"loc":{"start":{"line":13,"column":59},"end":{"line":15,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":22,"column":27},"end":{"line":22,"column":28}},"loc":{"start":{"line":22,"column":49},"end":{"line":24,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":20,"column":null}}]}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/add_config_modal.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/add_config_modal.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":40}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":42}},"4":{"start":{"line":9,"column":0},"end":{"line":9,"column":50}},"5":{"start":{"line":22,"column":6},"end":{"line":22,"column":12}},"6":{"start":{"line":25,"column":4},"end":{"line":25,"column":56}},"7":{"start":{"line":24,"column":27},"end":{"line":24,"column":29}},"8":{"start":{"line":24,"column":45},"end":{"line":24,"column":null}},"9":{"start":{"line":27,"column":32},"end":{"line":33,"column":4}},"10":{"start":{"line":27,"column":15},"end":{"line":27,"column":17}},"11":{"start":{"line":27,"column":28},"end":{"line":27,"column":32}},"12":{"start":{"line":36,"column":4},"end":{"line":47,"column":7}},"13":{"start":{"line":37,"column":6},"end":{"line":46,"column":null}},"14":{"start":{"line":38,"column":8},"end":{"line":38,"column":37}},"15":{"start":{"line":39,"column":8},"end":{"line":45,"column":11}},"16":{"start":{"line":51,"column":4},"end":{"line":51,"column":30}},"17":{"start":{"line":52,"column":4},"end":{"line":52,"column":32}},"18":{"start":{"line":53,"column":4},"end":{"line":53,"column":23}},"19":{"start":{"line":57,"column":4},"end":{"line":59,"column":7}},"20":{"start":{"line":58,"column":6},"end":{"line":58,"column":68}},"21":{"start":{"line":63,"column":4},"end":{"line":65,"column":7}},"22":{"start":{"line":64,"column":6},"end":{"line":64,"column":39}},"23":{"start":{"line":69,"column":4},"end":{"line":69,"column":32}},"24":{"start":{"line":70,"column":4},"end":{"line":70,"column":30}},"25":{"start":{"line":74,"column":4},"end":{"line":74,"column":64}},"26":{"start":{"line":77,"column":2},"end":{"line":152,"column":4}},"27":{"start":{"line":87,"column":29},"end":{"line":87,"column":null}},"28":{"start":{"line":92,"column":59},"end":{"line":94,"column":14}},"29":{"start":{"line":106,"column":56},"end":{"line":117,"column":16}},"30":{"start":{"line":114,"column":37},"end":{"line":114,"column":null}},"31":{"start":{"line":125,"column":33},"end":{"line":125,"column":null}},"32":{"start":{"line":155,"column":0},"end":{"line":155,"column":30}}},"fnMap":{"0":{"name":"AddConfigModal","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":23}},"loc":{"start":{"line":16,"column":1},"end":{"line":153,"column":1}}},"1":{"name":"selectConfigDefinition","decl":{"start":{"line":35,"column":11},"end":{"line":35,"column":33}},"loc":{"start":{"line":35,"column":46},"end":{"line":48,"column":3}}},"2":{"name":"(anonymous_11)","decl":{"start":{"line":36,"column":34},"end":{"line":36,"column":35}},"loc":{"start":{"line":36,"column":45},"end":{"line":47,"column":5}}},"3":{"name":"saveChanges","decl":{"start":{"line":50,"column":11},"end":{"line":50,"column":22}},"loc":{"start":{"line":50,"column":22},"end":{"line":54,"column":3}}},"4":{"name":"updateParam","decl":{"start":{"line":56,"column":11},"end":{"line":56,"column":22}},"loc":{"start":{"line":56,"column":50},"end":{"line":60,"column":3}}},"5":{"name":"(anonymous_14)","decl":{"start":{"line":57,"column":16},"end":{"line":57,"column":17}},"loc":{"start":{"line":57,"column":21},"end":{"line":59,"column":5}}},"6":{"name":"setValue","decl":{"start":{"line":62,"column":11},"end":{"line":62,"column":19}},"loc":{"start":{"line":62,"column":33},"end":{"line":66,"column":3}}},"7":{"name":"(anonymous_16)","decl":{"start":{"line":63,"column":16},"end":{"line":63,"column":17}},"loc":{"start":{"line":63,"column":21},"end":{"line":65,"column":5}}},"8":{"name":"cancelAdding","decl":{"start":{"line":68,"column":11},"end":{"line":68,"column":23}},"loc":{"start":{"line":68,"column":23},"end":{"line":71,"column":3}}},"9":{"name":"inputType","decl":{"start":{"line":73,"column":11},"end":{"line":73,"column":20}},"loc":{"start":{"line":73,"column":33},"end":{"line":75,"column":3}}},"10":{"name":"(anonymous_19)","decl":{"start":{"line":87,"column":22},"end":{"line":87,"column":23}},"loc":{"start":{"line":87,"column":24},"end":{"line":87,"column":51}}},"11":{"name":"(anonymous_20)","decl":{"start":{"line":92,"column":43},"end":{"line":92,"column":44}},"loc":{"start":{"line":92,"column":54},"end":{"line":92,"column":null}}},"12":{"name":"(anonymous_21)","decl":{"start":{"line":106,"column":45},"end":{"line":106,"column":46}},"loc":{"start":{"line":106,"column":51},"end":{"line":106,"column":null}}},"13":{"name":"(anonymous_22)","decl":{"start":{"line":114,"column":30},"end":{"line":114,"column":31}},"loc":{"start":{"line":114,"column":32},"end":{"line":114,"column":48}}},"14":{"name":"(anonymous_23)","decl":{"start":{"line":125,"column":26},"end":{"line":125,"column":27}},"loc":{"start":{"line":125,"column":28},"end":{"line":125,"column":41}}}},"branchMap":{"0":{"loc":{"start":{"line":37,"column":6},"end":{"line":46,"column":null}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":46,"column":null}}]},"1":{"loc":{"start":{"line":74,"column":11},"end":{"line":74,"column":63}},"type":"cond-expr","locations":[{"start":{"line":74,"column":46},"end":{"line":74,"column":54}},{"start":{"line":74,"column":57},"end":{"line":74,"column":63}}]},"2":{"loc":{"start":{"line":74,"column":11},"end":{"line":74,"column":43}},"type":"binary-expr","locations":[{"start":{"line":74,"column":11},"end":{"line":74,"column":24}},{"start":{"line":74,"column":28},"end":{"line":74,"column":43}}]},"3":{"loc":{"start":{"line":100,"column":9},"end":{"line":130,"column":16}},"type":"cond-expr","locations":[{"start":{"line":101,"column":10},"end":{"line":128,"column":null}},{"start":{"line":130,"column":12},"end":{"line":130,"column":16}}]},"4":{"loc":{"start":{"line":140,"column":12},"end":{"line":145,"column":36}},"type":"binary-expr","locations":[{"start":{"line":140,"column":12},"end":{"line":140,"column":43}},{"start":{"line":141,"column":13},"end":{"line":141,"column":31}},{"start":{"line":142,"column":15},"end":{"line":143,"column":61}},{"start":{"line":144,"column":16},"end":{"line":144,"column":57}},{"start":{"line":145,"column":16},"end":{"line":145,"column":34}}]}},"s":{"0":5,"1":5,"2":5,"3":5,"4":5,"5":56,"6":14,"7":14,"8":14,"9":14,"10":14,"11":14,"12":1,"13":2,"14":1,"15":1,"16":1,"17":1,"18":1,"19":2,"20":2,"21":1,"22":1,"23":1,"24":1,"25":12,"26":14,"27":1,"28":17,"29":8,"30":2,"31":1,"32":5},"f":{"0":14,"1":1,"2":2,"3":1,"4":2,"5":2,"6":1,"7":1,"8":1,"9":12,"10":1,"11":17,"12":8,"13":2,"14":1},"b":{"0":[1],"1":[8,4],"2":[12,4],"3":[4,10],"4":[14,4,4,2,2]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/allocation_policy.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/allocation_policy.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":58}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":42}},"3":{"start":{"line":7,"column":0},"end":{"line":7,"column":98}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":73}},"5":{"start":{"line":9,"column":0},"end":{"line":9,"column":79}},"6":{"start":{"line":10,"column":0},"end":{"line":10,"column":77}},"7":{"start":{"line":13,"column":23},"end":{"line":13,"column":28}},"8":{"start":{"line":14,"column":25},"end":{"line":14,"column":30}},"9":{"start":{"line":15,"column":2},"end":{"line":30,"column":5}},"10":{"start":{"line":16,"column":4},"end":{"line":22,"column":null}},"11":{"start":{"line":17,"column":6},"end":{"line":21,"column":null}},"12":{"start":{"line":18,"column":8},"end":{"line":18,"column":30}},"13":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"14":{"start":{"line":23,"column":4},"end":{"line":29,"column":null}},"15":{"start":{"line":24,"column":6},"end":{"line":28,"column":null}},"16":{"start":{"line":25,"column":8},"end":{"line":25,"column":32}},"17":{"start":{"line":27,"column":8},"end":{"line":27,"column":33}},"18":{"start":{"line":31,"column":2},"end":{"line":37,"column":null}},"19":{"start":{"line":32,"column":4},"end":{"line":32,"column":29}},"20":{"start":{"line":33,"column":9},"end":{"line":37,"column":null}},"21":{"start":{"line":34,"column":4},"end":{"line":34,"column":20}},"22":{"start":{"line":36,"column":4},"end":{"line":36,"column":18}},"23":{"start":{"line":192,"column":34},"end":{"line":192,"column":47}},"24":{"start":{"line":45,"column":35},"end":{"line":45,"column":41}},"25":{"start":{"line":47,"column":32},"end":{"line":47,"column":70}},"26":{"start":{"line":47,"column":16},"end":{"line":47,"column":18}},"27":{"start":{"line":47,"column":28},"end":{"line":47,"column":32}},"28":{"start":{"line":49,"column":2},"end":{"line":52,"column":15}},"29":{"start":{"line":50,"column":4},"end":{"line":50,"column":26}},"30":{"start":{"line":51,"column":4},"end":{"line":51,"column":31}},"31":{"start":{"line":54,"column":50},"end":{"line":54,"column":65}},"32":{"start":{"line":54,"column":25},"end":{"line":54,"column":27}},"33":{"start":{"line":54,"column":46},"end":{"line":54,"column":50}},"34":{"start":{"line":55,"column":44},"end":{"line":61,"column":4}},"35":{"start":{"line":55,"column":22},"end":{"line":55,"column":24}},"36":{"start":{"line":55,"column":40},"end":{"line":55,"column":44}},"37":{"start":{"line":62,"column":36},"end":{"line":62,"column":51}},"38":{"start":{"line":62,"column":18},"end":{"line":62,"column":20}},"39":{"start":{"line":62,"column":32},"end":{"line":62,"column":36}},"40":{"start":{"line":65,"column":4},"end":{"line":65,"column":30}},"41":{"start":{"line":66,"column":4},"end":{"line":66,"column":29}},"42":{"start":{"line":70,"column":4},"end":{"line":86,"column":9}},"43":{"start":{"line":78,"column":8},"end":{"line":82,"column":10}},"44":{"start":{"line":79,"column":10},"end":{"line":81,"column":null}},"45":{"start":{"line":80,"column":38},"end":{"line":80,"column":57}},"46":{"start":{"line":85,"column":8},"end":{"line":85,"column":26}},"47":{"start":{"line":90,"column":4},"end":{"line":100,"column":9}},"48":{"start":{"line":99,"column":8},"end":{"line":99,"column":26}},"49":{"start":{"line":104,"column":4},"end":{"line":104,"column":23}},"50":{"start":{"line":105,"column":4},"end":{"line":105,"column":44}},"51":{"start":{"line":105,"column":25},"end":{"line":105,"column":42}},"52":{"start":{"line":108,"column":2},"end":{"line":189,"column":4}},"53":{"start":{"line":135,"column":33},"end":{"line":135,"column":73}},"54":{"start":{"line":137,"column":14},"end":{"line":137,"column":null}},"55":{"start":{"line":137,"column":43},"end":{"line":137,"column":65}},"56":{"start":{"line":139,"column":31},"end":{"line":145,"column":14}},"57":{"start":{"line":164,"column":32},"end":{"line":164,"column":70}},"58":{"start":{"line":166,"column":14},"end":{"line":166,"column":null}},"59":{"start":{"line":166,"column":43},"end":{"line":166,"column":65}},"60":{"start":{"line":168,"column":31},"end":{"line":175,"column":14}},"61":{"start":{"line":182,"column":28},"end":{"line":182,"column":48}},"62":{"start":{"line":192,"column":9},"end":{"line":192,"column":32}}},"fnMap":{"0":{"name":"getTableColor","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":22}},"loc":{"start":{"line":12,"column":56},"end":{"line":38,"column":1}}},"1":{"name":"(anonymous_9)","decl":{"start":{"line":15,"column":18},"end":{"line":15,"column":19}},"loc":{"start":{"line":15,"column":25},"end":{"line":30,"column":3}}},"2":{"name":"AllocationPolicyConfigs","decl":{"start":{"line":40,"column":9},"end":{"line":40,"column":32}},"loc":{"start":{"line":44,"column":1},"end":{"line":190,"column":1}}},"3":{"name":"(anonymous_11)","decl":{"start":{"line":49,"column":12},"end":{"line":49,"column":null}},"loc":{"start":{"line":49,"column":12},"end":{"line":52,"column":3}}},"4":{"name":"enterEditMode","decl":{"start":{"line":64,"column":11},"end":{"line":64,"column":24}},"loc":{"start":{"line":64,"column":55},"end":{"line":67,"column":3}}},"5":{"name":"deleteConfig","decl":{"start":{"line":69,"column":11},"end":{"line":69,"column":23}},"loc":{"start":{"line":69,"column":56},"end":{"line":87,"column":3}}},"6":{"name":"(anonymous_14)","decl":{"start":{"line":77,"column":12},"end":{"line":77,"column":null}},"loc":{"start":{"line":77,"column":12},"end":{"line":83,"column":7}}},"7":{"name":"(anonymous_15)","decl":{"start":{"line":78,"column":19},"end":{"line":78,"column":20}},"loc":{"start":{"line":78,"column":24},"end":{"line":79,"column":16}}},"8":{"name":"(anonymous_16)","decl":{"start":{"line":80,"column":26},"end":{"line":80,"column":27}},"loc":{"start":{"line":80,"column":33},"end":{"line":80,"column":44}}},"9":{"name":"(anonymous_17)","decl":{"start":{"line":84,"column":13},"end":{"line":84,"column":14}},"loc":{"start":{"line":84,"column":17},"end":{"line":86,"column":7}}},"10":{"name":"saveConfig","decl":{"start":{"line":89,"column":11},"end":{"line":89,"column":21}},"loc":{"start":{"line":89,"column":52},"end":{"line":101,"column":3}}},"11":{"name":"(anonymous_19)","decl":{"start":{"line":98,"column":13},"end":{"line":98,"column":14}},"loc":{"start":{"line":98,"column":17},"end":{"line":100,"column":7}}},"12":{"name":"addConfig","decl":{"start":{"line":103,"column":11},"end":{"line":103,"column":20}},"loc":{"start":{"line":103,"column":51},"end":{"line":106,"column":3}}},"13":{"name":"(anonymous_21)","decl":{"start":{"line":105,"column":15},"end":{"line":105,"column":16}},"loc":{"start":{"line":105,"column":20},"end":{"line":105,"column":29}}},"14":{"name":"(anonymous_22)","decl":{"start":{"line":135,"column":20},"end":{"line":135,"column":21}},"loc":{"start":{"line":135,"column":28},"end":{"line":135,"column":39}}},"15":{"name":"(anonymous_23)","decl":{"start":{"line":136,"column":17},"end":{"line":136,"column":18}},"loc":{"start":{"line":136,"column":24},"end":{"line":137,"column":28}}},"16":{"name":"(anonymous_24)","decl":{"start":{"line":137,"column":37},"end":{"line":137,"column":43}},"loc":{"start":{"line":137,"column":37},"end":{"line":137,"column":56}}},"17":{"name":"(anonymous_25)","decl":{"start":{"line":139,"column":17},"end":{"line":139,"column":18}},"loc":{"start":{"line":139,"column":26},"end":{"line":139,"column":null}}},"18":{"name":"(anonymous_26)","decl":{"start":{"line":164,"column":20},"end":{"line":164,"column":21}},"loc":{"start":{"line":164,"column":27},"end":{"line":164,"column":38}}},"19":{"name":"(anonymous_27)","decl":{"start":{"line":165,"column":17},"end":{"line":165,"column":18}},"loc":{"start":{"line":165,"column":24},"end":{"line":166,"column":28}}},"20":{"name":"(anonymous_28)","decl":{"start":{"line":166,"column":37},"end":{"line":166,"column":43}},"loc":{"start":{"line":166,"column":37},"end":{"line":166,"column":56}}},"21":{"name":"(anonymous_29)","decl":{"start":{"line":168,"column":17},"end":{"line":168,"column":18}},"loc":{"start":{"line":168,"column":26},"end":{"line":168,"column":null}}},"22":{"name":"(anonymous_30)","decl":{"start":{"line":182,"column":22},"end":{"line":182,"column":28}},"loc":{"start":{"line":182,"column":22},"end":{"line":182,"column":40}}}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":22,"column":null}}]},"1":{"loc":{"start":{"line":17,"column":6},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":6},"end":{"line":21,"column":null}},{"start":{"line":19,"column":13},"end":{"line":21,"column":null}}]},"2":{"loc":{"start":{"line":23,"column":4},"end":{"line":29,"column":null}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":29,"column":null}}]},"3":{"loc":{"start":{"line":24,"column":6},"end":{"line":28,"column":null}},"type":"if","locations":[{"start":{"line":24,"column":6},"end":{"line":28,"column":null}},{"start":{"line":26,"column":13},"end":{"line":28,"column":null}}]},"4":{"loc":{"start":{"line":31,"column":2},"end":{"line":37,"column":null}},"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":37,"column":null}},{"start":{"line":33,"column":9},"end":{"line":37,"column":null}}]},"5":{"loc":{"start":{"line":31,"column":6},"end":{"line":31,"column":40}},"type":"binary-expr","locations":[{"start":{"line":31,"column":6},"end":{"line":31,"column":20}},{"start":{"line":31,"column":24},"end":{"line":31,"column":40}}]},"6":{"loc":{"start":{"line":33,"column":9},"end":{"line":37,"column":null}},"type":"if","locations":[{"start":{"line":33,"column":9},"end":{"line":37,"column":null}},{"start":{"line":35,"column":9},"end":{"line":37,"column":null}}]},"7":{"loc":{"start":{"line":33,"column":13},"end":{"line":33,"column":48}},"type":"binary-expr","locations":[{"start":{"line":33,"column":13},"end":{"line":33,"column":27}},{"start":{"line":33,"column":31},"end":{"line":33,"column":48}}]},"8":{"loc":{"start":{"line":79,"column":10},"end":{"line":81,"column":18}},"type":"cond-expr","locations":[{"start":{"line":80,"column":14},"end":{"line":80,"column":57}},{"start":{"line":81,"column":14},"end":{"line":81,"column":18}}]},"9":{"loc":{"start":{"line":181,"column":9},"end":{"line":184,"column":null}},"type":"binary-expr","locations":[{"start":{"line":181,"column":9},"end":{"line":181,"column":19}},{"start":{"line":181,"column":23},"end":{"line":181,"column":69}},{"start":{"line":182,"column":10},"end":{"line":182,"column":null}}]}},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":17,"8":17,"9":17,"10":32,"11":3,"12":2,"13":1,"14":32,"15":3,"16":2,"17":1,"18":17,"19":1,"20":16,"21":1,"22":15,"23":4,"24":23,"25":7,"26":7,"27":7,"28":7,"29":3,"30":3,"31":7,"32":7,"33":7,"34":7,"35":7,"36":7,"37":7,"38":7,"39":7,"40":1,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":7,"53":6,"54":3,"55":1,"56":3,"57":6,"58":3,"59":0,"60":3,"61":0,"62":4},"f":{"0":17,"1":32,"2":9,"3":3,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":6,"15":3,"16":1,"17":3,"18":6,"19":3,"20":0,"21":3,"22":0},"b":{"0":[3],"1":[2,1],"2":[3],"3":[2,1],"4":[1,16],"5":[17,2],"6":[1,15],"7":[16,1],"8":[0,0],"9":[7,7,3]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/edit_config_modal.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/edit_config_modal.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":40}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":42}},"4":{"start":{"line":20,"column":6},"end":{"line":20,"column":12}},"5":{"start":{"line":22,"column":31},"end":{"line":22,"column":43}},"6":{"start":{"line":22,"column":14},"end":{"line":22,"column":16}},"7":{"start":{"line":22,"column":27},"end":{"line":22,"column":31}},"8":{"start":{"line":25,"column":4},"end":{"line":25,"column":32}},"9":{"start":{"line":26,"column":4},"end":{"line":26,"column":30}},"10":{"start":{"line":27,"column":4},"end":{"line":27,"column":31}},"11":{"start":{"line":31,"column":4},"end":{"line":39,"column":null}},"12":{"start":{"line":38,"column":6},"end":{"line":38,"column":34}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":31}},"14":{"start":{"line":44,"column":4},"end":{"line":44,"column":73}},"15":{"start":{"line":48,"column":4},"end":{"line":48,"column":64}},"16":{"start":{"line":51,"column":2},"end":{"line":86,"column":4}},"17":{"start":{"line":52,"column":49},"end":{"line":52,"column":null}},"18":{"start":{"line":66,"column":29},"end":{"line":66,"column":null}},"19":{"start":{"line":72,"column":51},"end":{"line":72,"column":null}},"20":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}}},"fnMap":{"0":{"name":"EditConfigModal","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":24}},"loc":{"start":{"line":13,"column":1},"end":{"line":87,"column":1}}},"1":{"name":"saveChanges","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":22}},"loc":{"start":{"line":24,"column":22},"end":{"line":28,"column":3}}},"2":{"name":"confirmDeleteConfig","decl":{"start":{"line":30,"column":11},"end":{"line":30,"column":30}},"loc":{"start":{"line":30,"column":30},"end":{"line":41,"column":3}}},"3":{"name":"deleteOrReset","decl":{"start":{"line":43,"column":11},"end":{"line":43,"column":24}},"loc":{"start":{"line":43,"column":24},"end":{"line":45,"column":3}}},"4":{"name":"inputType","decl":{"start":{"line":47,"column":11},"end":{"line":47,"column":20}},"loc":{"start":{"line":47,"column":33},"end":{"line":49,"column":3}}},"5":{"name":"(anonymous_12)","decl":{"start":{"line":52,"column":43},"end":{"line":52,"column":49}},"loc":{"start":{"line":52,"column":43},"end":{"line":52,"column":68}}},"6":{"name":"(anonymous_13)","decl":{"start":{"line":66,"column":22},"end":{"line":66,"column":23}},"loc":{"start":{"line":66,"column":24},"end":{"line":66,"column":40}}},"7":{"name":"(anonymous_14)","decl":{"start":{"line":72,"column":45},"end":{"line":72,"column":51}},"loc":{"start":{"line":72,"column":45},"end":{"line":72,"column":70}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":4},"end":{"line":39,"column":null}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":39,"column":null}}]},"1":{"loc":{"start":{"line":44,"column":11},"end":{"line":44,"column":72}},"type":"cond-expr","locations":[{"start":{"line":44,"column":54},"end":{"line":44,"column":62}},{"start":{"line":44,"column":65},"end":{"line":44,"column":72}}]},"2":{"loc":{"start":{"line":48,"column":11},"end":{"line":48,"column":63}},"type":"cond-expr","locations":[{"start":{"line":48,"column":46},"end":{"line":48,"column":54}},{"start":{"line":48,"column":57},"end":{"line":48,"column":63}}]},"3":{"loc":{"start":{"line":48,"column":11},"end":{"line":48,"column":43}},"type":"binary-expr","locations":[{"start":{"line":48,"column":11},"end":{"line":48,"column":24}},{"start":{"line":48,"column":28},"end":{"line":48,"column":43}}]},"4":{"loc":{"start":{"line":76,"column":19},"end":{"line":76,"column":68}},"type":"cond-expr","locations":[{"start":{"line":76,"column":48},"end":{"line":76,"column":57}},{"start":{"line":76,"column":60},"end":{"line":76,"column":68}}]}},"s":{"0":5,"1":5,"2":5,"3":5,"4":45,"5":9,"6":9,"7":9,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":19,"15":9,"16":9,"17":0,"18":1,"19":1,"20":5},"f":{"0":9,"1":1,"2":1,"3":19,"4":9,"5":0,"6":1,"7":1},"b":{"0":[1],"1":[0,19],"2":[3,6],"3":[9,6],"4":[9,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":89}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":70}},"3":{"start":{"line":8,"column":18},"end":{"line":8,"column":24}},"4":{"start":{"line":10,"column":34},"end":{"line":10,"column":56}},"5":{"start":{"line":10,"column":17},"end":{"line":10,"column":19}},"6":{"start":{"line":10,"column":30},"end":{"line":10,"column":34}},"7":{"start":{"line":11,"column":40},"end":{"line":11,"column":70}},"8":{"start":{"line":11,"column":24},"end":{"line":11,"column":26}},"9":{"start":{"line":11,"column":36},"end":{"line":11,"column":40}},"10":{"start":{"line":12,"column":54},"end":{"line":14,"column":7}},"11":{"start":{"line":12,"column":27},"end":{"line":12,"column":29}},"12":{"start":{"line":12,"column":50},"end":{"line":12,"column":54}},"13":{"start":{"line":16,"column":2},"end":{"line":24,"column":9}},"14":{"start":{"line":17,"column":4},"end":{"line":23,"column":7}},"15":{"start":{"line":18,"column":6},"end":{"line":18,"column":23}},"16":{"start":{"line":19,"column":30},"end":{"line":19,"column":60}},"17":{"start":{"line":20,"column":6},"end":{"line":22,"column":null}},"18":{"start":{"line":21,"column":8},"end":{"line":21,"column":39}},"19":{"start":{"line":27,"column":4},"end":{"line":27,"column":24}},"20":{"start":{"line":28,"column":4},"end":{"line":28,"column":36}},"21":{"start":{"line":32,"column":4},"end":{"line":39,"column":9}},"22":{"start":{"line":35,"column":8},"end":{"line":35,"column":35}},"23":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"24":{"start":{"line":42,"column":2},"end":{"line":67,"column":4}},"25":{"start":{"line":55,"column":61},"end":{"line":62,"column":10}},"26":{"start":{"line":70,"column":0},"end":{"line":70,"column":34}}},"fnMap":{"0":{"name":"CapacityManagement","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":27}},"loc":{"start":{"line":7,"column":50},"end":{"line":68,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":16,"column":12},"end":{"line":16,"column":null}},"loc":{"start":{"line":16,"column":12},"end":{"line":24,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":17,"column":49},"end":{"line":17,"column":50}},"loc":{"start":{"line":17,"column":53},"end":{"line":23,"column":5}}},"3":{"name":"selectStorage","decl":{"start":{"line":26,"column":11},"end":{"line":26,"column":24}},"loc":{"start":{"line":26,"column":40},"end":{"line":29,"column":3}}},"4":{"name":"loadAllocationPolicies","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":33}},"loc":{"start":{"line":31,"column":49},"end":{"line":40,"column":3}}},"5":{"name":"(anonymous_11)","decl":{"start":{"line":34,"column":12},"end":{"line":34,"column":13}},"loc":{"start":{"line":34,"column":16},"end":{"line":36,"column":7}}},"6":{"name":"(anonymous_12)","decl":{"start":{"line":37,"column":13},"end":{"line":37,"column":14}},"loc":{"start":{"line":37,"column":17},"end":{"line":39,"column":7}}},"7":{"name":"(anonymous_13)","decl":{"start":{"line":55,"column":31},"end":{"line":55,"column":32}},"loc":{"start":{"line":55,"column":56},"end":{"line":55,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":6},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":22,"column":null}}]},"1":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":38}},"type":"binary-expr","locations":[{"start":{"line":47,"column":17},"end":{"line":47,"column":32}},{"start":{"line":47,"column":36},"end":{"line":47,"column":38}}]},"2":{"loc":{"start":{"line":54,"column":7},"end":{"line":64,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":8},"end":{"line":62,"column":10}},{"start":{"line":64,"column":8},"end":{"line":64,"column":36}}]},"3":{"loc":{"start":{"line":54,"column":7},"end":{"line":54,"column":44}},"type":"binary-expr","locations":[{"start":{"line":54,"column":7},"end":{"line":54,"column":22}},{"start":{"line":54,"column":26},"end":{"line":54,"column":44}}]}},"s":{"0":2,"1":2,"2":2,"3":5,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"20":1,"21":1,"22":1,"23":0,"24":4,"25":2,"26":2},"f":{"0":5,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":2},"b":{"0":[0],"1":[4,2],"2":[2,2],"3":[4,2]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/row_data.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/row_data.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"2":{"start":{"line":9,"column":2},"end":{"line":48,"column":4}},"3":{"start":{"line":42,"column":23},"end":{"line":42,"column":null}},"4":{"start":{"line":51,"column":9},"end":{"line":51,"column":23}}},"fnMap":{"0":{"name":"getReadonlyRow","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":23}},"loc":{"start":{"line":7,"column":18},"end":{"line":49,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":17},"end":{"line":42,"column":23}},"loc":{"start":{"line":42,"column":17},"end":{"line":42,"column":27}}}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":9},"end":{"line":19,"column":17}},"type":"cond-expr","locations":[{"start":{"line":18,"column":12},"end":{"line":18,"column":41}},{"start":{"line":19,"column":12},"end":{"line":19,"column":17}}]}},"s":{"0":4,"1":4,"2":6,"3":1,"4":4},"f":{"0":6,"1":1},"b":{"0":[3,3]}} +,"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/capacity_management/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"1":{"start":{"line":3,"column":20},"end":{"line":7,"column":2}},"2":{"start":{"line":26,"column":52},"end":{"line":26,"column":63}},"3":{"start":{"line":9,"column":23},"end":{"line":12,"column":2}},"4":{"start":{"line":26,"column":9},"end":{"line":26,"column":23}},"5":{"start":{"line":14,"column":18},"end":{"line":19,"column":2}},"6":{"start":{"line":26,"column":25},"end":{"line":26,"column":34}},"7":{"start":{"line":21,"column":23},"end":{"line":24,"column":2}},"8":{"start":{"line":26,"column":36},"end":{"line":26,"column":50}}},"fnMap":{},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/CSV.ts": {"path":"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/CSV.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},"1":{"start":{"line":2,"column":9},"end":{"line":4,"column":null}},"2":{"start":{"line":3,"column":4},"end":{"line":3,"column":40}},"3":{"start":{"line":6,"column":9},"end":{"line":8,"column":null}},"4":{"start":{"line":7,"column":4},"end":{"line":7,"column":42}},"5":{"start":{"line":10,"column":9},"end":{"line":25,"column":null}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":26}},"7":{"start":{"line":11,"column":16},"end":{"line":11,"column":26}},"8":{"start":{"line":13,"column":4},"end":{"line":22,"column":null}},"9":{"start":{"line":14,"column":35},"end":{"line":14,"column":37}},"10":{"start":{"line":15,"column":6},"end":{"line":15,"column":49}},"11":{"start":{"line":17,"column":6},"end":{"line":19,"column":null}},"12":{"start":{"line":18,"column":8},"end":{"line":18,"column":37}},"13":{"start":{"line":21,"column":6},"end":{"line":21,"column":28}},"14":{"start":{"line":24,"column":4},"end":{"line":24,"column":28}},"15":{"start":{"line":26,"column":0},"end":{"line":26,"column":null}},"16":{"start":{"line":1,"column":13},"end":{"line":1,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},"loc":{"start":{"line":1,"column":0},"end":{"line":26,"column":null}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},"loc":{"start":{"line":2,"column":42},"end":{"line":4,"column":3}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":6,"column":2},"end":{"line":6,"column":9}},"loc":{"start":{"line":6,"column":30},"end":{"line":8,"column":3}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":10,"column":2},"end":{"line":10,"column":9}},"loc":{"start":{"line":10,"column":28},"end":{"line":25,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":4},"end":{"line":11,"column":26}},"type":"if","locations":[{"start":{"line":11,"column":4},"end":{"line":11,"column":26}}]},"1":{"loc":{"start":{"line":13,"column":4},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":22,"column":null}}]},"2":{"loc":{"start":{"line":17,"column":6},"end":{"line":19,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":6},"end":{"line":19,"column":null}}]}},"s":{"0":2,"1":2,"2":4,"3":2,"4":8,"5":2,"6":16,"7":0,"8":16,"9":15,"10":15,"11":15,"12":2,"13":13,"14":1,"15":2,"16":2},"f":{"0":2,"1":4,"2":8,"3":16},"b":{"0":[0],"1":[15],"2":[2]}} +,"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":73}},"3":{"start":{"line":8,"column":62},"end":{"line":10,"column":7}},"4":{"start":{"line":8,"column":31},"end":{"line":8,"column":33}},"5":{"start":{"line":8,"column":58},"end":{"line":8,"column":62}},"6":{"start":{"line":12,"column":2},"end":{"line":19,"column":9}},"7":{"start":{"line":13,"column":4},"end":{"line":18,"column":7}},"8":{"start":{"line":14,"column":6},"end":{"line":16,"column":8}},"9":{"start":{"line":15,"column":27},"end":{"line":15,"column":null}},"10":{"start":{"line":17,"column":6},"end":{"line":17,"column":37}},"11":{"start":{"line":22,"column":4},"end":{"line":29,"column":6}},"12":{"start":{"line":32,"column":22},"end":{"line":35,"column":17}},"13":{"start":{"line":34,"column":21},"end":{"line":34,"column":52}},"14":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"15":{"start":{"line":39,"column":2},"end":{"line":47,"column":4}},"16":{"start":{"line":50,"column":20},"end":{"line":53,"column":2}},"17":{"start":{"line":55,"column":15},"end":{"line":58,"column":2}},"18":{"start":{"line":60,"column":0},"end":{"line":60,"column":34}}},"fnMap":{"0":{"name":"CardinalityQueries","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":27}},"loc":{"start":{"line":7,"column":50},"end":{"line":48,"column":1}}},"1":{"name":"(anonymous_8)","decl":{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},"loc":{"start":{"line":12,"column":12},"end":{"line":19,"column":3}}},"2":{"name":"(anonymous_9)","decl":{"start":{"line":13,"column":58},"end":{"line":13,"column":59}},"loc":{"start":{"line":13,"column":62},"end":{"line":18,"column":5}}},"3":{"name":"(anonymous_10)","decl":{"start":{"line":15,"column":10},"end":{"line":15,"column":11}},"loc":{"start":{"line":15,"column":22},"end":{"line":15,"column":28}}},"4":{"name":"tablePopulator","decl":{"start":{"line":21,"column":11},"end":{"line":21,"column":25}},"loc":{"start":{"line":21,"column":61},"end":{"line":30,"column":3}}},"5":{"name":"formatSQL","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":20}},"loc":{"start":{"line":31,"column":32},"end":{"line":37,"column":3}}},"6":{"name":"(anonymous_13)","decl":{"start":{"line":34,"column":11},"end":{"line":34,"column":12}},"loc":{"start":{"line":34,"column":16},"end":{"line":34,"column":25}}}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":1,"17":1,"18":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/query_display.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/cardinality_analyzer/query_display.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":47}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":58}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":78}},"6":{"start":{"line":15,"column":0},"end":{"line":15,"column":null}},"7":{"start":{"line":16,"column":2},"end":{"line":16,"column":null}},"8":{"start":{"line":17,"column":2},"end":{"line":17,"column":null}},"9":{"start":{"line":21,"column":20},"end":{"line":21,"column":42}},"10":{"start":{"line":27,"column":28},"end":{"line":27,"column":52}},"11":{"start":{"line":27,"column":14},"end":{"line":27,"column":16}},"12":{"start":{"line":27,"column":24},"end":{"line":27,"column":28}},"13":{"start":{"line":28,"column":65},"end":{"line":30,"column":34}},"14":{"start":{"line":28,"column":27},"end":{"line":28,"column":29}},"15":{"start":{"line":28,"column":61},"end":{"line":28,"column":65}},"16":{"start":{"line":33,"column":4},"end":{"line":38,"column":7}},"17":{"start":{"line":34,"column":6},"end":{"line":36,"column":null}},"18":{"start":{"line":42,"column":4},"end":{"line":42,"column":70}},"19":{"start":{"line":49,"column":63},"end":{"line":50,"column":7}},"20":{"start":{"line":50,"column":6},"end":{"line":50,"column":19}},"21":{"start":{"line":52,"column":4},"end":{"line":54,"column":null}},"22":{"start":{"line":53,"column":6},"end":{"line":53,"column":33}},"23":{"start":{"line":56,"column":4},"end":{"line":58,"column":null}},"24":{"start":{"line":57,"column":6},"end":{"line":57,"column":38}},"25":{"start":{"line":60,"column":4},"end":{"line":60,"column":65}},"26":{"start":{"line":64,"column":4},"end":{"line":73,"column":9}},"27":{"start":{"line":67,"column":8},"end":{"line":67,"column":58}},"28":{"start":{"line":68,"column":8},"end":{"line":68,"column":46}},"29":{"start":{"line":69,"column":8},"end":{"line":72,"column":11}},"30":{"start":{"line":69,"column":58},"end":{"line":71,"column":null}},"31":{"start":{"line":76,"column":2},"end":{"line":136,"column":4}},"32":{"start":{"line":81,"column":10},"end":{"line":81,"column":30}},"33":{"start":{"line":91,"column":10},"end":{"line":114,"column":null}},"34":{"start":{"line":92,"column":12},"end":{"line":113,"column":14}},"35":{"start":{"line":98,"column":35},"end":{"line":98,"column":null}},"36":{"start":{"line":106,"column":35},"end":{"line":106,"column":null}},"37":{"start":{"line":116,"column":10},"end":{"line":132,"column":12}},"38":{"start":{"line":120,"column":31},"end":{"line":120,"column":null}},"39":{"start":{"line":126,"column":31},"end":{"line":126,"column":null}},"40":{"start":{"line":139,"column":28},"end":{"line":143,"column":2}},"41":{"start":{"line":145,"column":24},"end":{"line":150,"column":2}},"42":{"start":{"line":152,"column":0},"end":{"line":152,"column":28}}},"fnMap":{"0":{"name":"(anonymous_10)","decl":{"start":{"line":15,"column":0},"end":{"line":15,"column":5}},"loc":{"start":{"line":15,"column":21},"end":{"line":18,"column":1}}},"1":{"name":"QueryDisplay","decl":{"start":{"line":22,"column":9},"end":{"line":22,"column":21}},"loc":{"start":{"line":26,"column":1},"end":{"line":137,"column":1}}},"2":{"name":"updateQuerySql","decl":{"start":{"line":32,"column":11},"end":{"line":32,"column":25}},"loc":{"start":{"line":32,"column":37},"end":{"line":39,"column":3}}},"3":{"name":"(anonymous_13)","decl":{"start":{"line":33,"column":13},"end":{"line":33,"column":14}},"loc":{"start":{"line":33,"column":23},"end":{"line":38,"column":5}}},"4":{"name":"convertResultsToCSV","decl":{"start":{"line":41,"column":11},"end":{"line":41,"column":30}},"loc":{"start":{"line":41,"column":66},"end":{"line":43,"column":3}}},"5":{"name":"copyText","decl":{"start":{"line":45,"column":11},"end":{"line":45,"column":19}},"loc":{"start":{"line":47,"column":28},"end":{"line":61,"column":3}}},"6":{"name":"(anonymous_16)","decl":{"start":{"line":49,"column":63},"end":{"line":49,"column":64}},"loc":{"start":{"line":49,"column":65},"end":{"line":50,"column":7}}},"7":{"name":"executeQuery","decl":{"start":{"line":63,"column":11},"end":{"line":63,"column":23}},"loc":{"start":{"line":63,"column":23},"end":{"line":74,"column":3}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":66,"column":12},"end":{"line":66,"column":13}},"loc":{"start":{"line":66,"column":19},"end":{"line":73,"column":7}}},"9":{"name":"(anonymous_19)","decl":{"start":{"line":69,"column":41},"end":{"line":69,"column":42}},"loc":{"start":{"line":69,"column":53},"end":{"line":69,"column":null}}},"10":{"name":"(anonymous_20)","decl":{"start":{"line":80,"column":23},"end":{"line":80,"column":24}},"loc":{"start":{"line":80,"column":27},"end":{"line":82,"column":9}}},"11":{"name":"(anonymous_21)","decl":{"start":{"line":90,"column":32},"end":{"line":90,"column":33}},"loc":{"start":{"line":90,"column":49},"end":{"line":133,"column":9}}},"12":{"name":"(anonymous_22)","decl":{"start":{"line":98,"column":29},"end":{"line":98,"column":35}},"loc":{"start":{"line":98,"column":29},"end":{"line":98,"column":43}}},"13":{"name":"(anonymous_23)","decl":{"start":{"line":106,"column":29},"end":{"line":106,"column":35}},"loc":{"start":{"line":106,"column":29},"end":{"line":106,"column":43}}},"14":{"name":"(anonymous_24)","decl":{"start":{"line":120,"column":25},"end":{"line":120,"column":31}},"loc":{"start":{"line":120,"column":25},"end":{"line":120,"column":39}}},"15":{"name":"(anonymous_25)","decl":{"start":{"line":126,"column":25},"end":{"line":126,"column":31}},"loc":{"start":{"line":126,"column":25},"end":{"line":126,"column":39}}}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":5},"end":{"line":15,"column":null}},"type":"binary-expr","locations":[{"start":{"line":15,"column":5},"end":{"line":15,"column":21}},{"start":{"line":15,"column":5},"end":{"line":15,"column":null}}]},"1":{"loc":{"start":{"line":52,"column":4},"end":{"line":54,"column":null}},"type":"if","locations":[{"start":{"line":52,"column":4},"end":{"line":54,"column":null}}]},"2":{"loc":{"start":{"line":56,"column":4},"end":{"line":58,"column":null}},"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":58,"column":null}}]},"3":{"loc":{"start":{"line":67,"column":29},"end":{"line":67,"column":57}},"type":"binary-expr","locations":[{"start":{"line":67,"column":29},"end":{"line":67,"column":38}},{"start":{"line":67,"column":42},"end":{"line":67,"column":57}}]},"4":{"loc":{"start":{"line":91,"column":10},"end":{"line":114,"column":null}},"type":"if","locations":[{"start":{"line":91,"column":10},"end":{"line":114,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":1,"41":1,"42":1},"f":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[1,1],"1":[0],"2":[0],"3":[0,0],"4":[0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_migrations/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_migrations/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":11,"column":0},"end":{"line":11,"column":70}},"4":{"start":{"line":14,"column":36},"end":{"line":14,"column":62}},"5":{"start":{"line":14,"column":18},"end":{"line":14,"column":20}},"6":{"start":{"line":14,"column":32},"end":{"line":14,"column":36}},"7":{"start":{"line":16,"column":4},"end":{"line":16,"column":47}},"8":{"start":{"line":15,"column":23},"end":{"line":15,"column":25}},"9":{"start":{"line":15,"column":42},"end":{"line":15,"column":null}},"10":{"start":{"line":17,"column":40},"end":{"line":17,"column":69}},"11":{"start":{"line":17,"column":20},"end":{"line":17,"column":22}},"12":{"start":{"line":17,"column":36},"end":{"line":17,"column":40}},"13":{"start":{"line":18,"column":32},"end":{"line":18,"column":61}},"14":{"start":{"line":18,"column":16},"end":{"line":18,"column":18}},"15":{"start":{"line":18,"column":28},"end":{"line":18,"column":32}},"16":{"start":{"line":20,"column":30},"end":{"line":20,"column":59}},"17":{"start":{"line":20,"column":15},"end":{"line":20,"column":17}},"18":{"start":{"line":20,"column":26},"end":{"line":20,"column":30}},"19":{"start":{"line":21,"column":39},"end":{"line":21,"column":70}},"20":{"start":{"line":21,"column":20},"end":{"line":21,"column":22}},"21":{"start":{"line":21,"column":35},"end":{"line":21,"column":39}},"22":{"start":{"line":23,"column":25},"end":{"line":23,"column":45}},"23":{"start":{"line":24,"column":26},"end":{"line":24,"column":42}},"24":{"start":{"line":26,"column":47},"end":{"line":26,"column":76}},"25":{"start":{"line":26,"column":25},"end":{"line":26,"column":27}},"26":{"start":{"line":26,"column":43},"end":{"line":26,"column":47}},"27":{"start":{"line":27,"column":50},"end":{"line":27,"column":79}},"28":{"start":{"line":27,"column":26},"end":{"line":27,"column":28}},"29":{"start":{"line":27,"column":46},"end":{"line":27,"column":50}},"30":{"start":{"line":29,"column":2},"end":{"line":37,"column":9}},"31":{"start":{"line":30,"column":4},"end":{"line":36,"column":7}},"32":{"start":{"line":31,"column":34},"end":{"line":31,"column":36}},"33":{"start":{"line":32,"column":6},"end":{"line":34,"column":8}},"34":{"start":{"line":33,"column":41},"end":{"line":33,"column":null}},"35":{"start":{"line":35,"column":6},"end":{"line":35,"column":28}},"36":{"start":{"line":40,"column":4},"end":{"line":40,"column":null}},"37":{"start":{"line":40,"column":29},"end":{"line":40,"column":34}},"38":{"start":{"line":41,"column":4},"end":{"line":41,"column":null}},"39":{"start":{"line":41,"column":27},"end":{"line":41,"column":32}},"40":{"start":{"line":42,"column":4},"end":{"line":42,"column":27}},"41":{"start":{"line":42,"column":21},"end":{"line":42,"column":26}},"42":{"start":{"line":46,"column":49},"end":{"line":46,"column":69}},"43":{"start":{"line":47,"column":4},"end":{"line":47,"column":44}},"44":{"start":{"line":47,"column":28},"end":{"line":47,"column":43}},"45":{"start":{"line":48,"column":4},"end":{"line":48,"column":null}},"46":{"start":{"line":49,"column":4},"end":{"line":49,"column":31}},"47":{"start":{"line":49,"column":25},"end":{"line":49,"column":30}},"48":{"start":{"line":50,"column":4},"end":{"line":50,"column":null}},"49":{"start":{"line":50,"column":23},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":4},"end":{"line":51,"column":40}},"51":{"start":{"line":55,"column":4},"end":{"line":55,"column":38}},"52":{"start":{"line":55,"column":25},"end":{"line":55,"column":37}},"53":{"start":{"line":56,"column":4},"end":{"line":56,"column":null}},"54":{"start":{"line":57,"column":4},"end":{"line":57,"column":null}},"55":{"start":{"line":57,"column":23},"end":{"line":57,"column":29}},"56":{"start":{"line":61,"column":4},"end":{"line":61,"column":null}},"57":{"start":{"line":61,"column":29},"end":{"line":61,"column":34}},"58":{"start":{"line":62,"column":4},"end":{"line":62,"column":null}},"59":{"start":{"line":62,"column":27},"end":{"line":62,"column":39}},"60":{"start":{"line":66,"column":4},"end":{"line":66,"column":null}},"61":{"start":{"line":66,"column":27},"end":{"line":66,"column":32}},"62":{"start":{"line":67,"column":4},"end":{"line":67,"column":null}},"63":{"start":{"line":67,"column":29},"end":{"line":67,"column":41}},"64":{"start":{"line":71,"column":16},"end":{"line":71,"column":21}},"65":{"start":{"line":72,"column":17},"end":{"line":73,"column":null}},"66":{"start":{"line":73,"column":13},"end":{"line":73,"column":null}},"67":{"start":{"line":75,"column":4},"end":{"line":77,"column":null}},"68":{"start":{"line":76,"column":6},"end":{"line":76,"column":null}},"69":{"start":{"line":78,"column":4},"end":{"line":81,"column":null}},"70":{"start":{"line":80,"column":6},"end":{"line":80,"column":null}},"71":{"start":{"line":82,"column":4},"end":{"line":90,"column":null}},"72":{"start":{"line":83,"column":6},"end":{"line":89,"column":null}},"73":{"start":{"line":88,"column":8},"end":{"line":88,"column":21}},"74":{"start":{"line":91,"column":4},"end":{"line":99,"column":null}},"75":{"start":{"line":92,"column":6},"end":{"line":98,"column":null}},"76":{"start":{"line":97,"column":8},"end":{"line":97,"column":21}},"77":{"start":{"line":100,"column":4},"end":{"line":100,"column":34}},"78":{"start":{"line":105,"column":14},"end":{"line":111,"column":6}},"79":{"start":{"line":112,"column":4},"end":{"line":133,"column":9}},"80":{"start":{"line":115,"column":8},"end":{"line":115,"column":25}},"81":{"start":{"line":116,"column":8},"end":{"line":118,"column":null}},"82":{"start":{"line":117,"column":10},"end":{"line":117,"column":null}},"83":{"start":{"line":119,"column":8},"end":{"line":121,"column":null}},"84":{"start":{"line":120,"column":10},"end":{"line":120,"column":null}},"85":{"start":{"line":122,"column":8},"end":{"line":122,"column":37}},"86":{"start":{"line":122,"column":25},"end":{"line":122,"column":36}},"87":{"start":{"line":123,"column":8},"end":{"line":125,"column":null}},"88":{"start":{"line":124,"column":10},"end":{"line":124,"column":null}},"89":{"start":{"line":128,"column":8},"end":{"line":128,"column":27}},"90":{"start":{"line":129,"column":8},"end":{"line":129,"column":46}},"91":{"start":{"line":129,"column":25},"end":{"line":129,"column":45}},"92":{"start":{"line":130,"column":8},"end":{"line":132,"column":null}},"93":{"start":{"line":131,"column":10},"end":{"line":131,"column":null}},"94":{"start":{"line":137,"column":4},"end":{"line":137,"column":60}},"95":{"start":{"line":138,"column":4},"end":{"line":138,"column":null}},"96":{"start":{"line":138,"column":19},"end":{"line":138,"column":34}},"97":{"start":{"line":139,"column":4},"end":{"line":139,"column":null}},"98":{"start":{"line":140,"column":4},"end":{"line":140,"column":null}},"99":{"start":{"line":140,"column":23},"end":{"line":140,"column":28}},"100":{"start":{"line":144,"column":4},"end":{"line":144,"column":68}},"101":{"start":{"line":145,"column":4},"end":{"line":145,"column":null}},"102":{"start":{"line":146,"column":4},"end":{"line":146,"column":null}},"103":{"start":{"line":146,"column":19},"end":{"line":146,"column":35}},"104":{"start":{"line":147,"column":4},"end":{"line":157,"column":null}},"105":{"start":{"line":148,"column":6},"end":{"line":153,"column":null}},"106":{"start":{"line":149,"column":8},"end":{"line":149,"column":null}},"107":{"start":{"line":151,"column":8},"end":{"line":152,"column":null}},"108":{"start":{"line":154,"column":6},"end":{"line":156,"column":null}},"109":{"start":{"line":155,"column":8},"end":{"line":155,"column":null}},"110":{"start":{"line":159,"column":4},"end":{"line":161,"column":null}},"111":{"start":{"line":160,"column":6},"end":{"line":160,"column":null}},"112":{"start":{"line":166,"column":4},"end":{"line":173,"column":7}},"113":{"start":{"line":167,"column":34},"end":{"line":167,"column":36}},"114":{"start":{"line":168,"column":6},"end":{"line":170,"column":8}},"115":{"start":{"line":169,"column":41},"end":{"line":169,"column":null}},"116":{"start":{"line":171,"column":6},"end":{"line":171,"column":28}},"117":{"start":{"line":172,"column":6},"end":{"line":172,"column":40}},"118":{"start":{"line":177,"column":4},"end":{"line":187,"column":null}},"119":{"start":{"line":178,"column":22},"end":{"line":178,"column":24}},"120":{"start":{"line":179,"column":6},"end":{"line":185,"column":9}},"121":{"start":{"line":180,"column":8},"end":{"line":184,"column":11}},"122":{"start":{"line":186,"column":6},"end":{"line":186,"column":18}},"123":{"start":{"line":188,"column":4},"end":{"line":188,"column":16}},"124":{"start":{"line":192,"column":4},"end":{"line":207,"column":6}},"125":{"start":{"line":200,"column":86},"end":{"line":203,"column":15}},"126":{"start":{"line":211,"column":4},"end":{"line":213,"column":null}},"127":{"start":{"line":212,"column":6},"end":{"line":212,"column":18}},"128":{"start":{"line":214,"column":17},"end":{"line":215,"column":null}},"129":{"start":{"line":215,"column":13},"end":{"line":215,"column":null}},"130":{"start":{"line":218,"column":4},"end":{"line":255,"column":6}},"131":{"start":{"line":227,"column":25},"end":{"line":227,"column":null}},"132":{"start":{"line":237,"column":25},"end":{"line":237,"column":null}},"133":{"start":{"line":258,"column":2},"end":{"line":320,"column":4}},"134":{"start":{"line":271,"column":66},"end":{"line":271,"column":73}},"135":{"start":{"line":281,"column":31},"end":{"line":281,"column":null}},"136":{"start":{"line":288,"column":31},"end":{"line":288,"column":null}},"137":{"start":{"line":323,"column":0},"end":{"line":323,"column":36}},"138":{"start":{"line":325,"column":15},"end":{"line":328,"column":2}},"139":{"start":{"line":330,"column":24},"end":{"line":332,"column":2}},"140":{"start":{"line":334,"column":21},"end":{"line":338,"column":2}},"141":{"start":{"line":340,"column":20},"end":{"line":343,"column":2}},"142":{"start":{"line":345,"column":28},"end":{"line":349,"column":null}},"143":{"start":{"line":351,"column":18},"end":{"line":353,"column":2}},"144":{"start":{"line":355,"column":22},"end":{"line":359,"column":2}},"145":{"start":{"line":361,"column":22},"end":{"line":368,"column":2}}},"fnMap":{"0":{"name":"ClickhouseMigrations","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":29}},"loc":{"start":{"line":13,"column":52},"end":{"line":321,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":29,"column":12},"end":{"line":29,"column":null}},"loc":{"start":{"line":29,"column":12},"end":{"line":37,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":30,"column":43},"end":{"line":30,"column":44}},"loc":{"start":{"line":30,"column":47},"end":{"line":36,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":33,"column":8},"end":{"line":33,"column":9}},"loc":{"start":{"line":33,"column":36},"end":{"line":33,"column":42}}},"4":{"name":"clearBtnState","decl":{"start":{"line":39,"column":11},"end":{"line":39,"column":24}},"loc":{"start":{"line":39,"column":24},"end":{"line":43,"column":3}}},"5":{"name":"(anonymous_11)","decl":{"start":{"line":40,"column":23},"end":{"line":40,"column":29}},"loc":{"start":{"line":40,"column":23},"end":{"line":40,"column":33}}},"6":{"name":"(anonymous_12)","decl":{"start":{"line":41,"column":21},"end":{"line":41,"column":27}},"loc":{"start":{"line":41,"column":21},"end":{"line":41,"column":31}}},"7":{"name":"(anonymous_13)","decl":{"start":{"line":42,"column":15},"end":{"line":42,"column":21}},"loc":{"start":{"line":42,"column":15},"end":{"line":42,"column":25}}},"8":{"name":"selectGroup","decl":{"start":{"line":45,"column":11},"end":{"line":45,"column":22}},"loc":{"start":{"line":45,"column":40},"end":{"line":52,"column":3}}},"9":{"name":"(anonymous_15)","decl":{"start":{"line":47,"column":22},"end":{"line":47,"column":28}},"loc":{"start":{"line":47,"column":22},"end":{"line":47,"column":42}}},"10":{"name":"(anonymous_16)","decl":{"start":{"line":49,"column":19},"end":{"line":49,"column":25}},"loc":{"start":{"line":49,"column":19},"end":{"line":49,"column":29}}},"11":{"name":"(anonymous_17)","decl":{"start":{"line":50,"column":18},"end":{"line":50,"column":23}},"loc":{"start":{"line":50,"column":18},"end":{"line":50,"column":28}}},"12":{"name":"selectMigration","decl":{"start":{"line":54,"column":11},"end":{"line":54,"column":26}},"loc":{"start":{"line":54,"column":46},"end":{"line":58,"column":3}}},"13":{"name":"(anonymous_19)","decl":{"start":{"line":55,"column":19},"end":{"line":55,"column":25}},"loc":{"start":{"line":55,"column":19},"end":{"line":55,"column":36}}},"14":{"name":"(anonymous_20)","decl":{"start":{"line":57,"column":18},"end":{"line":57,"column":23}},"loc":{"start":{"line":57,"column":18},"end":{"line":57,"column":28}}},"15":{"name":"selectForwards","decl":{"start":{"line":60,"column":11},"end":{"line":60,"column":25}},"loc":{"start":{"line":60,"column":45},"end":{"line":63,"column":3}}},"16":{"name":"(anonymous_22)","decl":{"start":{"line":61,"column":23},"end":{"line":61,"column":29}},"loc":{"start":{"line":61,"column":23},"end":{"line":61,"column":33}}},"17":{"name":"(anonymous_23)","decl":{"start":{"line":62,"column":21},"end":{"line":62,"column":27}},"loc":{"start":{"line":62,"column":21},"end":{"line":62,"column":38}}},"18":{"name":"selectBackwards","decl":{"start":{"line":65,"column":11},"end":{"line":65,"column":26}},"loc":{"start":{"line":65,"column":46},"end":{"line":68,"column":3}}},"19":{"name":"(anonymous_25)","decl":{"start":{"line":66,"column":21},"end":{"line":66,"column":27}},"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":31}}},"20":{"name":"(anonymous_26)","decl":{"start":{"line":67,"column":23},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":23},"end":{"line":67,"column":40}}},"21":{"name":"execute","decl":{"start":{"line":70,"column":11},"end":{"line":70,"column":18}},"loc":{"start":{"line":70,"column":33},"end":{"line":101,"column":3}}},"22":{"name":"(anonymous_28)","decl":{"start":{"line":73,"column":6},"end":{"line":73,"column":7}},"loc":{"start":{"line":73,"column":8},"end":{"line":73,"column":14}}},"23":{"name":"executeRun","decl":{"start":{"line":103,"column":11},"end":{"line":103,"column":21}},"loc":{"start":{"line":104,"column":47},"end":{"line":134,"column":3}}},"24":{"name":"(anonymous_30)","decl":{"start":{"line":114,"column":12},"end":{"line":114,"column":13}},"loc":{"start":{"line":114,"column":16},"end":{"line":126,"column":7}}},"25":{"name":"(anonymous_31)","decl":{"start":{"line":122,"column":19},"end":{"line":122,"column":25}},"loc":{"start":{"line":122,"column":19},"end":{"line":122,"column":28}}},"26":{"name":"(anonymous_32)","decl":{"start":{"line":127,"column":13},"end":{"line":127,"column":14}},"loc":{"start":{"line":127,"column":17},"end":{"line":133,"column":7}}},"27":{"name":"(anonymous_33)","decl":{"start":{"line":129,"column":19},"end":{"line":129,"column":25}},"loc":{"start":{"line":129,"column":19},"end":{"line":129,"column":29}}},"28":{"name":"executeDryRun","decl":{"start":{"line":136,"column":11},"end":{"line":136,"column":24}},"loc":{"start":{"line":136,"column":39},"end":{"line":141,"column":3}}},"29":{"name":"(anonymous_35)","decl":{"start":{"line":138,"column":14},"end":{"line":138,"column":19}},"loc":{"start":{"line":138,"column":14},"end":{"line":138,"column":33}}},"30":{"name":"(anonymous_36)","decl":{"start":{"line":140,"column":18},"end":{"line":140,"column":23}},"loc":{"start":{"line":140,"column":18},"end":{"line":140,"column":27}}},"31":{"name":"executeRealRun","decl":{"start":{"line":143,"column":11},"end":{"line":143,"column":25}},"loc":{"start":{"line":143,"column":56},"end":{"line":162,"column":3}}},"32":{"name":"(anonymous_38)","decl":{"start":{"line":146,"column":14},"end":{"line":146,"column":19}},"loc":{"start":{"line":146,"column":14},"end":{"line":146,"column":34}}},"33":{"name":"(anonymous_39)","decl":{"start":{"line":147,"column":37},"end":{"line":147,"column":38}},"loc":{"start":{"line":147,"column":66},"end":{"line":157,"column":5}}},"34":{"name":"refreshStatus","decl":{"start":{"line":165,"column":11},"end":{"line":165,"column":24}},"loc":{"start":{"line":165,"column":38},"end":{"line":174,"column":3}}},"35":{"name":"(anonymous_41)","decl":{"start":{"line":166,"column":43},"end":{"line":166,"column":44}},"loc":{"start":{"line":166,"column":47},"end":{"line":173,"column":5}}},"36":{"name":"(anonymous_42)","decl":{"start":{"line":169,"column":8},"end":{"line":169,"column":9}},"loc":{"start":{"line":169,"column":36},"end":{"line":169,"column":42}}},"37":{"name":"rowData","decl":{"start":{"line":176,"column":11},"end":{"line":176,"column":18}},"loc":{"start":{"line":176,"column":18},"end":{"line":189,"column":3}}},"38":{"name":"(anonymous_44)","decl":{"start":{"line":179,"column":60},"end":{"line":179,"column":61}},"loc":{"start":{"line":179,"column":70},"end":{"line":185,"column":7}}},"39":{"name":"renderMigrationIds","decl":{"start":{"line":191,"column":11},"end":{"line":191,"column":29}},"loc":{"start":{"line":191,"column":29},"end":{"line":208,"column":3}}},"40":{"name":"(anonymous_46)","decl":{"start":{"line":200,"column":64},"end":{"line":200,"column":65}},"loc":{"start":{"line":200,"column":81},"end":{"line":200,"column":87}}},"41":{"name":"renderActions","decl":{"start":{"line":210,"column":11},"end":{"line":210,"column":24}},"loc":{"start":{"line":210,"column":24},"end":{"line":256,"column":3}}},"42":{"name":"(anonymous_48)","decl":{"start":{"line":215,"column":6},"end":{"line":215,"column":7}},"loc":{"start":{"line":215,"column":8},"end":{"line":215,"column":14}}},"43":{"name":"(anonymous_49)","decl":{"start":{"line":227,"column":19},"end":{"line":227,"column":25}},"loc":{"start":{"line":227,"column":19},"end":{"line":227,"column":32}}},"44":{"name":"(anonymous_50)","decl":{"start":{"line":237,"column":19},"end":{"line":237,"column":25}},"loc":{"start":{"line":237,"column":19},"end":{"line":237,"column":32}}},"45":{"name":"(anonymous_51)","decl":{"start":{"line":271,"column":48},"end":{"line":271,"column":49}},"loc":{"start":{"line":271,"column":61},"end":{"line":271,"column":67}}},"46":{"name":"(anonymous_52)","decl":{"start":{"line":281,"column":25},"end":{"line":281,"column":31}},"loc":{"start":{"line":281,"column":25},"end":{"line":281,"column":44}}},"47":{"name":"(anonymous_53)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":31}},"loc":{"start":{"line":288,"column":25},"end":{"line":288,"column":44}}}},"branchMap":{"0":{"loc":{"start":{"line":72,"column":17},"end":{"line":73,"column":null}},"type":"cond-expr","locations":[{"start":{"line":72,"column":31},"end":{"line":72,"column":33}},{"start":{"line":72,"column":17},"end":{"line":73,"column":null}}]},"1":{"loc":{"start":{"line":72,"column":17},"end":{"line":72,"column":33}},"type":"binary-expr","locations":[{"start":{"line":72,"column":17},"end":{"line":72,"column":33}},{"start":{"line":72,"column":17},"end":{"line":72,"column":33}}]},"2":{"loc":{"start":{"line":75,"column":4},"end":{"line":77,"column":null}},"type":"if","locations":[{"start":{"line":75,"column":4},"end":{"line":77,"column":null}}]},"3":{"loc":{"start":{"line":75,"column":8},"end":{"line":75,"column":49}},"type":"binary-expr","locations":[{"start":{"line":75,"column":8},"end":{"line":75,"column":28}},{"start":{"line":75,"column":32},"end":{"line":75,"column":49}}]},"4":{"loc":{"start":{"line":78,"column":4},"end":{"line":81,"column":null}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":81,"column":null}}]},"5":{"loc":{"start":{"line":78,"column":8},"end":{"line":78,"column":54}},"type":"binary-expr","locations":[{"start":{"line":78,"column":8},"end":{"line":78,"column":32}},{"start":{"line":78,"column":36},"end":{"line":78,"column":54}}]},"6":{"loc":{"start":{"line":82,"column":4},"end":{"line":90,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":4},"end":{"line":90,"column":null}}]},"7":{"loc":{"start":{"line":82,"column":8},"end":{"line":82,"column":22}},"type":"cond-expr","locations":[{"start":{"line":82,"column":12},"end":{"line":82,"column":14}},{"start":{"line":82,"column":8},"end":{"line":82,"column":22}}]},"8":{"loc":{"start":{"line":82,"column":8},"end":{"line":82,"column":14}},"type":"binary-expr","locations":[{"start":{"line":82,"column":8},"end":{"line":82,"column":14}},{"start":{"line":82,"column":8},"end":{"line":82,"column":14}}]},"9":{"loc":{"start":{"line":83,"column":6},"end":{"line":89,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":6},"end":{"line":89,"column":null}}]},"10":{"loc":{"start":{"line":91,"column":4},"end":{"line":99,"column":null}},"type":"if","locations":[{"start":{"line":91,"column":4},"end":{"line":99,"column":null}}]},"11":{"loc":{"start":{"line":91,"column":8},"end":{"line":91,"column":67}},"type":"binary-expr","locations":[{"start":{"line":91,"column":8},"end":{"line":91,"column":38}},{"start":{"line":91,"column":42},"end":{"line":91,"column":67}}]},"12":{"loc":{"start":{"line":91,"column":8},"end":{"line":91,"column":20}},"type":"cond-expr","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":14}},{"start":{"line":91,"column":8},"end":{"line":91,"column":20}}]},"13":{"loc":{"start":{"line":91,"column":8},"end":{"line":91,"column":14}},"type":"binary-expr","locations":[{"start":{"line":91,"column":8},"end":{"line":91,"column":14}},{"start":{"line":91,"column":8},"end":{"line":91,"column":14}}]},"14":{"loc":{"start":{"line":92,"column":6},"end":{"line":98,"column":null}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":98,"column":null}}]},"15":{"loc":{"start":{"line":94,"column":41},"end":{"line":94,"column":53}},"type":"cond-expr","locations":[{"start":{"line":94,"column":45},"end":{"line":94,"column":47}},{"start":{"line":94,"column":41},"end":{"line":94,"column":53}}]},"16":{"loc":{"start":{"line":94,"column":41},"end":{"line":94,"column":47}},"type":"binary-expr","locations":[{"start":{"line":94,"column":41},"end":{"line":94,"column":47}},{"start":{"line":94,"column":41},"end":{"line":94,"column":47}}]},"17":{"loc":{"start":{"line":108,"column":13},"end":{"line":108,"column":34}},"type":"cond-expr","locations":[{"start":{"line":108,"column":27},"end":{"line":108,"column":29}},{"start":{"line":108,"column":13},"end":{"line":108,"column":34}}]},"18":{"loc":{"start":{"line":108,"column":13},"end":{"line":108,"column":29}},"type":"binary-expr","locations":[{"start":{"line":108,"column":13},"end":{"line":108,"column":29}},{"start":{"line":108,"column":13},"end":{"line":108,"column":29}}]},"19":{"loc":{"start":{"line":116,"column":8},"end":{"line":118,"column":null}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":118,"column":null}}]},"20":{"loc":{"start":{"line":116,"column":12},"end":{"line":116,"column":43}},"type":"binary-expr","locations":[{"start":{"line":116,"column":12},"end":{"line":116,"column":32}},{"start":{"line":116,"column":36},"end":{"line":116,"column":43}}]},"21":{"loc":{"start":{"line":119,"column":8},"end":{"line":121,"column":null}},"type":"if","locations":[{"start":{"line":119,"column":8},"end":{"line":121,"column":null}}]},"22":{"loc":{"start":{"line":119,"column":12},"end":{"line":119,"column":47}},"type":"binary-expr","locations":[{"start":{"line":119,"column":12},"end":{"line":119,"column":36}},{"start":{"line":119,"column":40},"end":{"line":119,"column":47}}]},"23":{"loc":{"start":{"line":123,"column":8},"end":{"line":125,"column":null}},"type":"if","locations":[{"start":{"line":123,"column":8},"end":{"line":125,"column":null}}]},"24":{"loc":{"start":{"line":130,"column":8},"end":{"line":132,"column":null}},"type":"if","locations":[{"start":{"line":130,"column":8},"end":{"line":132,"column":null}}]},"25":{"loc":{"start":{"line":148,"column":6},"end":{"line":153,"column":null}},"type":"if","locations":[{"start":{"line":148,"column":6},"end":{"line":153,"column":null}},{"start":{"line":150,"column":13},"end":{"line":153,"column":null}}]},"26":{"loc":{"start":{"line":152,"column":42},"end":{"line":152,"column":49}},"type":"binary-expr","locations":[{"start":{"line":152,"column":42},"end":{"line":152,"column":45}},{"start":{"line":152,"column":47},"end":{"line":152,"column":49}}]},"27":{"loc":{"start":{"line":154,"column":6},"end":{"line":156,"column":null}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":156,"column":null}}]},"28":{"loc":{"start":{"line":159,"column":4},"end":{"line":161,"column":null}},"type":"if","locations":[{"start":{"line":159,"column":4},"end":{"line":161,"column":null}}]},"29":{"loc":{"start":{"line":177,"column":4},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":177,"column":4},"end":{"line":187,"column":null}}]},"30":{"loc":{"start":{"line":195,"column":15},"end":{"line":195,"column":32}},"type":"binary-expr","locations":[{"start":{"line":195,"column":15},"end":{"line":195,"column":26}},{"start":{"line":195,"column":30},"end":{"line":195,"column":32}}]},"31":{"loc":{"start":{"line":199,"column":10},"end":{"line":204,"column":16}},"type":"cond-expr","locations":[{"start":{"line":200,"column":14},"end":{"line":203,"column":15}},{"start":{"line":204,"column":14},"end":{"line":204,"column":16}}]},"32":{"loc":{"start":{"line":211,"column":4},"end":{"line":213,"column":null}},"type":"if","locations":[{"start":{"line":211,"column":4},"end":{"line":213,"column":null}}]},"33":{"loc":{"start":{"line":211,"column":8},"end":{"line":211,"column":56}},"type":"binary-expr","locations":[{"start":{"line":211,"column":8},"end":{"line":211,"column":40}},{"start":{"line":211,"column":44},"end":{"line":211,"column":56}}]},"34":{"loc":{"start":{"line":211,"column":10},"end":{"line":211,"column":39}},"type":"binary-expr","locations":[{"start":{"line":211,"column":10},"end":{"line":211,"column":24}},{"start":{"line":211,"column":28},"end":{"line":211,"column":39}}]},"35":{"loc":{"start":{"line":214,"column":17},"end":{"line":215,"column":null}},"type":"cond-expr","locations":[{"start":{"line":214,"column":31},"end":{"line":214,"column":33}},{"start":{"line":214,"column":17},"end":{"line":215,"column":null}}]},"36":{"loc":{"start":{"line":214,"column":17},"end":{"line":214,"column":33}},"type":"binary-expr","locations":[{"start":{"line":214,"column":17},"end":{"line":214,"column":33}},{"start":{"line":214,"column":17},"end":{"line":214,"column":33}}]},"37":{"loc":{"start":{"line":220,"column":9},"end":{"line":228,"column":null}},"type":"binary-expr","locations":[{"start":{"line":220,"column":9},"end":{"line":220,"column":25}},{"start":{"line":220,"column":29},"end":{"line":228,"column":null}}]},"38":{"loc":{"start":{"line":223,"column":21},"end":{"line":223,"column":34}},"type":"cond-expr","locations":[{"start":{"line":223,"column":25},"end":{"line":223,"column":27}},{"start":{"line":223,"column":21},"end":{"line":223,"column":34}}]},"39":{"loc":{"start":{"line":223,"column":21},"end":{"line":223,"column":27}},"type":"binary-expr","locations":[{"start":{"line":223,"column":21},"end":{"line":223,"column":27}},{"start":{"line":223,"column":21},"end":{"line":223,"column":27}}]},"40":{"loc":{"start":{"line":224,"column":17},"end":{"line":224,"column":55}},"type":"cond-expr","locations":[{"start":{"line":224,"column":34},"end":{"line":224,"column":50}},{"start":{"line":224,"column":53},"end":{"line":224,"column":55}}]},"41":{"loc":{"start":{"line":224,"column":18},"end":{"line":224,"column":31}},"type":"cond-expr","locations":[{"start":{"line":224,"column":22},"end":{"line":224,"column":24}},{"start":{"line":224,"column":18},"end":{"line":224,"column":31}}]},"42":{"loc":{"start":{"line":224,"column":18},"end":{"line":224,"column":24}},"type":"binary-expr","locations":[{"start":{"line":224,"column":18},"end":{"line":224,"column":24}},{"start":{"line":224,"column":18},"end":{"line":224,"column":24}}]},"43":{"loc":{"start":{"line":224,"column":34},"end":{"line":224,"column":50}},"type":"cond-expr","locations":[{"start":{"line":224,"column":38},"end":{"line":224,"column":40}},{"start":{"line":224,"column":34},"end":{"line":224,"column":50}}]},"44":{"loc":{"start":{"line":224,"column":34},"end":{"line":224,"column":40}},"type":"binary-expr","locations":[{"start":{"line":224,"column":34},"end":{"line":224,"column":40}},{"start":{"line":224,"column":34},"end":{"line":224,"column":40}}]},"45":{"loc":{"start":{"line":230,"column":9},"end":{"line":238,"column":null}},"type":"binary-expr","locations":[{"start":{"line":230,"column":9},"end":{"line":230,"column":26}},{"start":{"line":230,"column":30},"end":{"line":238,"column":null}}]},"46":{"loc":{"start":{"line":233,"column":21},"end":{"line":233,"column":38}},"type":"cond-expr","locations":[{"start":{"line":233,"column":25},"end":{"line":233,"column":27}},{"start":{"line":233,"column":21},"end":{"line":233,"column":38}}]},"47":{"loc":{"start":{"line":233,"column":21},"end":{"line":233,"column":27}},"type":"binary-expr","locations":[{"start":{"line":233,"column":21},"end":{"line":233,"column":27}},{"start":{"line":233,"column":21},"end":{"line":233,"column":27}}]},"48":{"loc":{"start":{"line":234,"column":17},"end":{"line":234,"column":63}},"type":"cond-expr","locations":[{"start":{"line":234,"column":38},"end":{"line":234,"column":58}},{"start":{"line":234,"column":61},"end":{"line":234,"column":63}}]},"49":{"loc":{"start":{"line":234,"column":18},"end":{"line":234,"column":35}},"type":"cond-expr","locations":[{"start":{"line":234,"column":22},"end":{"line":234,"column":24}},{"start":{"line":234,"column":18},"end":{"line":234,"column":35}}]},"50":{"loc":{"start":{"line":234,"column":18},"end":{"line":234,"column":24}},"type":"binary-expr","locations":[{"start":{"line":234,"column":18},"end":{"line":234,"column":24}},{"start":{"line":234,"column":18},"end":{"line":234,"column":24}}]},"51":{"loc":{"start":{"line":234,"column":38},"end":{"line":234,"column":58}},"type":"cond-expr","locations":[{"start":{"line":234,"column":42},"end":{"line":234,"column":44}},{"start":{"line":234,"column":38},"end":{"line":234,"column":58}}]},"52":{"loc":{"start":{"line":234,"column":38},"end":{"line":234,"column":44}},"type":"binary-expr","locations":[{"start":{"line":234,"column":38},"end":{"line":234,"column":44}},{"start":{"line":234,"column":38},"end":{"line":234,"column":44}}]},"53":{"loc":{"start":{"line":241,"column":11},"end":{"line":245,"column":null}},"type":"binary-expr","locations":[{"start":{"line":241,"column":11},"end":{"line":241,"column":33}},{"start":{"line":241,"column":33},"end":{"line":241,"column":53}},{"start":{"line":241,"column":57},"end":{"line":241,"column":74}},{"start":{"line":242,"column":12},"end":{"line":244,"column":null}}]},"54":{"loc":{"start":{"line":241,"column":12},"end":{"line":241,"column":29}},"type":"cond-expr","locations":[{"start":{"line":241,"column":16},"end":{"line":241,"column":18}},{"start":{"line":241,"column":12},"end":{"line":241,"column":29}}]},"55":{"loc":{"start":{"line":241,"column":12},"end":{"line":241,"column":18}},"type":"binary-expr","locations":[{"start":{"line":241,"column":12},"end":{"line":241,"column":18}},{"start":{"line":241,"column":12},"end":{"line":241,"column":18}}]},"56":{"loc":{"start":{"line":241,"column":33},"end":{"line":241,"column":53}},"type":"cond-expr","locations":[{"start":{"line":241,"column":37},"end":{"line":241,"column":39}},{"start":{"line":241,"column":33},"end":{"line":241,"column":53}}]},"57":{"loc":{"start":{"line":241,"column":33},"end":{"line":241,"column":39}},"type":"binary-expr","locations":[{"start":{"line":241,"column":33},"end":{"line":241,"column":39}},{"start":{"line":241,"column":33},"end":{"line":241,"column":39}}]},"58":{"loc":{"start":{"line":244,"column":15},"end":{"line":244,"column":35}},"type":"cond-expr","locations":[{"start":{"line":244,"column":19},"end":{"line":244,"column":21}},{"start":{"line":244,"column":15},"end":{"line":244,"column":35}}]},"59":{"loc":{"start":{"line":244,"column":15},"end":{"line":244,"column":21}},"type":"binary-expr","locations":[{"start":{"line":244,"column":15},"end":{"line":244,"column":21}},{"start":{"line":244,"column":15},"end":{"line":244,"column":21}}]},"60":{"loc":{"start":{"line":247,"column":11},"end":{"line":251,"column":null}},"type":"binary-expr","locations":[{"start":{"line":247,"column":11},"end":{"line":247,"column":29}},{"start":{"line":247,"column":29},"end":{"line":247,"column":45}},{"start":{"line":247,"column":49},"end":{"line":247,"column":65}},{"start":{"line":248,"column":12},"end":{"line":250,"column":null}}]},"61":{"loc":{"start":{"line":247,"column":12},"end":{"line":247,"column":25}},"type":"cond-expr","locations":[{"start":{"line":247,"column":16},"end":{"line":247,"column":18}},{"start":{"line":247,"column":12},"end":{"line":247,"column":25}}]},"62":{"loc":{"start":{"line":247,"column":12},"end":{"line":247,"column":18}},"type":"binary-expr","locations":[{"start":{"line":247,"column":12},"end":{"line":247,"column":18}},{"start":{"line":247,"column":12},"end":{"line":247,"column":18}}]},"63":{"loc":{"start":{"line":247,"column":29},"end":{"line":247,"column":45}},"type":"cond-expr","locations":[{"start":{"line":247,"column":33},"end":{"line":247,"column":35}},{"start":{"line":247,"column":29},"end":{"line":247,"column":45}}]},"64":{"loc":{"start":{"line":247,"column":29},"end":{"line":247,"column":35}},"type":"binary-expr","locations":[{"start":{"line":247,"column":29},"end":{"line":247,"column":35}},{"start":{"line":247,"column":29},"end":{"line":247,"column":35}}]},"65":{"loc":{"start":{"line":250,"column":15},"end":{"line":250,"column":31}},"type":"cond-expr","locations":[{"start":{"line":250,"column":19},"end":{"line":250,"column":21}},{"start":{"line":250,"column":15},"end":{"line":250,"column":31}}]},"66":{"loc":{"start":{"line":250,"column":15},"end":{"line":250,"column":21}},"type":"binary-expr","locations":[{"start":{"line":250,"column":15},"end":{"line":250,"column":21}},{"start":{"line":250,"column":15},"end":{"line":250,"column":21}}]},"67":{"loc":{"start":{"line":268,"column":19},"end":{"line":268,"column":46}},"type":"binary-expr","locations":[{"start":{"line":268,"column":19},"end":{"line":268,"column":40}},{"start":{"line":268,"column":44},"end":{"line":268,"column":46}}]},"68":{"loc":{"start":{"line":268,"column":19},"end":{"line":268,"column":40}},"type":"cond-expr","locations":[{"start":{"line":268,"column":33},"end":{"line":268,"column":35}},{"start":{"line":268,"column":19},"end":{"line":268,"column":40}}]},"69":{"loc":{"start":{"line":268,"column":19},"end":{"line":268,"column":35}},"type":"binary-expr","locations":[{"start":{"line":268,"column":19},"end":{"line":268,"column":35}},{"start":{"line":268,"column":19},"end":{"line":268,"column":35}}]},"70":{"loc":{"start":{"line":277,"column":11},"end":{"line":293,"column":null}},"type":"binary-expr","locations":[{"start":{"line":277,"column":11},"end":{"line":277,"column":25}},{"start":{"line":277,"column":29},"end":{"line":277,"column":40}},{"start":{"line":278,"column":12},"end":{"line":292,"column":null}}]},"71":{"loc":{"start":{"line":282,"column":23},"end":{"line":282,"column":74}},"type":"cond-expr","locations":[{"start":{"line":282,"column":41},"end":{"line":282,"column":60}},{"start":{"line":282,"column":63},"end":{"line":282,"column":74}}]},"72":{"loc":{"start":{"line":289,"column":23},"end":{"line":289,"column":76}},"type":"cond-expr","locations":[{"start":{"line":289,"column":43},"end":{"line":289,"column":62}},{"start":{"line":289,"column":65},"end":{"line":289,"column":76}}]},"73":{"loc":{"start":{"line":300,"column":9},"end":{"line":306,"column":null}},"type":"binary-expr","locations":[{"start":{"line":300,"column":9},"end":{"line":300,"column":23}},{"start":{"line":300,"column":27},"end":{"line":300,"column":38}},{"start":{"line":300,"column":42},"end":{"line":300,"column":49}},{"start":{"line":301,"column":10},"end":{"line":305,"column":null}}]},"74":{"loc":{"start":{"line":311,"column":9},"end":{"line":316,"column":null}},"type":"binary-expr","locations":[{"start":{"line":311,"column":9},"end":{"line":311,"column":23}},{"start":{"line":312,"column":10},"end":{"line":315,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0},"b":{"0":[0,0],"1":[0,0],"2":[0],"3":[0,0],"4":[0],"5":[0,0],"6":[0],"7":[0,0],"8":[0,0],"9":[0],"10":[0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0],"20":[0,0],"21":[0],"22":[0,0],"23":[0],"24":[0],"25":[0,0],"26":[0,0],"27":[0],"28":[0],"29":[0],"30":[0,0],"31":[0,0],"32":[0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0,0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0,0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0,0],"71":[0,0],"72":[0,0],"73":[0,0,0,0],"74":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_migrations/types.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_migrations/types.tsx","statementMap":{"0":{"start":{"line":20,"column":0},"end":{"line":20,"column":null}},"1":{"start":{"line":21,"column":4},"end":{"line":21,"column":null}},"2":{"start":{"line":22,"column":4},"end":{"line":22,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":20,"column":0},"end":{"line":20,"column":12}},"loc":{"start":{"line":20,"column":18},"end":{"line":23,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":null}},"type":"binary-expr","locations":[{"start":{"line":20,"column":12},"end":{"line":20,"column":18}},{"start":{"line":20,"column":12},"end":{"line":20,"column":null}}]}},"s":{"0":1,"1":1,"2":1},"f":{"0":1},"b":{"0":[1,1]}} +,"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_queries/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_queries/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":71}},"3":{"start":{"line":8,"column":62},"end":{"line":10,"column":7}},"4":{"start":{"line":8,"column":31},"end":{"line":8,"column":33}},"5":{"start":{"line":8,"column":58},"end":{"line":8,"column":62}},"6":{"start":{"line":12,"column":2},"end":{"line":19,"column":9}},"7":{"start":{"line":13,"column":4},"end":{"line":18,"column":7}},"8":{"start":{"line":14,"column":6},"end":{"line":16,"column":8}},"9":{"start":{"line":15,"column":25},"end":{"line":15,"column":null}},"10":{"start":{"line":17,"column":6},"end":{"line":17,"column":37}},"11":{"start":{"line":22,"column":4},"end":{"line":29,"column":6}},"12":{"start":{"line":33,"column":22},"end":{"line":36,"column":17}},"13":{"start":{"line":35,"column":21},"end":{"line":35,"column":52}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":28}},"15":{"start":{"line":40,"column":2},"end":{"line":48,"column":4}},"16":{"start":{"line":51,"column":20},"end":{"line":54,"column":2}},"17":{"start":{"line":56,"column":15},"end":{"line":59,"column":2}},"18":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}}},"fnMap":{"0":{"name":"ClickhouseQueries","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":26}},"loc":{"start":{"line":7,"column":49},"end":{"line":49,"column":1}}},"1":{"name":"(anonymous_8)","decl":{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},"loc":{"start":{"line":12,"column":12},"end":{"line":19,"column":3}}},"2":{"name":"(anonymous_9)","decl":{"start":{"line":13,"column":47},"end":{"line":13,"column":48}},"loc":{"start":{"line":13,"column":51},"end":{"line":18,"column":5}}},"3":{"name":"(anonymous_10)","decl":{"start":{"line":15,"column":8},"end":{"line":15,"column":9}},"loc":{"start":{"line":15,"column":20},"end":{"line":15,"column":26}}},"4":{"name":"tablePopulator","decl":{"start":{"line":21,"column":11},"end":{"line":21,"column":25}},"loc":{"start":{"line":21,"column":50},"end":{"line":30,"column":3}}},"5":{"name":"formatSQL","decl":{"start":{"line":32,"column":11},"end":{"line":32,"column":20}},"loc":{"start":{"line":32,"column":32},"end":{"line":38,"column":3}}},"6":{"name":"(anonymous_13)","decl":{"start":{"line":35,"column":11},"end":{"line":35,"column":12}},"loc":{"start":{"line":35,"column":16},"end":{"line":35,"column":25}}}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":1,"17":1,"18":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_queries/query_display.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/clickhouse_queries/query_display.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":47}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":50}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"4":{"start":{"line":7,"column":0},"end":{"line":7,"column":51}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":39}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":49}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":42}},"8":{"start":{"line":11,"column":0},"end":{"line":11,"column":53}},"9":{"start":{"line":12,"column":0},"end":{"line":12,"column":56}},"10":{"start":{"line":13,"column":0},"end":{"line":13,"column":45}},"11":{"start":{"line":14,"column":0},"end":{"line":14,"column":78}},"12":{"start":{"line":15,"column":0},"end":{"line":15,"column":70}},"13":{"start":{"line":26,"column":20},"end":{"line":26,"column":40}},"14":{"start":{"line":32,"column":34},"end":{"line":32,"column":68}},"15":{"start":{"line":32,"column":17},"end":{"line":32,"column":19}},"16":{"start":{"line":32,"column":30},"end":{"line":32,"column":34}},"17":{"start":{"line":33,"column":28},"end":{"line":35,"column":4}},"18":{"start":{"line":33,"column":14},"end":{"line":33,"column":16}},"19":{"start":{"line":33,"column":24},"end":{"line":33,"column":28}},"20":{"start":{"line":36,"column":54},"end":{"line":37,"column":null}},"21":{"start":{"line":36,"column":27},"end":{"line":36,"column":29}},"22":{"start":{"line":36,"column":50},"end":{"line":36,"column":54}},"23":{"start":{"line":40,"column":2},"end":{"line":44,"column":9}},"24":{"start":{"line":41,"column":4},"end":{"line":43,"column":7}},"25":{"start":{"line":42,"column":6},"end":{"line":42,"column":23}},"26":{"start":{"line":47,"column":4},"end":{"line":56,"column":7}},"27":{"start":{"line":49,"column":6},"end":{"line":49,"column":28}},"28":{"start":{"line":50,"column":6},"end":{"line":50,"column":28}},"29":{"start":{"line":52,"column":6},"end":{"line":54,"column":null}},"30":{"start":{"line":60,"column":4},"end":{"line":65,"column":7}},"31":{"start":{"line":61,"column":6},"end":{"line":63,"column":null}},"32":{"start":{"line":69,"column":33},"end":{"line":69,"column":54}},"33":{"start":{"line":69,"column":15},"end":{"line":69,"column":17}},"34":{"start":{"line":69,"column":29},"end":{"line":69,"column":33}},"35":{"start":{"line":71,"column":4},"end":{"line":77,"column":7}},"36":{"start":{"line":72,"column":6},"end":{"line":75,"column":null}},"37":{"start":{"line":81,"column":4},"end":{"line":86,"column":7}},"38":{"start":{"line":82,"column":6},"end":{"line":84,"column":null}},"39":{"start":{"line":90,"column":4},"end":{"line":96,"column":9}},"40":{"start":{"line":93,"column":8},"end":{"line":93,"column":91}},"41":{"start":{"line":94,"column":8},"end":{"line":94,"column":46}},"42":{"start":{"line":95,"column":8},"end":{"line":95,"column":73}},"43":{"start":{"line":95,"column":47},"end":{"line":95,"column":71}},"44":{"start":{"line":100,"column":4},"end":{"line":100,"column":47}},"45":{"start":{"line":104,"column":20},"end":{"line":104,"column":77}},"46":{"start":{"line":104,"column":42},"end":{"line":104,"column":77}},"47":{"start":{"line":106,"column":4},"end":{"line":126,"column":null}},"48":{"start":{"line":107,"column":24},"end":{"line":110,"column":9}},"49":{"start":{"line":107,"column":60},"end":{"line":110,"column":9}},"50":{"start":{"line":111,"column":23},"end":{"line":116,"column":11}},"51":{"start":{"line":112,"column":26},"end":{"line":112,"column":64}},"52":{"start":{"line":113,"column":23},"end":{"line":116,"column":11}},"53":{"start":{"line":117,"column":18},"end":{"line":117,"column":48}},"54":{"start":{"line":118,"column":23},"end":{"line":118,"column":43}},"55":{"start":{"line":119,"column":6},"end":{"line":124,"column":null}},"56":{"start":{"line":120,"column":8},"end":{"line":123,"column":11}},"57":{"start":{"line":125,"column":6},"end":{"line":125,"column":19}},"58":{"start":{"line":127,"column":4},"end":{"line":127,"column":14}},"59":{"start":{"line":130,"column":2},"end":{"line":213,"column":4}},"60":{"start":{"line":138,"column":14},"end":{"line":138,"column":null}},"61":{"start":{"line":147,"column":12},"end":{"line":147,"column":32}},"62":{"start":{"line":157,"column":49},"end":{"line":157,"column":70}},"63":{"start":{"line":182,"column":10},"end":{"line":197,"column":null}},"64":{"start":{"line":183,"column":12},"end":{"line":196,"column":14}},"65":{"start":{"line":189,"column":35},"end":{"line":189,"column":null}},"66":{"start":{"line":199,"column":10},"end":{"line":209,"column":12}},"67":{"start":{"line":203,"column":31},"end":{"line":203,"column":null}},"68":{"start":{"line":216,"column":17},"end":{"line":218,"column":2}},"69":{"start":{"line":220,"column":21},"end":{"line":220,"column":23}},"70":{"start":{"line":222,"column":28},"end":{"line":226,"column":2}},"71":{"start":{"line":228,"column":27},"end":{"line":232,"column":2}},"72":{"start":{"line":234,"column":20},"end":{"line":237,"column":2}},"73":{"start":{"line":243,"column":30},"end":{"line":243,"column":36}},"74":{"start":{"line":244,"column":17},"end":{"line":262,"column":4}},"75":{"start":{"line":251,"column":8},"end":{"line":251,"column":28}},"76":{"start":{"line":252,"column":10},"end":{"line":254,"column":12}},"77":{"start":{"line":253,"column":25},"end":{"line":253,"column":null}},"78":{"start":{"line":259,"column":21},"end":{"line":259,"column":23}},"79":{"start":{"line":260,"column":6},"end":{"line":260,"column":33}},"80":{"start":{"line":263,"column":2},"end":{"line":272,"column":4}},"81":{"start":{"line":275,"column":25},"end":{"line":280,"column":2}},"82":{"start":{"line":282,"column":0},"end":{"line":282,"column":28}}},"fnMap":{"0":{"name":"QueryDisplay","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":21}},"loc":{"start":{"line":31,"column":1},"end":{"line":214,"column":1}}},"1":{"name":"(anonymous_11)","decl":{"start":{"line":40,"column":12},"end":{"line":40,"column":null}},"loc":{"start":{"line":40,"column":12},"end":{"line":44,"column":3}}},"2":{"name":"(anonymous_12)","decl":{"start":{"line":41,"column":40},"end":{"line":41,"column":41}},"loc":{"start":{"line":41,"column":44},"end":{"line":43,"column":5}}},"3":{"name":"selectStorage","decl":{"start":{"line":46,"column":11},"end":{"line":46,"column":24}},"loc":{"start":{"line":46,"column":40},"end":{"line":57,"column":3}}},"4":{"name":"(anonymous_14)","decl":{"start":{"line":47,"column":13},"end":{"line":47,"column":14}},"loc":{"start":{"line":47,"column":23},"end":{"line":56,"column":5}}},"5":{"name":"setSudo","decl":{"start":{"line":59,"column":11},"end":{"line":59,"column":18}},"loc":{"start":{"line":59,"column":33},"end":{"line":66,"column":3}}},"6":{"name":"(anonymous_16)","decl":{"start":{"line":60,"column":13},"end":{"line":60,"column":14}},"loc":{"start":{"line":60,"column":23},"end":{"line":65,"column":5}}},"7":{"name":"selectHost","decl":{"start":{"line":68,"column":11},"end":{"line":68,"column":21}},"loc":{"start":{"line":68,"column":40},"end":{"line":78,"column":3}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":71,"column":13},"end":{"line":71,"column":14}},"loc":{"start":{"line":71,"column":23},"end":{"line":77,"column":5}}},"9":{"name":"updateQuerySql","decl":{"start":{"line":80,"column":11},"end":{"line":80,"column":25}},"loc":{"start":{"line":80,"column":37},"end":{"line":87,"column":3}}},"10":{"name":"(anonymous_20)","decl":{"start":{"line":81,"column":13},"end":{"line":81,"column":14}},"loc":{"start":{"line":81,"column":23},"end":{"line":86,"column":5}}},"11":{"name":"executeQuery","decl":{"start":{"line":89,"column":11},"end":{"line":89,"column":23}},"loc":{"start":{"line":89,"column":23},"end":{"line":97,"column":3}}},"12":{"name":"(anonymous_22)","decl":{"start":{"line":92,"column":12},"end":{"line":92,"column":13}},"loc":{"start":{"line":92,"column":19},"end":{"line":96,"column":7}}},"13":{"name":"(anonymous_23)","decl":{"start":{"line":95,"column":30},"end":{"line":95,"column":31}},"loc":{"start":{"line":95,"column":42},"end":{"line":95,"column":48}}},"14":{"name":"copyText","decl":{"start":{"line":99,"column":11},"end":{"line":99,"column":19}},"loc":{"start":{"line":99,"column":32},"end":{"line":101,"column":3}}},"15":{"name":"getHosts","decl":{"start":{"line":103,"column":11},"end":{"line":103,"column":19}},"loc":{"start":{"line":103,"column":50},"end":{"line":128,"column":3}}},"16":{"name":"(anonymous_26)","decl":{"start":{"line":104,"column":34},"end":{"line":104,"column":35}},"loc":{"start":{"line":104,"column":37},"end":{"line":104,"column":44}}},"17":{"name":"(anonymous_27)","decl":{"start":{"line":107,"column":50},"end":{"line":107,"column":51}},"loc":{"start":{"line":107,"column":55},"end":{"line":107,"column":61}}},"18":{"name":"(anonymous_28)","decl":{"start":{"line":112,"column":16},"end":{"line":112,"column":17}},"loc":{"start":{"line":112,"column":21},"end":{"line":112,"column":27}}},"19":{"name":"(anonymous_29)","decl":{"start":{"line":113,"column":13},"end":{"line":113,"column":14}},"loc":{"start":{"line":113,"column":18},"end":{"line":113,"column":24}}},"20":{"name":"(anonymous_30)","decl":{"start":{"line":137,"column":22},"end":{"line":137,"column":23}},"loc":{"start":{"line":137,"column":63},"end":{"line":138,"column":21}}},"21":{"name":"(anonymous_31)","decl":{"start":{"line":146,"column":25},"end":{"line":146,"column":26}},"loc":{"start":{"line":146,"column":29},"end":{"line":148,"column":11}}},"22":{"name":"(anonymous_32)","decl":{"start":{"line":157,"column":36},"end":{"line":157,"column":37}},"loc":{"start":{"line":157,"column":44},"end":{"line":157,"column":56}}},"23":{"name":"(anonymous_33)","decl":{"start":{"line":181,"column":32},"end":{"line":181,"column":33}},"loc":{"start":{"line":181,"column":49},"end":{"line":210,"column":9}}},"24":{"name":"(anonymous_34)","decl":{"start":{"line":189,"column":29},"end":{"line":189,"column":35}},"loc":{"start":{"line":189,"column":29},"end":{"line":189,"column":43}}},"25":{"name":"(anonymous_35)","decl":{"start":{"line":203,"column":25},"end":{"line":203,"column":31}},"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":39}}},"26":{"name":"TextArea","decl":{"start":{"line":239,"column":9},"end":{"line":239,"column":17}},"loc":{"start":{"line":242,"column":1},"end":{"line":273,"column":1}}},"27":{"name":"(anonymous_37)","decl":{"start":{"line":251,"column":28},"end":{"line":251,"column":null}},"loc":{"start":{"line":251,"column":28},"end":{"line":255,"column":9}}},"28":{"name":"(anonymous_38)","decl":{"start":{"line":253,"column":19},"end":{"line":253,"column":25}},"loc":{"start":{"line":253,"column":19},"end":{"line":253,"column":29}}},"29":{"name":"(anonymous_39)","decl":{"start":{"line":259,"column":12},"end":{"line":259,"column":13}},"loc":{"start":{"line":259,"column":23},"end":{"line":261,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":106,"column":4},"end":{"line":126,"column":null}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":126,"column":null}}]},"1":{"loc":{"start":{"line":119,"column":6},"end":{"line":124,"column":null}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":124,"column":null}}]},"2":{"loc":{"start":{"line":132,"column":19},"end":{"line":132,"column":55}},"type":"cond-expr","locations":[{"start":{"line":132,"column":32},"end":{"line":132,"column":40}},{"start":{"line":132,"column":43},"end":{"line":132,"column":55}}]},"3":{"loc":{"start":{"line":154,"column":21},"end":{"line":154,"column":40}},"type":"binary-expr","locations":[{"start":{"line":154,"column":21},"end":{"line":154,"column":34}},{"start":{"line":154,"column":38},"end":{"line":154,"column":40}}]},"4":{"loc":{"start":{"line":162,"column":16},"end":{"line":162,"column":77}},"type":"cond-expr","locations":[{"start":{"line":162,"column":43},"end":{"line":162,"column":72}},{"start":{"line":162,"column":75},"end":{"line":162,"column":77}}]},"5":{"loc":{"start":{"line":162,"column":16},"end":{"line":162,"column":40}},"type":"binary-expr","locations":[{"start":{"line":162,"column":16},"end":{"line":162,"column":26}},{"start":{"line":162,"column":30},"end":{"line":162,"column":40}}]},"6":{"loc":{"start":{"line":173,"column":16},"end":{"line":173,"column":74}},"type":"binary-expr","locations":[{"start":{"line":173,"column":16},"end":{"line":173,"column":30}},{"start":{"line":173,"column":34},"end":{"line":173,"column":45}},{"start":{"line":173,"column":49},"end":{"line":173,"column":60}},{"start":{"line":173,"column":64},"end":{"line":173,"column":74}}]},"7":{"loc":{"start":{"line":182,"column":10},"end":{"line":197,"column":null}},"type":"if","locations":[{"start":{"line":182,"column":10},"end":{"line":197,"column":null}}]},"8":{"loc":{"start":{"line":269,"column":9},"end":{"line":269,"column":20}},"type":"binary-expr","locations":[{"start":{"line":269,"column":9},"end":{"line":269,"column":14}},{"start":{"line":269,"column":18},"end":{"line":269,"column":20}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":1,"69":1,"70":1,"71":1,"72":1,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":1,"82":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},"b":{"0":[0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0,0,0],"7":[0],"8":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/common/components/sql_editor.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/common/components/sql_editor.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":48}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":67}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":53}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":43}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":46}},"6":{"start":{"line":14,"column":33},"end":{"line":14,"column":35}},"7":{"start":{"line":14,"column":43},"end":{"line":14,"column":52}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":56}},"9":{"start":{"line":16,"column":18},"end":{"line":16,"column":49}},"10":{"start":{"line":18,"column":25},"end":{"line":24,"column":16}},"11":{"start":{"line":19,"column":4},"end":{"line":23,"column":7}},"12":{"start":{"line":20,"column":6},"end":{"line":22,"column":null}},"13":{"start":{"line":21,"column":8},"end":{"line":21,"column":46}},"14":{"start":{"line":26,"column":23},"end":{"line":28,"column":8}},"15":{"start":{"line":27,"column":4},"end":{"line":27,"column":61}},"16":{"start":{"line":30,"column":21},"end":{"line":38,"column":4}},"17":{"start":{"line":40,"column":2},"end":{"line":51,"column":9}},"18":{"start":{"line":41,"column":4},"end":{"line":41,"column":36}},"19":{"start":{"line":41,"column":29},"end":{"line":41,"column":36}},"20":{"start":{"line":43,"column":18},"end":{"line":45,"column":6}},"21":{"start":{"line":47,"column":4},"end":{"line":50,"column":7}},"22":{"start":{"line":53,"column":2},"end":{"line":66,"column":14}},"23":{"start":{"line":54,"column":4},"end":{"line":54,"column":33}},"24":{"start":{"line":54,"column":26},"end":{"line":54,"column":33}},"25":{"start":{"line":56,"column":18},"end":{"line":56,"column":39}},"26":{"start":{"line":58,"column":4},"end":{"line":65,"column":null}},"27":{"start":{"line":59,"column":6},"end":{"line":64,"column":8}},"28":{"start":{"line":68,"column":2},"end":{"line":68,"column":34}},"29":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}}},"fnMap":{"0":{"name":"SQLEditor","decl":{"start":{"line":14,"column":16},"end":{"line":14,"column":25}},"loc":{"start":{"line":14,"column":52},"end":{"line":69,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":18,"column":33},"end":{"line":18,"column":null}},"loc":{"start":{"line":18,"column":33},"end":{"line":24,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":19,"column":40},"end":{"line":19,"column":41}},"loc":{"start":{"line":19,"column":47},"end":{"line":23,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":26,"column":31},"end":{"line":26,"column":null}},"loc":{"start":{"line":26,"column":31},"end":{"line":28,"column":3}}},"4":{"name":"(anonymous_10)","decl":{"start":{"line":40,"column":18},"end":{"line":40,"column":null}},"loc":{"start":{"line":40,"column":18},"end":{"line":51,"column":3}}},"5":{"name":"(anonymous_11)","decl":{"start":{"line":53,"column":18},"end":{"line":53,"column":null}},"loc":{"start":{"line":53,"column":18},"end":{"line":66,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":6},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":22,"column":null}}]},"1":{"loc":{"start":{"line":41,"column":4},"end":{"line":41,"column":36}},"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":36}}]},"2":{"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":33}},"type":"if","locations":[{"start":{"line":54,"column":4},"end":{"line":54,"column":33}}]},"3":{"loc":{"start":{"line":58,"column":4},"end":{"line":65,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":65,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{"0":[0],"1":[0],"2":[0],"3":[0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/common/components/theme.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/common/components/theme.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":46}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":74}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":40}},"3":{"start":{"line":5,"column":13},"end":{"line":9,"column":3}},"4":{"start":{"line":11,"column":13},"end":{"line":42,"column":2}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/dead_letter_queue/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/dead_letter_queue/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"2":{"start":{"line":8,"column":40},"end":{"line":10,"column":14}},"3":{"start":{"line":8,"column":20},"end":{"line":8,"column":22}},"4":{"start":{"line":8,"column":36},"end":{"line":8,"column":40}},"5":{"start":{"line":11,"column":36},"end":{"line":11,"column":51}},"6":{"start":{"line":11,"column":18},"end":{"line":11,"column":20}},"7":{"start":{"line":11,"column":32},"end":{"line":11,"column":36}},"8":{"start":{"line":12,"column":36},"end":{"line":12,"column":57}},"9":{"start":{"line":12,"column":18},"end":{"line":12,"column":20}},"10":{"start":{"line":12,"column":32},"end":{"line":12,"column":36}},"11":{"start":{"line":13,"column":28},"end":{"line":13,"column":56}},"12":{"start":{"line":13,"column":14},"end":{"line":13,"column":16}},"13":{"start":{"line":13,"column":24},"end":{"line":13,"column":28}},"14":{"start":{"line":14,"column":52},"end":{"line":14,"column":63}},"15":{"start":{"line":14,"column":26},"end":{"line":14,"column":28}},"16":{"start":{"line":14,"column":48},"end":{"line":14,"column":52}},"17":{"start":{"line":15,"column":30},"end":{"line":15,"column":59}},"18":{"start":{"line":15,"column":15},"end":{"line":15,"column":17}},"19":{"start":{"line":15,"column":26},"end":{"line":15,"column":30}},"20":{"start":{"line":17,"column":2},"end":{"line":24,"column":9}},"21":{"start":{"line":18,"column":4},"end":{"line":20,"column":7}},"22":{"start":{"line":19,"column":6},"end":{"line":19,"column":26}},"23":{"start":{"line":21,"column":4},"end":{"line":23,"column":7}},"24":{"start":{"line":22,"column":6},"end":{"line":22,"column":24}},"25":{"start":{"line":27,"column":4},"end":{"line":29,"column":7}},"26":{"start":{"line":28,"column":6},"end":{"line":28,"column":26}},"27":{"start":{"line":33,"column":4},"end":{"line":35,"column":null}},"28":{"start":{"line":34,"column":6},"end":{"line":34,"column":13}},"29":{"start":{"line":37,"column":41},"end":{"line":40,"column":6}},"30":{"start":{"line":42,"column":4},"end":{"line":48,"column":7}},"31":{"start":{"line":43,"column":6},"end":{"line":43,"column":26}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":26}},"33":{"start":{"line":45,"column":6},"end":{"line":45,"column":21}},"34":{"start":{"line":46,"column":6},"end":{"line":46,"column":30}},"35":{"start":{"line":47,"column":6},"end":{"line":47,"column":22}},"36":{"start":{"line":51,"column":2},"end":{"line":53,"column":null}},"37":{"start":{"line":52,"column":4},"end":{"line":52,"column":16}},"38":{"start":{"line":55,"column":2},"end":{"line":185,"column":4}},"39":{"start":{"line":68,"column":14},"end":{"line":68,"column":33}},"40":{"start":{"line":98,"column":20},"end":{"line":103,"column":null}},"41":{"start":{"line":98,"column":38},"end":{"line":98,"column":47}},"42":{"start":{"line":98,"column":34},"end":{"line":98,"column":38}},"43":{"start":{"line":99,"column":22},"end":{"line":102,"column":null}},"44":{"start":{"line":100,"column":24},"end":{"line":100,"column":40}},"45":{"start":{"line":101,"column":24},"end":{"line":101,"column":31}},"46":{"start":{"line":105,"column":20},"end":{"line":105,"column":35}},"47":{"start":{"line":111,"column":44},"end":{"line":116,"column":20}},"48":{"start":{"line":128,"column":33},"end":{"line":128,"column":68}},"49":{"start":{"line":129,"column":20},"end":{"line":129,"column":37}},"50":{"start":{"line":153,"column":32},"end":{"line":153,"column":62}},"51":{"start":{"line":154,"column":20},"end":{"line":156,"column":null}},"52":{"start":{"line":155,"column":22},"end":{"line":155,"column":50}},"53":{"start":{"line":176,"column":16},"end":{"line":176,"column":36}},"54":{"start":{"line":188,"column":21},"end":{"line":193,"column":2}},"55":{"start":{"line":195,"column":20},"end":{"line":198,"column":2}},"56":{"start":{"line":200,"column":20},"end":{"line":204,"column":2}},"57":{"start":{"line":206,"column":14},"end":{"line":208,"column":2}},"58":{"start":{"line":210,"column":23},"end":{"line":213,"column":2}},"59":{"start":{"line":215,"column":18},"end":{"line":220,"column":2}},"60":{"start":{"line":222,"column":18},"end":{"line":224,"column":2}},"61":{"start":{"line":226,"column":0},"end":{"line":226,"column":31}}},"fnMap":{"0":{"name":"DeadLetterQueue","decl":{"start":{"line":6,"column":9},"end":{"line":6,"column":24}},"loc":{"start":{"line":6,"column":47},"end":{"line":186,"column":1}}},"1":{"name":"(anonymous_9)","decl":{"start":{"line":17,"column":12},"end":{"line":17,"column":null}},"loc":{"start":{"line":17,"column":12},"end":{"line":24,"column":3}}},"2":{"name":"(anonymous_10)","decl":{"start":{"line":18,"column":39},"end":{"line":18,"column":40}},"loc":{"start":{"line":18,"column":43},"end":{"line":20,"column":5}}},"3":{"name":"(anonymous_11)","decl":{"start":{"line":21,"column":34},"end":{"line":21,"column":35}},"loc":{"start":{"line":21,"column":38},"end":{"line":23,"column":5}}},"4":{"name":"clearInstruction","decl":{"start":{"line":26,"column":11},"end":{"line":26,"column":27}},"loc":{"start":{"line":26,"column":27},"end":{"line":30,"column":3}}},"5":{"name":"(anonymous_13)","decl":{"start":{"line":27,"column":41},"end":{"line":27,"column":42}},"loc":{"start":{"line":27,"column":45},"end":{"line":29,"column":5}}},"6":{"name":"replayDlq","decl":{"start":{"line":32,"column":11},"end":{"line":32,"column":20}},"loc":{"start":{"line":32,"column":20},"end":{"line":49,"column":3}}},"7":{"name":"(anonymous_15)","decl":{"start":{"line":42,"column":57},"end":{"line":42,"column":58}},"loc":{"start":{"line":42,"column":61},"end":{"line":48,"column":5}}},"8":{"name":"(anonymous_16)","decl":{"start":{"line":67,"column":21},"end":{"line":67,"column":null}},"loc":{"start":{"line":67,"column":21},"end":{"line":69,"column":13}}},"9":{"name":"(anonymous_17)","decl":{"start":{"line":97,"column":28},"end":{"line":97,"column":29}},"loc":{"start":{"line":97,"column":32},"end":{"line":106,"column":19}}},"10":{"name":"(anonymous_18)","decl":{"start":{"line":111,"column":33},"end":{"line":111,"column":34}},"loc":{"start":{"line":111,"column":39},"end":{"line":111,"column":null}}},"11":{"name":"(anonymous_19)","decl":{"start":{"line":127,"column":28},"end":{"line":127,"column":29}},"loc":{"start":{"line":127,"column":32},"end":{"line":130,"column":19}}},"12":{"name":"(anonymous_20)","decl":{"start":{"line":152,"column":28},"end":{"line":152,"column":29}},"loc":{"start":{"line":152,"column":32},"end":{"line":157,"column":19}}},"13":{"name":"(anonymous_21)","decl":{"start":{"line":175,"column":23},"end":{"line":175,"column":null}},"loc":{"start":{"line":175,"column":23},"end":{"line":177,"column":15}}}},"branchMap":{"0":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":null}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":35,"column":null}}]},"1":{"loc":{"start":{"line":33,"column":8},"end":{"line":33,"column":41}},"type":"binary-expr","locations":[{"start":{"line":33,"column":8},"end":{"line":33,"column":23}},{"start":{"line":33,"column":27},"end":{"line":33,"column":41}}]},"2":{"loc":{"start":{"line":51,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":53,"column":null}}]},"3":{"loc":{"start":{"line":60,"column":17},"end":{"line":60,"column":58}},"type":"binary-expr","locations":[{"start":{"line":60,"column":17},"end":{"line":60,"column":44}},{"start":{"line":60,"column":48},"end":{"line":60,"column":58}}]},"4":{"loc":{"start":{"line":63,"column":7},"end":{"line":73,"column":null}},"type":"binary-expr","locations":[{"start":{"line":63,"column":7},"end":{"line":63,"column":17}},{"start":{"line":64,"column":8},"end":{"line":72,"column":null}}]},"5":{"loc":{"start":{"line":75,"column":7},"end":{"line":182,"column":null}},"type":"binary-expr","locations":[{"start":{"line":75,"column":7},"end":{"line":75,"column":16}},{"start":{"line":76,"column":8},"end":{"line":181,"column":null}}]},"6":{"loc":{"start":{"line":78,"column":11},"end":{"line":84,"column":null}},"type":"binary-expr","locations":[{"start":{"line":78,"column":11},"end":{"line":78,"column":22}},{"start":{"line":79,"column":12},"end":{"line":81,"column":null}}]},"7":{"loc":{"start":{"line":86,"column":11},"end":{"line":170,"column":null}},"type":"binary-expr","locations":[{"start":{"line":86,"column":11},"end":{"line":86,"column":23}},{"start":{"line":87,"column":12},"end":{"line":169,"column":null}}]},"8":{"loc":{"start":{"line":95,"column":25},"end":{"line":95,"column":55}},"type":"cond-expr","locations":[{"start":{"line":95,"column":33},"end":{"line":95,"column":50}},{"start":{"line":95,"column":53},"end":{"line":95,"column":55}}]},"9":{"loc":{"start":{"line":99,"column":22},"end":{"line":102,"column":null}},"type":"if","locations":[{"start":{"line":99,"column":22},"end":{"line":102,"column":null}}]},"10":{"loc":{"start":{"line":128,"column":33},"end":{"line":128,"column":68}},"type":"binary-expr","locations":[{"start":{"line":128,"column":33},"end":{"line":128,"column":60}},{"start":{"line":128,"column":64},"end":{"line":128,"column":68}}]},"11":{"loc":{"start":{"line":154,"column":20},"end":{"line":156,"column":null}},"type":"if","locations":[{"start":{"line":154,"column":20},"end":{"line":156,"column":null}}]},"12":{"loc":{"start":{"line":154,"column":24},"end":{"line":154,"column":51}},"type":"binary-expr","locations":[{"start":{"line":154,"column":24},"end":{"line":154,"column":37}},{"start":{"line":154,"column":41},"end":{"line":154,"column":51}}]},"13":{"loc":{"start":{"line":165,"column":28},"end":{"line":165,"column":61}},"type":"binary-expr","locations":[{"start":{"line":165,"column":28},"end":{"line":165,"column":43}},{"start":{"line":165,"column":47},"end":{"line":165,"column":61}}]}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"b":{"0":[0],"1":[0,0],"2":[0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0],"10":[0,0],"11":[0],"12":[0,0],"13":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/delete_tool/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/delete_tool/index.tsx","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":50}},"1":{"start":{"line":5,"column":42},"end":{"line":5,"column":54}},"2":{"start":{"line":5,"column":22},"end":{"line":5,"column":24}},"3":{"start":{"line":5,"column":38},"end":{"line":5,"column":42}},"4":{"start":{"line":6,"column":52},"end":{"line":6,"column":64}},"5":{"start":{"line":6,"column":27},"end":{"line":6,"column":29}},"6":{"start":{"line":6,"column":48},"end":{"line":6,"column":52}},"7":{"start":{"line":7,"column":32},"end":{"line":7,"column":44}},"8":{"start":{"line":7,"column":17},"end":{"line":7,"column":19}},"9":{"start":{"line":7,"column":28},"end":{"line":7,"column":32}},"10":{"start":{"line":8,"column":50},"end":{"line":8,"column":65}},"11":{"start":{"line":8,"column":26},"end":{"line":8,"column":28}},"12":{"start":{"line":8,"column":46},"end":{"line":8,"column":50}},"13":{"start":{"line":9,"column":52},"end":{"line":9,"column":67}},"14":{"start":{"line":9,"column":27},"end":{"line":9,"column":29}},"15":{"start":{"line":9,"column":48},"end":{"line":9,"column":52}},"16":{"start":{"line":12,"column":8},"end":{"line":27,"column":null}},"17":{"start":{"line":13,"column":12},"end":{"line":24,"column":null}},"18":{"start":{"line":26,"column":12},"end":{"line":26,"column":null}},"19":{"start":{"line":32,"column":8},"end":{"line":37,"column":null}},"20":{"start":{"line":33,"column":12},"end":{"line":33,"column":null}},"21":{"start":{"line":35,"column":12},"end":{"line":35,"column":74}},"22":{"start":{"line":36,"column":12},"end":{"line":36,"column":19}},"23":{"start":{"line":38,"column":26},"end":{"line":38,"column":28}},"24":{"start":{"line":39,"column":8},"end":{"line":46,"column":null}},"25":{"start":{"line":40,"column":12},"end":{"line":40,"column":null}},"26":{"start":{"line":41,"column":12},"end":{"line":45,"column":null}},"27":{"start":{"line":42,"column":16},"end":{"line":42,"column":null}},"28":{"start":{"line":42,"column":47},"end":{"line":42,"column":68}},"29":{"start":{"line":44,"column":16},"end":{"line":44,"column":null}},"30":{"start":{"line":46,"column":28},"end":{"line":46,"column":62}},"31":{"start":{"line":49,"column":4},"end":{"line":56,"column":null}},"32":{"start":{"line":50,"column":8},"end":{"line":55,"column":null}},"33":{"start":{"line":50,"column":46},"end":{"line":50,"column":57}},"34":{"start":{"line":51,"column":12},"end":{"line":53,"column":null}},"35":{"start":{"line":52,"column":16},"end":{"line":52,"column":null}},"36":{"start":{"line":54,"column":12},"end":{"line":54,"column":null}},"37":{"start":{"line":58,"column":4},"end":{"line":60,"column":null}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":null}},"39":{"start":{"line":62,"column":4},"end":{"line":74,"column":8}},"40":{"start":{"line":65,"column":54},"end":{"line":65,"column":105}},"41":{"start":{"line":68,"column":99},"end":{"line":68,"column":137}},"42":{"start":{"line":69,"column":100},"end":{"line":69,"column":143}},"43":{"start":{"line":70,"column":54},"end":{"line":70,"column":86}},"44":{"start":{"line":77,"column":0},"end":{"line":77,"column":null}}},"fnMap":{"0":{"name":"DeleteTool","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":19}},"loc":{"start":{"line":4,"column":42},"end":{"line":75,"column":1}}},"1":{"name":"getHelpMessage","decl":{"start":{"line":11,"column":13},"end":{"line":11,"column":27}},"loc":{"start":{"line":11,"column":27},"end":{"line":28,"column":5}}},"2":{"name":"submitRequest","decl":{"start":{"line":30,"column":13},"end":{"line":30,"column":26}},"loc":{"start":{"line":30,"column":26},"end":{"line":47,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":39,"column":64},"end":{"line":39,"column":67}},"loc":{"start":{"line":39,"column":67},"end":{"line":46,"column":9}}},"4":{"name":"(anonymous_10)","decl":{"start":{"line":42,"column":39},"end":{"line":42,"column":43}},"loc":{"start":{"line":42,"column":43},"end":{"line":42,"column":51}}},"5":{"name":"(anonymous_11)","decl":{"start":{"line":46,"column":16},"end":{"line":46,"column":24}},"loc":{"start":{"line":46,"column":24},"end":{"line":46,"column":37}}},"6":{"name":"(anonymous_12)","decl":{"start":{"line":49,"column":14},"end":{"line":49,"column":null}},"loc":{"start":{"line":49,"column":14},"end":{"line":56,"column":5}}},"7":{"name":"(anonymous_13)","decl":{"start":{"line":50,"column":39},"end":{"line":50,"column":42}},"loc":{"start":{"line":50,"column":42},"end":{"line":50,"column":49}}},"8":{"name":"(anonymous_14)","decl":{"start":{"line":50,"column":63},"end":{"line":50,"column":67}},"loc":{"start":{"line":50,"column":67},"end":{"line":55,"column":9}}},"9":{"name":"(anonymous_15)","decl":{"start":{"line":65,"column":43},"end":{"line":65,"column":44}},"loc":{"start":{"line":65,"column":49},"end":{"line":65,"column":72}}},"10":{"name":"(anonymous_16)","decl":{"start":{"line":68,"column":88},"end":{"line":68,"column":89}},"loc":{"start":{"line":68,"column":94},"end":{"line":68,"column":113}}},"11":{"name":"(anonymous_17)","decl":{"start":{"line":69,"column":89},"end":{"line":69,"column":90}},"loc":{"start":{"line":69,"column":95},"end":{"line":69,"column":119}}},"12":{"name":"(anonymous_18)","decl":{"start":{"line":70,"column":43},"end":{"line":70,"column":44}},"loc":{"start":{"line":70,"column":49},"end":{"line":70,"column":67}}}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":8},"end":{"line":27,"column":null}},"type":"if","locations":[{"start":{"line":12,"column":8},"end":{"line":27,"column":null}},{"start":{"line":25,"column":15},"end":{"line":27,"column":null}}]},"1":{"loc":{"start":{"line":41,"column":12},"end":{"line":45,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":12},"end":{"line":45,"column":null}},{"start":{"line":43,"column":19},"end":{"line":45,"column":null}}]},"2":{"loc":{"start":{"line":51,"column":12},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":12},"end":{"line":53,"column":null}}]},"3":{"loc":{"start":{"line":51,"column":18},"end":{"line":51,"column":49}},"type":"binary-expr","locations":[{"start":{"line":51,"column":18},"end":{"line":51,"column":31}},{"start":{"line":51,"column":35},"end":{"line":51,"column":49}}]},"4":{"loc":{"start":{"line":58,"column":4},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":60,"column":null}}]}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,0],"1":[0,0],"2":[0],"3":[0,0],"4":[0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/kafka/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/kafka/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":7,"column":26},"end":{"line":7,"column":65}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":15}},"3":{"start":{"line":7,"column":22},"end":{"line":7,"column":26}},"4":{"start":{"line":9,"column":2},"end":{"line":13,"column":9}},"5":{"start":{"line":10,"column":4},"end":{"line":12,"column":7}},"6":{"start":{"line":11,"column":6},"end":{"line":11,"column":19}},"7":{"start":{"line":15,"column":2},"end":{"line":15,"column":43}},"8":{"start":{"line":18,"column":0},"end":{"line":18,"column":25}}},"fnMap":{"0":{"name":"TopicData","decl":{"start":{"line":6,"column":9},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":41},"end":{"line":16,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":9,"column":12},"end":{"line":9,"column":null}},"loc":{"start":{"line":9,"column":12},"end":{"line":13,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":10,"column":34},"end":{"line":10,"column":35}},"loc":{"start":{"line":10,"column":38},"end":{"line":12,"column":5}}}},"branchMap":{},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":1,"6":1,"7":2,"8":2},"f":{"0":2,"1":1,"2":1},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/mql_queries/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/mql_queries/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":60}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":41}},"3":{"start":{"line":10,"column":0},"end":{"line":10,"column":77}},"4":{"start":{"line":11,"column":0},"end":{"line":11,"column":null}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":27,"column":24},"end":{"line":27,"column":167}},"8":{"start":{"line":29,"column":26},"end":{"line":29,"column":null}},"9":{"start":{"line":54,"column":32},"end":{"line":54,"column":65}},"10":{"start":{"line":54,"column":18},"end":{"line":54,"column":20}},"11":{"start":{"line":54,"column":28},"end":{"line":54,"column":32}},"12":{"start":{"line":55,"column":43},"end":{"line":55,"column":61}},"13":{"start":{"line":55,"column":24},"end":{"line":55,"column":26}},"14":{"start":{"line":55,"column":39},"end":{"line":55,"column":43}},"15":{"start":{"line":56,"column":54},"end":{"line":57,"column":null}},"16":{"start":{"line":56,"column":27},"end":{"line":56,"column":29}},"17":{"start":{"line":56,"column":50},"end":{"line":56,"column":54}},"18":{"start":{"line":59,"column":48},"end":{"line":59,"column":70}},"19":{"start":{"line":59,"column":24},"end":{"line":59,"column":26}},"20":{"start":{"line":59,"column":44},"end":{"line":59,"column":48}},"21":{"start":{"line":60,"column":40},"end":{"line":60,"column":64}},"22":{"start":{"line":60,"column":20},"end":{"line":60,"column":22}},"23":{"start":{"line":60,"column":36},"end":{"line":60,"column":40}},"24":{"start":{"line":62,"column":2},"end":{"line":66,"column":9}},"25":{"start":{"line":63,"column":4},"end":{"line":65,"column":7}},"26":{"start":{"line":64,"column":6},"end":{"line":64,"column":30}},"27":{"start":{"line":69,"column":4},"end":{"line":74,"column":7}},"28":{"start":{"line":70,"column":6},"end":{"line":72,"column":null}},"29":{"start":{"line":78,"column":4},"end":{"line":87,"column":null}},"30":{"start":{"line":79,"column":28},"end":{"line":79,"column":56}},"31":{"start":{"line":80,"column":6},"end":{"line":80,"column":46}},"32":{"start":{"line":81,"column":6},"end":{"line":81,"column":48}},"33":{"start":{"line":83,"column":6},"end":{"line":86,"column":null}},"34":{"start":{"line":84,"column":8},"end":{"line":84,"column":34}},"35":{"start":{"line":85,"column":8},"end":{"line":85,"column":58}},"36":{"start":{"line":89,"column":4},"end":{"line":106,"column":7}},"37":{"start":{"line":90,"column":29},"end":{"line":91,"column":null}},"38":{"start":{"line":91,"column":40},"end":{"line":91,"column":null}},"39":{"start":{"line":93,"column":40},"end":{"line":104,"column":8}},"40":{"start":{"line":98,"column":10},"end":{"line":100,"column":null}},"41":{"start":{"line":99,"column":34},"end":{"line":99,"column":null}},"42":{"start":{"line":105,"column":6},"end":{"line":105,"column":77}},"43":{"start":{"line":105,"column":45},"end":{"line":105,"column":75}},"44":{"start":{"line":109,"column":2},"end":{"line":220,"column":4}},"45":{"start":{"line":120,"column":31},"end":{"line":120,"column":null}},"46":{"start":{"line":131,"column":31},"end":{"line":131,"column":null}},"47":{"start":{"line":165,"column":20},"end":{"line":167,"column":null}},"48":{"start":{"line":175,"column":20},"end":{"line":180,"column":null}},"49":{"start":{"line":201,"column":16},"end":{"line":213,"column":18}},"50":{"start":{"line":224,"column":31},"end":{"line":224,"column":51}},"51":{"start":{"line":224,"column":15},"end":{"line":224,"column":19}},"52":{"start":{"line":224,"column":25},"end":{"line":224,"column":31}},"53":{"start":{"line":226,"column":2},"end":{"line":238,"column":4}},"54":{"start":{"line":242,"column":31},"end":{"line":242,"column":51}},"55":{"start":{"line":242,"column":15},"end":{"line":242,"column":19}},"56":{"start":{"line":242,"column":25},"end":{"line":242,"column":31}},"57":{"start":{"line":244,"column":2},"end":{"line":257,"column":4}},"58":{"start":{"line":261,"column":2},"end":{"line":277,"column":4}},"59":{"start":{"line":267,"column":43},"end":{"line":269,"column":10}},"60":{"start":{"line":281,"column":2},"end":{"line":296,"column":4}},"61":{"start":{"line":286,"column":12},"end":{"line":286,"column":54}},"62":{"start":{"line":285,"column":25},"end":{"line":285,"column":30}},"63":{"start":{"line":285,"column":43},"end":{"line":285,"column":null}},"64":{"start":{"line":287,"column":38},"end":{"line":287,"column":67}},"65":{"start":{"line":288,"column":10},"end":{"line":293,"column":12}},"66":{"start":{"line":301,"column":4},"end":{"line":305,"column":9}},"67":{"start":{"line":303,"column":20},"end":{"line":303,"column":null}},"68":{"start":{"line":306,"column":31},"end":{"line":306,"column":33}},"69":{"start":{"line":307,"column":2},"end":{"line":322,"column":null}},"70":{"start":{"line":308,"column":4},"end":{"line":321,"column":9}},"71":{"start":{"line":310,"column":23},"end":{"line":310,"column":69}},"72":{"start":{"line":311,"column":8},"end":{"line":320,"column":null}},"73":{"start":{"line":312,"column":10},"end":{"line":319,"column":12}},"74":{"start":{"line":323,"column":2},"end":{"line":332,"column":4}},"75":{"start":{"line":336,"column":2},"end":{"line":370,"column":4}},"76":{"start":{"line":346,"column":12},"end":{"line":348,"column":null}},"77":{"start":{"line":356,"column":12},"end":{"line":358,"column":null}},"78":{"start":{"line":373,"column":0},"end":{"line":373,"column":26}}},"fnMap":{"0":{"name":"MQLQueries","decl":{"start":{"line":53,"column":9},"end":{"line":53,"column":19}},"loc":{"start":{"line":53,"column":42},"end":{"line":221,"column":1}}},"1":{"name":"(anonymous_12)","decl":{"start":{"line":62,"column":12},"end":{"line":62,"column":null}},"loc":{"start":{"line":62,"column":12},"end":{"line":66,"column":3}}},"2":{"name":"(anonymous_13)","decl":{"start":{"line":63,"column":40},"end":{"line":63,"column":41}},"loc":{"start":{"line":63,"column":44},"end":{"line":65,"column":5}}},"3":{"name":"updateMQLQuery","decl":{"start":{"line":68,"column":11},"end":{"line":68,"column":25}},"loc":{"start":{"line":68,"column":39},"end":{"line":75,"column":3}}},"4":{"name":"(anonymous_15)","decl":{"start":{"line":69,"column":13},"end":{"line":69,"column":14}},"loc":{"start":{"line":69,"column":23},"end":{"line":74,"column":5}}},"5":{"name":"executeQuery","decl":{"start":{"line":77,"column":11},"end":{"line":77,"column":23}},"loc":{"start":{"line":77,"column":23},"end":{"line":107,"column":3}}},"6":{"name":"(anonymous_17)","decl":{"start":{"line":89,"column":67},"end":{"line":89,"column":68}},"loc":{"start":{"line":89,"column":74},"end":{"line":106,"column":5}}},"7":{"name":"(anonymous_18)","decl":{"start":{"line":91,"column":8},"end":{"line":91,"column":9}},"loc":{"start":{"line":91,"column":35},"end":{"line":91,"column":43}}},"8":{"name":"(anonymous_19)","decl":{"start":{"line":97,"column":30},"end":{"line":97,"column":31}},"loc":{"start":{"line":97,"column":42},"end":{"line":98,"column":24}}},"9":{"name":"(anonymous_20)","decl":{"start":{"line":99,"column":12},"end":{"line":99,"column":13}},"loc":{"start":{"line":99,"column":29},"end":{"line":99,"column":37}}},"10":{"name":"(anonymous_21)","decl":{"start":{"line":105,"column":28},"end":{"line":105,"column":29}},"loc":{"start":{"line":105,"column":40},"end":{"line":105,"column":46}}},"11":{"name":"(anonymous_22)","decl":{"start":{"line":120,"column":22},"end":{"line":120,"column":23}},"loc":{"start":{"line":120,"column":26},"end":{"line":120,"column":45}}},"12":{"name":"(anonymous_23)","decl":{"start":{"line":131,"column":22},"end":{"line":131,"column":23}},"loc":{"start":{"line":131,"column":26},"end":{"line":131,"column":44}}},"13":{"name":"(anonymous_24)","decl":{"start":{"line":164,"column":27},"end":{"line":164,"column":null}},"loc":{"start":{"line":164,"column":27},"end":{"line":165,"column":26}}},"14":{"name":"(anonymous_25)","decl":{"start":{"line":174,"column":27},"end":{"line":174,"column":null}},"loc":{"start":{"line":174,"column":27},"end":{"line":175,"column":26}}},"15":{"name":"(anonymous_26)","decl":{"start":{"line":200,"column":47},"end":{"line":200,"column":48}},"loc":{"start":{"line":200,"column":64},"end":{"line":214,"column":15}}},"16":{"name":"ProjectsList","decl":{"start":{"line":223,"column":9},"end":{"line":223,"column":21}},"loc":{"start":{"line":223,"column":51},"end":{"line":239,"column":1}}},"17":{"name":"MQLExample","decl":{"start":{"line":241,"column":9},"end":{"line":241,"column":19}},"loc":{"start":{"line":241,"column":19},"end":{"line":258,"column":1}}},"18":{"name":"renderThrottleStatus","decl":{"start":{"line":260,"column":9},"end":{"line":260,"column":29}},"loc":{"start":{"line":260,"column":74},"end":{"line":278,"column":1}}},"19":{"name":"(anonymous_30)","decl":{"start":{"line":267,"column":26},"end":{"line":267,"column":27}},"loc":{"start":{"line":267,"column":38},"end":{"line":267,"column":null}}},"20":{"name":"renderPolicyDetails","decl":{"start":{"line":280,"column":9},"end":{"line":280,"column":28}},"loc":{"start":{"line":280,"column":64},"end":{"line":297,"column":1}}},"21":{"name":"(anonymous_32)","decl":{"start":{"line":284,"column":59},"end":{"line":284,"column":60}},"loc":{"start":{"line":284,"column":73},"end":{"line":294,"column":9}}},"22":{"name":"QueryResultQuotaAllowance","decl":{"start":{"line":299,"column":9},"end":{"line":299,"column":34}},"loc":{"start":{"line":299,"column":70},"end":{"line":333,"column":1}}},"23":{"name":"(anonymous_34)","decl":{"start":{"line":303,"column":8},"end":{"line":303,"column":9}},"loc":{"start":{"line":303,"column":15},"end":{"line":303,"column":26}}},"24":{"name":"(anonymous_35)","decl":{"start":{"line":309,"column":61},"end":{"line":309,"column":62}},"loc":{"start":{"line":309,"column":72},"end":{"line":321,"column":7}}},"25":{"name":"QueryResultHistoryItem","decl":{"start":{"line":335,"column":9},"end":{"line":335,"column":31}},"loc":{"start":{"line":335,"column":67},"end":{"line":371,"column":1}}},"26":{"name":"(anonymous_37)","decl":{"start":{"line":345,"column":19},"end":{"line":345,"column":null}},"loc":{"start":{"line":345,"column":19},"end":{"line":346,"column":18}}},"27":{"name":"(anonymous_38)","decl":{"start":{"line":355,"column":19},"end":{"line":355,"column":null}},"loc":{"start":{"line":355,"column":19},"end":{"line":356,"column":18}}}},"branchMap":{"0":{"loc":{"start":{"line":83,"column":6},"end":{"line":86,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":6},"end":{"line":86,"column":null}}]},"1":{"loc":{"start":{"line":119,"column":19},"end":{"line":119,"column":40}},"type":"binary-expr","locations":[{"start":{"line":119,"column":19},"end":{"line":119,"column":34}},{"start":{"line":119,"column":38},"end":{"line":119,"column":40}}]},"2":{"loc":{"start":{"line":130,"column":19},"end":{"line":130,"column":40}},"type":"binary-expr","locations":[{"start":{"line":130,"column":19},"end":{"line":130,"column":34}},{"start":{"line":130,"column":38},"end":{"line":130,"column":40}}]},"3":{"loc":{"start":{"line":144,"column":16},"end":{"line":144,"column":76}},"type":"binary-expr","locations":[{"start":{"line":144,"column":16},"end":{"line":144,"column":44}},{"start":{"line":144,"column":48},"end":{"line":144,"column":76}}]},"4":{"loc":{"start":{"line":151,"column":9},"end":{"line":192,"column":null}},"type":"binary-expr","locations":[{"start":{"line":151,"column":9},"end":{"line":151,"column":38}},{"start":{"line":152,"column":10},"end":{"line":191,"column":null}}]},"5":{"loc":{"start":{"line":196,"column":9},"end":{"line":216,"column":null}},"type":"binary-expr","locations":[{"start":{"line":196,"column":9},"end":{"line":196,"column":38}},{"start":{"line":197,"column":10},"end":{"line":215,"column":null}}]},"6":{"loc":{"start":{"line":230,"column":11},"end":{"line":230,"column":35}},"type":"cond-expr","locations":[{"start":{"line":230,"column":20},"end":{"line":230,"column":26}},{"start":{"line":230,"column":29},"end":{"line":230,"column":35}}]},"7":{"loc":{"start":{"line":247,"column":34},"end":{"line":247,"column":58}},"type":"cond-expr","locations":[{"start":{"line":247,"column":43},"end":{"line":247,"column":49}},{"start":{"line":247,"column":52},"end":{"line":247,"column":58}}]},"8":{"loc":{"start":{"line":261,"column":9},"end":{"line":276,"column":null}},"type":"cond-expr","locations":[{"start":{"line":262,"column":4},"end":{"line":270,"column":null}},{"start":{"line":273,"column":4},"end":{"line":276,"column":null}}]},"9":{"loc":{"start":{"line":283,"column":7},"end":{"line":294,"column":10}},"type":"binary-expr","locations":[{"start":{"line":283,"column":7},"end":{"line":283,"column":40}},{"start":{"line":284,"column":8},"end":{"line":294,"column":10}}]},"10":{"loc":{"start":{"line":301,"column":4},"end":{"line":305,"column":9}},"type":"binary-expr","locations":[{"start":{"line":301,"column":5},"end":{"line":301,"column":38}},{"start":{"line":302,"column":6},"end":{"line":303,"column":null}},{"start":{"line":305,"column":4},"end":{"line":305,"column":9}}]},"11":{"loc":{"start":{"line":307,"column":2},"end":{"line":322,"column":null}},"type":"if","locations":[{"start":{"line":307,"column":2},"end":{"line":322,"column":null}}]},"12":{"loc":{"start":{"line":308,"column":4},"end":{"line":321,"column":8}},"type":"binary-expr","locations":[{"start":{"line":308,"column":4},"end":{"line":308,"column":37}},{"start":{"line":309,"column":6},"end":{"line":321,"column":8}}]},"13":{"loc":{"start":{"line":311,"column":8},"end":{"line":320,"column":null}},"type":"if","locations":[{"start":{"line":311,"column":8},"end":{"line":320,"column":null}}]},"14":{"loc":{"start":{"line":311,"column":12},"end":{"line":311,"column":72}},"type":"binary-expr","locations":[{"start":{"line":311,"column":12},"end":{"line":311,"column":35}},{"start":{"line":311,"column":39},"end":{"line":311,"column":72}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"b":{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0,0],"11":[0],"12":[0,0],"13":[0],"14":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/mql_queries/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/mql_queries/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":5,"column":2}},"1":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"2":{"start":{"line":7,"column":16},"end":{"line":9,"column":2}},"3":{"start":{"line":29,"column":2},"end":{"line":29,"column":9}},"4":{"start":{"line":11,"column":27},"end":{"line":15,"column":2}},"5":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"6":{"start":{"line":17,"column":20},"end":{"line":20,"column":2}},"7":{"start":{"line":27,"column":2},"end":{"line":27,"column":13}},"8":{"start":{"line":22,"column":23},"end":{"line":22,"column":70}},"9":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/production_queries/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/production_queries/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":9,"column":0},"end":{"line":9,"column":60}},"3":{"start":{"line":10,"column":0},"end":{"line":10,"column":75}},"4":{"start":{"line":11,"column":0},"end":{"line":11,"column":null}},"5":{"start":{"line":21,"column":0},"end":{"line":21,"column":70}},"6":{"start":{"line":22,"column":0},"end":{"line":22,"column":47}},"7":{"start":{"line":23,"column":0},"end":{"line":23,"column":58}},"8":{"start":{"line":24,"column":0},"end":{"line":24,"column":78}},"9":{"start":{"line":26,"column":20},"end":{"line":26,"column":40}},"10":{"start":{"line":28,"column":34},"end":{"line":28,"column":56}},"11":{"start":{"line":28,"column":17},"end":{"line":28,"column":19}},"12":{"start":{"line":28,"column":30},"end":{"line":28,"column":34}},"13":{"start":{"line":29,"column":48},"end":{"line":29,"column":70}},"14":{"start":{"line":29,"column":24},"end":{"line":29,"column":26}},"15":{"start":{"line":29,"column":44},"end":{"line":29,"column":48}},"16":{"start":{"line":30,"column":33},"end":{"line":32,"column":4}},"17":{"start":{"line":30,"column":19},"end":{"line":30,"column":21}},"18":{"start":{"line":30,"column":29},"end":{"line":30,"column":33}},"19":{"start":{"line":33,"column":54},"end":{"line":34,"column":null}},"20":{"start":{"line":33,"column":27},"end":{"line":33,"column":29}},"21":{"start":{"line":33,"column":50},"end":{"line":33,"column":54}},"22":{"start":{"line":37,"column":2},"end":{"line":41,"column":9}},"23":{"start":{"line":38,"column":4},"end":{"line":40,"column":7}},"24":{"start":{"line":39,"column":6},"end":{"line":39,"column":23}},"25":{"start":{"line":43,"column":2},"end":{"line":47,"column":9}},"26":{"start":{"line":44,"column":4},"end":{"line":46,"column":7}},"27":{"start":{"line":45,"column":6},"end":{"line":45,"column":30}},"28":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"29":{"start":{"line":51,"column":6},"end":{"line":53,"column":null}},"30":{"start":{"line":59,"column":4},"end":{"line":64,"column":7}},"31":{"start":{"line":60,"column":6},"end":{"line":62,"column":null}},"32":{"start":{"line":68,"column":4},"end":{"line":87,"column":9}},"33":{"start":{"line":71,"column":31},"end":{"line":72,"column":null}},"34":{"start":{"line":72,"column":42},"end":{"line":72,"column":null}},"35":{"start":{"line":74,"column":42},"end":{"line":84,"column":10}},"36":{"start":{"line":78,"column":12},"end":{"line":80,"column":null}},"37":{"start":{"line":79,"column":36},"end":{"line":79,"column":null}},"38":{"start":{"line":85,"column":8},"end":{"line":85,"column":52}},"39":{"start":{"line":86,"column":8},"end":{"line":86,"column":79}},"40":{"start":{"line":86,"column":47},"end":{"line":86,"column":77}},"41":{"start":{"line":90,"column":2},"end":{"line":194,"column":4}},"42":{"start":{"line":98,"column":31},"end":{"line":98,"column":null}},"43":{"start":{"line":140,"column":20},"end":{"line":142,"column":null}},"44":{"start":{"line":150,"column":20},"end":{"line":155,"column":null}},"45":{"start":{"line":176,"column":16},"end":{"line":187,"column":18}},"46":{"start":{"line":198,"column":31},"end":{"line":198,"column":51}},"47":{"start":{"line":198,"column":15},"end":{"line":198,"column":19}},"48":{"start":{"line":198,"column":25},"end":{"line":198,"column":31}},"49":{"start":{"line":200,"column":2},"end":{"line":212,"column":4}},"50":{"start":{"line":216,"column":2},"end":{"line":232,"column":4}},"51":{"start":{"line":222,"column":43},"end":{"line":224,"column":10}},"52":{"start":{"line":236,"column":2},"end":{"line":251,"column":4}},"53":{"start":{"line":241,"column":12},"end":{"line":241,"column":54}},"54":{"start":{"line":240,"column":25},"end":{"line":240,"column":30}},"55":{"start":{"line":240,"column":43},"end":{"line":240,"column":null}},"56":{"start":{"line":242,"column":38},"end":{"line":242,"column":67}},"57":{"start":{"line":243,"column":10},"end":{"line":248,"column":12}},"58":{"start":{"line":256,"column":4},"end":{"line":260,"column":9}},"59":{"start":{"line":258,"column":20},"end":{"line":258,"column":null}},"60":{"start":{"line":261,"column":31},"end":{"line":261,"column":33}},"61":{"start":{"line":262,"column":2},"end":{"line":277,"column":null}},"62":{"start":{"line":263,"column":4},"end":{"line":276,"column":9}},"63":{"start":{"line":265,"column":23},"end":{"line":265,"column":69}},"64":{"start":{"line":266,"column":8},"end":{"line":275,"column":null}},"65":{"start":{"line":267,"column":10},"end":{"line":274,"column":12}},"66":{"start":{"line":278,"column":2},"end":{"line":287,"column":4}},"67":{"start":{"line":291,"column":2},"end":{"line":325,"column":4}},"68":{"start":{"line":301,"column":12},"end":{"line":303,"column":null}},"69":{"start":{"line":311,"column":12},"end":{"line":313,"column":null}},"70":{"start":{"line":328,"column":0},"end":{"line":328,"column":33}}},"fnMap":{"0":{"name":"ProductionQueries","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":26}},"loc":{"start":{"line":27,"column":49},"end":{"line":195,"column":1}}},"1":{"name":"(anonymous_12)","decl":{"start":{"line":37,"column":12},"end":{"line":37,"column":null}},"loc":{"start":{"line":37,"column":12},"end":{"line":41,"column":3}}},"2":{"name":"(anonymous_13)","decl":{"start":{"line":38,"column":42},"end":{"line":38,"column":43}},"loc":{"start":{"line":38,"column":46},"end":{"line":40,"column":5}}},"3":{"name":"(anonymous_14)","decl":{"start":{"line":43,"column":12},"end":{"line":43,"column":null}},"loc":{"start":{"line":43,"column":12},"end":{"line":47,"column":3}}},"4":{"name":"(anonymous_15)","decl":{"start":{"line":44,"column":40},"end":{"line":44,"column":41}},"loc":{"start":{"line":44,"column":44},"end":{"line":46,"column":5}}},"5":{"name":"selectDataset","decl":{"start":{"line":49,"column":11},"end":{"line":49,"column":24}},"loc":{"start":{"line":49,"column":40},"end":{"line":56,"column":3}}},"6":{"name":"(anonymous_17)","decl":{"start":{"line":50,"column":13},"end":{"line":50,"column":14}},"loc":{"start":{"line":50,"column":23},"end":{"line":55,"column":5}}},"7":{"name":"updateQuerySql","decl":{"start":{"line":58,"column":11},"end":{"line":58,"column":25}},"loc":{"start":{"line":58,"column":39},"end":{"line":65,"column":3}}},"8":{"name":"(anonymous_19)","decl":{"start":{"line":59,"column":13},"end":{"line":59,"column":14}},"loc":{"start":{"line":59,"column":23},"end":{"line":64,"column":5}}},"9":{"name":"executeQuery","decl":{"start":{"line":67,"column":11},"end":{"line":67,"column":23}},"loc":{"start":{"line":67,"column":23},"end":{"line":88,"column":3}}},"10":{"name":"(anonymous_21)","decl":{"start":{"line":70,"column":12},"end":{"line":70,"column":13}},"loc":{"start":{"line":70,"column":19},"end":{"line":87,"column":7}}},"11":{"name":"(anonymous_22)","decl":{"start":{"line":72,"column":10},"end":{"line":72,"column":11}},"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":45}}},"12":{"name":"(anonymous_23)","decl":{"start":{"line":77,"column":32},"end":{"line":77,"column":33}},"loc":{"start":{"line":77,"column":44},"end":{"line":78,"column":26}}},"13":{"name":"(anonymous_24)","decl":{"start":{"line":79,"column":14},"end":{"line":79,"column":15}},"loc":{"start":{"line":79,"column":31},"end":{"line":79,"column":39}}},"14":{"name":"(anonymous_25)","decl":{"start":{"line":86,"column":30},"end":{"line":86,"column":31}},"loc":{"start":{"line":86,"column":42},"end":{"line":86,"column":48}}},"15":{"name":"(anonymous_26)","decl":{"start":{"line":98,"column":22},"end":{"line":98,"column":23}},"loc":{"start":{"line":98,"column":26},"end":{"line":98,"column":45}}},"16":{"name":"(anonymous_27)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":null}},"loc":{"start":{"line":139,"column":27},"end":{"line":140,"column":26}}},"17":{"name":"(anonymous_28)","decl":{"start":{"line":149,"column":27},"end":{"line":149,"column":null}},"loc":{"start":{"line":149,"column":27},"end":{"line":150,"column":26}}},"18":{"name":"(anonymous_29)","decl":{"start":{"line":175,"column":47},"end":{"line":175,"column":48}},"loc":{"start":{"line":175,"column":64},"end":{"line":188,"column":15}}},"19":{"name":"ProjectsList","decl":{"start":{"line":197,"column":9},"end":{"line":197,"column":21}},"loc":{"start":{"line":197,"column":51},"end":{"line":213,"column":1}}},"20":{"name":"renderThrottleStatus","decl":{"start":{"line":215,"column":9},"end":{"line":215,"column":29}},"loc":{"start":{"line":215,"column":74},"end":{"line":233,"column":1}}},"21":{"name":"(anonymous_32)","decl":{"start":{"line":222,"column":26},"end":{"line":222,"column":27}},"loc":{"start":{"line":222,"column":38},"end":{"line":222,"column":null}}},"22":{"name":"renderPolicyDetails","decl":{"start":{"line":235,"column":9},"end":{"line":235,"column":28}},"loc":{"start":{"line":235,"column":64},"end":{"line":252,"column":1}}},"23":{"name":"(anonymous_34)","decl":{"start":{"line":239,"column":59},"end":{"line":239,"column":60}},"loc":{"start":{"line":239,"column":73},"end":{"line":249,"column":9}}},"24":{"name":"QueryResultQuotaAllowance","decl":{"start":{"line":254,"column":9},"end":{"line":254,"column":34}},"loc":{"start":{"line":254,"column":70},"end":{"line":288,"column":1}}},"25":{"name":"(anonymous_36)","decl":{"start":{"line":258,"column":8},"end":{"line":258,"column":9}},"loc":{"start":{"line":258,"column":15},"end":{"line":258,"column":26}}},"26":{"name":"(anonymous_37)","decl":{"start":{"line":264,"column":61},"end":{"line":264,"column":62}},"loc":{"start":{"line":264,"column":72},"end":{"line":276,"column":7}}},"27":{"name":"QueryResultHistoryItem","decl":{"start":{"line":290,"column":9},"end":{"line":290,"column":31}},"loc":{"start":{"line":290,"column":67},"end":{"line":326,"column":1}}},"28":{"name":"(anonymous_39)","decl":{"start":{"line":300,"column":19},"end":{"line":300,"column":null}},"loc":{"start":{"line":300,"column":19},"end":{"line":301,"column":18}}},"29":{"name":"(anonymous_40)","decl":{"start":{"line":310,"column":19},"end":{"line":310,"column":null}},"loc":{"start":{"line":310,"column":19},"end":{"line":311,"column":18}}}},"branchMap":{"0":{"loc":{"start":{"line":97,"column":19},"end":{"line":97,"column":41}},"type":"binary-expr","locations":[{"start":{"line":97,"column":19},"end":{"line":97,"column":35}},{"start":{"line":97,"column":39},"end":{"line":97,"column":41}}]},"1":{"loc":{"start":{"line":109,"column":21},"end":{"line":109,"column":45}},"type":"binary-expr","locations":[{"start":{"line":109,"column":21},"end":{"line":109,"column":39}},{"start":{"line":109,"column":43},"end":{"line":109,"column":45}}]},"2":{"loc":{"start":{"line":119,"column":16},"end":{"line":119,"column":80}},"type":"binary-expr","locations":[{"start":{"line":119,"column":16},"end":{"line":119,"column":47}},{"start":{"line":119,"column":51},"end":{"line":119,"column":80}}]},"3":{"loc":{"start":{"line":126,"column":9},"end":{"line":167,"column":null}},"type":"binary-expr","locations":[{"start":{"line":126,"column":9},"end":{"line":126,"column":38}},{"start":{"line":127,"column":10},"end":{"line":166,"column":null}}]},"4":{"loc":{"start":{"line":171,"column":9},"end":{"line":190,"column":null}},"type":"binary-expr","locations":[{"start":{"line":171,"column":9},"end":{"line":171,"column":38}},{"start":{"line":172,"column":10},"end":{"line":189,"column":null}}]},"5":{"loc":{"start":{"line":204,"column":11},"end":{"line":204,"column":35}},"type":"cond-expr","locations":[{"start":{"line":204,"column":20},"end":{"line":204,"column":26}},{"start":{"line":204,"column":29},"end":{"line":204,"column":35}}]},"6":{"loc":{"start":{"line":216,"column":9},"end":{"line":231,"column":null}},"type":"cond-expr","locations":[{"start":{"line":217,"column":4},"end":{"line":225,"column":null}},{"start":{"line":228,"column":4},"end":{"line":231,"column":null}}]},"7":{"loc":{"start":{"line":238,"column":7},"end":{"line":249,"column":10}},"type":"binary-expr","locations":[{"start":{"line":238,"column":7},"end":{"line":238,"column":40}},{"start":{"line":239,"column":8},"end":{"line":249,"column":10}}]},"8":{"loc":{"start":{"line":256,"column":4},"end":{"line":260,"column":9}},"type":"binary-expr","locations":[{"start":{"line":256,"column":5},"end":{"line":256,"column":38}},{"start":{"line":257,"column":6},"end":{"line":258,"column":null}},{"start":{"line":260,"column":4},"end":{"line":260,"column":9}}]},"9":{"loc":{"start":{"line":262,"column":2},"end":{"line":277,"column":null}},"type":"if","locations":[{"start":{"line":262,"column":2},"end":{"line":277,"column":null}}]},"10":{"loc":{"start":{"line":263,"column":4},"end":{"line":276,"column":8}},"type":"binary-expr","locations":[{"start":{"line":263,"column":4},"end":{"line":263,"column":37}},{"start":{"line":264,"column":6},"end":{"line":276,"column":8}}]},"11":{"loc":{"start":{"line":266,"column":8},"end":{"line":275,"column":null}},"type":"if","locations":[{"start":{"line":266,"column":8},"end":{"line":275,"column":null}}]},"12":{"loc":{"start":{"line":266,"column":12},"end":{"line":266,"column":72}},"type":"binary-expr","locations":[{"start":{"line":266,"column":12},"end":{"line":266,"column":35}},{"start":{"line":266,"column":39},"end":{"line":266,"column":72}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0],"10":[0,0],"11":[0],"12":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/production_queries/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/production_queries/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":5,"column":2}},"1":{"start":{"line":21,"column":2},"end":{"line":21,"column":21}},"2":{"start":{"line":7,"column":27},"end":{"line":11,"column":2}},"3":{"start":{"line":22,"column":2},"end":{"line":22,"column":20}},"4":{"start":{"line":13,"column":20},"end":{"line":16,"column":2}},"5":{"start":{"line":23,"column":2},"end":{"line":23,"column":13}},"6":{"start":{"line":18,"column":23},"end":{"line":18,"column":70}},"7":{"start":{"line":24,"column":2},"end":{"line":24,"column":18}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/querylog/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/querylog/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"3":{"start":{"line":8,"column":62},"end":{"line":10,"column":7}},"4":{"start":{"line":8,"column":31},"end":{"line":8,"column":33}},"5":{"start":{"line":8,"column":58},"end":{"line":8,"column":62}},"6":{"start":{"line":12,"column":2},"end":{"line":19,"column":9}},"7":{"start":{"line":13,"column":4},"end":{"line":18,"column":7}},"8":{"start":{"line":14,"column":6},"end":{"line":16,"column":8}},"9":{"start":{"line":15,"column":25},"end":{"line":15,"column":null}},"10":{"start":{"line":17,"column":6},"end":{"line":17,"column":37}},"11":{"start":{"line":22,"column":4},"end":{"line":29,"column":6}},"12":{"start":{"line":33,"column":22},"end":{"line":36,"column":17}},"13":{"start":{"line":35,"column":21},"end":{"line":35,"column":52}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":28}},"15":{"start":{"line":40,"column":2},"end":{"line":48,"column":4}},"16":{"start":{"line":51,"column":20},"end":{"line":54,"column":2}},"17":{"start":{"line":56,"column":15},"end":{"line":59,"column":2}},"18":{"start":{"line":61,"column":0},"end":{"line":61,"column":31}}},"fnMap":{"0":{"name":"QuerylogQueries","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":24}},"loc":{"start":{"line":7,"column":47},"end":{"line":49,"column":1}}},"1":{"name":"(anonymous_8)","decl":{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},"loc":{"start":{"line":12,"column":12},"end":{"line":19,"column":3}}},"2":{"name":"(anonymous_9)","decl":{"start":{"line":13,"column":50},"end":{"line":13,"column":51}},"loc":{"start":{"line":13,"column":54},"end":{"line":18,"column":5}}},"3":{"name":"(anonymous_10)","decl":{"start":{"line":15,"column":8},"end":{"line":15,"column":9}},"loc":{"start":{"line":15,"column":20},"end":{"line":15,"column":26}}},"4":{"name":"tablePopulator","decl":{"start":{"line":21,"column":11},"end":{"line":21,"column":25}},"loc":{"start":{"line":21,"column":53},"end":{"line":30,"column":3}}},"5":{"name":"formatSQL","decl":{"start":{"line":32,"column":11},"end":{"line":32,"column":20}},"loc":{"start":{"line":32,"column":32},"end":{"line":38,"column":3}}},"6":{"name":"(anonymous_13)","decl":{"start":{"line":35,"column":11},"end":{"line":35,"column":12}},"loc":{"start":{"line":35,"column":16},"end":{"line":35,"column":25}}}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":1,"17":1,"18":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/querylog/query_display.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/querylog/query_display.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":47}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":78}},"5":{"start":{"line":9,"column":0},"end":{"line":9,"column":60}},"6":{"start":{"line":12,"column":20},"end":{"line":12,"column":30}},"7":{"start":{"line":19,"column":28},"end":{"line":19,"column":52}},"8":{"start":{"line":19,"column":14},"end":{"line":19,"column":16}},"9":{"start":{"line":19,"column":24},"end":{"line":19,"column":28}},"10":{"start":{"line":20,"column":54},"end":{"line":22,"column":34}},"11":{"start":{"line":20,"column":27},"end":{"line":20,"column":29}},"12":{"start":{"line":20,"column":50},"end":{"line":20,"column":54}},"13":{"start":{"line":25,"column":4},"end":{"line":30,"column":7}},"14":{"start":{"line":26,"column":6},"end":{"line":28,"column":null}},"15":{"start":{"line":34,"column":4},"end":{"line":40,"column":9}},"16":{"start":{"line":37,"column":8},"end":{"line":37,"column":58}},"17":{"start":{"line":38,"column":8},"end":{"line":38,"column":46}},"18":{"start":{"line":39,"column":8},"end":{"line":39,"column":73}},"19":{"start":{"line":39,"column":47},"end":{"line":39,"column":71}},"20":{"start":{"line":44,"column":4},"end":{"line":53,"column":9}},"21":{"start":{"line":47,"column":8},"end":{"line":47,"column":52}},"22":{"start":{"line":48,"column":8},"end":{"line":48,"column":73}},"23":{"start":{"line":48,"column":47},"end":{"line":48,"column":71}},"24":{"start":{"line":51,"column":8},"end":{"line":51,"column":34}},"25":{"start":{"line":52,"column":8},"end":{"line":52,"column":64}},"26":{"start":{"line":57,"column":17},"end":{"line":57,"column":51}},"27":{"start":{"line":58,"column":4},"end":{"line":63,"column":null}},"28":{"start":{"line":58,"column":22},"end":{"line":58,"column":33}},"29":{"start":{"line":58,"column":22},"end":{"line":58,"column":38}},"30":{"start":{"line":58,"column":18},"end":{"line":58,"column":22}},"31":{"start":{"line":59,"column":22},"end":{"line":60,"column":null}},"32":{"start":{"line":60,"column":8},"end":{"line":60,"column":null}},"33":{"start":{"line":62,"column":6},"end":{"line":62,"column":49}},"34":{"start":{"line":64,"column":4},"end":{"line":64,"column":18}},"35":{"start":{"line":68,"column":22},"end":{"line":68,"column":76}},"36":{"start":{"line":69,"column":4},"end":{"line":69,"column":65}},"37":{"start":{"line":72,"column":2},"end":{"line":142,"column":4}},"38":{"start":{"line":77,"column":10},"end":{"line":77,"column":30}},"39":{"start":{"line":86,"column":14},"end":{"line":86,"column":35}},"40":{"start":{"line":87,"column":14},"end":{"line":87,"column":34}},"41":{"start":{"line":97,"column":10},"end":{"line":120,"column":null}},"42":{"start":{"line":98,"column":12},"end":{"line":119,"column":14}},"43":{"start":{"line":104,"column":35},"end":{"line":104,"column":null}},"44":{"start":{"line":112,"column":35},"end":{"line":112,"column":null}},"45":{"start":{"line":122,"column":10},"end":{"line":138,"column":12}},"46":{"start":{"line":126,"column":31},"end":{"line":126,"column":null}},"47":{"start":{"line":132,"column":31},"end":{"line":132,"column":null}},"48":{"start":{"line":145,"column":28},"end":{"line":149,"column":2}},"49":{"start":{"line":151,"column":27},"end":{"line":156,"column":2}},"50":{"start":{"line":158,"column":20},"end":{"line":161,"column":2}},"51":{"start":{"line":167,"column":30},"end":{"line":167,"column":36}},"52":{"start":{"line":168,"column":2},"end":{"line":176,"column":4}},"53":{"start":{"line":172,"column":25},"end":{"line":172,"column":null}},"54":{"start":{"line":179,"column":25},"end":{"line":184,"column":2}},"55":{"start":{"line":185,"column":0},"end":{"line":185,"column":28}}},"fnMap":{"0":{"name":"QueryDisplay","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":21}},"loc":{"start":{"line":18,"column":1},"end":{"line":143,"column":1}}},"1":{"name":"updateQuerySql","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":25}},"loc":{"start":{"line":24,"column":37},"end":{"line":31,"column":3}}},"2":{"name":"(anonymous_12)","decl":{"start":{"line":25,"column":13},"end":{"line":25,"column":14}},"loc":{"start":{"line":25,"column":23},"end":{"line":30,"column":5}}},"3":{"name":"executeQuery","decl":{"start":{"line":33,"column":11},"end":{"line":33,"column":23}},"loc":{"start":{"line":33,"column":23},"end":{"line":41,"column":3}}},"4":{"name":"(anonymous_14)","decl":{"start":{"line":36,"column":12},"end":{"line":36,"column":13}},"loc":{"start":{"line":36,"column":19},"end":{"line":40,"column":7}}},"5":{"name":"(anonymous_15)","decl":{"start":{"line":39,"column":30},"end":{"line":39,"column":31}},"loc":{"start":{"line":39,"column":42},"end":{"line":39,"column":48}}},"6":{"name":"getQuerylogSchema","decl":{"start":{"line":43,"column":11},"end":{"line":43,"column":28}},"loc":{"start":{"line":43,"column":28},"end":{"line":54,"column":3}}},"7":{"name":"(anonymous_17)","decl":{"start":{"line":46,"column":12},"end":{"line":46,"column":13}},"loc":{"start":{"line":46,"column":19},"end":{"line":49,"column":7}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":48,"column":30},"end":{"line":48,"column":31}},"loc":{"start":{"line":48,"column":42},"end":{"line":48,"column":48}}},"9":{"name":"(anonymous_19)","decl":{"start":{"line":50,"column":13},"end":{"line":50,"column":14}},"loc":{"start":{"line":50,"column":17},"end":{"line":53,"column":7}}},"10":{"name":"convertResultsToCSV","decl":{"start":{"line":56,"column":11},"end":{"line":56,"column":30}},"loc":{"start":{"line":56,"column":58},"end":{"line":65,"column":3}}},"11":{"name":"(anonymous_21)","decl":{"start":{"line":59,"column":30},"end":{"line":59,"column":31}},"loc":{"start":{"line":59,"column":32},"end":{"line":60,"column":15}}},"12":{"name":"copyText","decl":{"start":{"line":67,"column":11},"end":{"line":67,"column":19}},"loc":{"start":{"line":67,"column":63},"end":{"line":70,"column":3}}},"13":{"name":"(anonymous_23)","decl":{"start":{"line":76,"column":23},"end":{"line":76,"column":24}},"loc":{"start":{"line":76,"column":27},"end":{"line":78,"column":9}}},"14":{"name":"(anonymous_24)","decl":{"start":{"line":85,"column":21},"end":{"line":85,"column":22}},"loc":{"start":{"line":85,"column":30},"end":{"line":88,"column":13}}},"15":{"name":"(anonymous_25)","decl":{"start":{"line":96,"column":32},"end":{"line":96,"column":33}},"loc":{"start":{"line":96,"column":49},"end":{"line":139,"column":9}}},"16":{"name":"(anonymous_26)","decl":{"start":{"line":104,"column":29},"end":{"line":104,"column":35}},"loc":{"start":{"line":104,"column":29},"end":{"line":104,"column":43}}},"17":{"name":"(anonymous_27)","decl":{"start":{"line":112,"column":29},"end":{"line":112,"column":35}},"loc":{"start":{"line":112,"column":29},"end":{"line":112,"column":43}}},"18":{"name":"(anonymous_28)","decl":{"start":{"line":126,"column":25},"end":{"line":126,"column":31}},"loc":{"start":{"line":126,"column":25},"end":{"line":126,"column":39}}},"19":{"name":"(anonymous_29)","decl":{"start":{"line":132,"column":25},"end":{"line":132,"column":31}},"loc":{"start":{"line":132,"column":25},"end":{"line":132,"column":39}}},"20":{"name":"TextArea","decl":{"start":{"line":163,"column":9},"end":{"line":163,"column":17}},"loc":{"start":{"line":166,"column":1},"end":{"line":177,"column":1}}},"21":{"name":"(anonymous_31)","decl":{"start":{"line":172,"column":16},"end":{"line":172,"column":17}},"loc":{"start":{"line":172,"column":20},"end":{"line":172,"column":33}}}},"branchMap":{"0":{"loc":{"start":{"line":37,"column":29},"end":{"line":37,"column":57}},"type":"binary-expr","locations":[{"start":{"line":37,"column":29},"end":{"line":37,"column":38}},{"start":{"line":37,"column":42},"end":{"line":37,"column":57}}]},"1":{"loc":{"start":{"line":60,"column":8},"end":{"line":60,"column":67}},"type":"cond-expr","locations":[{"start":{"line":60,"column":50},"end":{"line":60,"column":63}},{"start":{"line":60,"column":66},"end":{"line":60,"column":67}}]},"2":{"loc":{"start":{"line":60,"column":8},"end":{"line":60,"column":47}},"type":"binary-expr","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":28}},{"start":{"line":60,"column":32},"end":{"line":60,"column":47}}]},"3":{"loc":{"start":{"line":68,"column":22},"end":{"line":68,"column":76}},"type":"cond-expr","locations":[{"start":{"line":68,"column":40},"end":{"line":68,"column":59}},{"start":{"line":68,"column":62},"end":{"line":68,"column":76}}]},"4":{"loc":{"start":{"line":97,"column":10},"end":{"line":120,"column":null}},"type":"if","locations":[{"start":{"line":97,"column":10},"end":{"line":120,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":1,"50":1,"51":0,"52":0,"53":0,"54":1,"55":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/auditlog.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/auditlog.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":82}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":41}},"3":{"start":{"line":9,"column":18},"end":{"line":9,"column":24}},"4":{"start":{"line":10,"column":26},"end":{"line":10,"column":63}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":26}},"7":{"start":{"line":13,"column":4},"end":{"line":15,"column":7}},"8":{"start":{"line":14,"column":6},"end":{"line":14,"column":19}},"9":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"10":{"start":{"line":19,"column":4},"end":{"line":19,"column":16}},"11":{"start":{"line":22,"column":2},"end":{"line":24,"column":null}},"12":{"start":{"line":23,"column":4},"end":{"line":23,"column":16}},"13":{"start":{"line":26,"column":18},"end":{"line":47,"column":null}},"14":{"start":{"line":27,"column":10},"end":{"line":27,"column":12}},"15":{"start":{"line":27,"column":21},"end":{"line":27,"column":23}},"16":{"start":{"line":27,"column":27},"end":{"line":27,"column":29}},"17":{"start":{"line":27,"column":35},"end":{"line":27,"column":37}},"18":{"start":{"line":27,"column":47},"end":{"line":27,"column":49}},"19":{"start":{"line":27,"column":54},"end":{"line":27,"column":56}},"20":{"start":{"line":27,"column":65},"end":{"line":27,"column":67}},"21":{"start":{"line":28,"column":28},"end":{"line":38,"column":null}},"22":{"start":{"line":41,"column":6},"end":{"line":46,"column":8}},"23":{"start":{"line":50,"column":24},"end":{"line":50,"column":72}},"24":{"start":{"line":52,"column":2},"end":{"line":64,"column":4}},"25":{"start":{"line":71,"column":2},"end":{"line":73,"column":null}},"26":{"start":{"line":72,"column":4},"end":{"line":72,"column":18}},"27":{"start":{"line":75,"column":2},"end":{"line":77,"column":null}},"28":{"start":{"line":76,"column":4},"end":{"line":76,"column":24}},"29":{"start":{"line":79,"column":2},"end":{"line":81,"column":null}},"30":{"start":{"line":80,"column":4},"end":{"line":80,"column":17}},"31":{"start":{"line":83,"column":2},"end":{"line":83,"column":34}},"32":{"start":{"line":92,"column":26},"end":{"line":92,"column":63}},"33":{"start":{"line":93,"column":26},"end":{"line":93,"column":61}},"34":{"start":{"line":95,"column":2},"end":{"line":124,"column":null}},"35":{"start":{"line":96,"column":4},"end":{"line":106,"column":null}},"36":{"start":{"line":98,"column":6},"end":{"line":98,"column":41}},"37":{"start":{"line":101,"column":6},"end":{"line":105,"column":8}},"38":{"start":{"line":108,"column":4},"end":{"line":123,"column":null}},"39":{"start":{"line":110,"column":6},"end":{"line":114,"column":8}},"40":{"start":{"line":117,"column":6},"end":{"line":122,"column":8}},"41":{"start":{"line":127,"column":0},"end":{"line":127,"column":24}}},"fnMap":{"0":{"name":"AuditLog","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":17}},"loc":{"start":{"line":8,"column":40},"end":{"line":65,"column":1}}},"1":{"name":"fetchData","decl":{"start":{"line":12,"column":11},"end":{"line":12,"column":20}},"loc":{"start":{"line":12,"column":20},"end":{"line":16,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":13,"column":27},"end":{"line":13,"column":28}},"loc":{"start":{"line":13,"column":31},"end":{"line":15,"column":5}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":27,"column":4},"end":{"line":27,"column":5}},"loc":{"start":{"line":27,"column":67},"end":{"line":47,"column":5}}},"4":{"name":"getFormattedValue","decl":{"start":{"line":67,"column":9},"end":{"line":67,"column":26}},"loc":{"start":{"line":69,"column":25},"end":{"line":84,"column":1}}},"5":{"name":"getActionDetail","decl":{"start":{"line":86,"column":9},"end":{"line":86,"column":24}},"loc":{"start":{"line":90,"column":30},"end":{"line":125,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":20,"column":null}}]},"1":{"loc":{"start":{"line":22,"column":2},"end":{"line":24,"column":null}},"type":"if","locations":[{"start":{"line":22,"column":2},"end":{"line":24,"column":null}}]},"2":{"loc":{"start":{"line":71,"column":2},"end":{"line":73,"column":null}},"type":"if","locations":[{"start":{"line":71,"column":2},"end":{"line":73,"column":null}}]},"3":{"loc":{"start":{"line":71,"column":6},"end":{"line":71,"column":37}},"type":"binary-expr","locations":[{"start":{"line":71,"column":6},"end":{"line":71,"column":20}},{"start":{"line":71,"column":24},"end":{"line":71,"column":37}}]},"4":{"loc":{"start":{"line":75,"column":2},"end":{"line":77,"column":null}},"type":"if","locations":[{"start":{"line":75,"column":2},"end":{"line":77,"column":null}}]},"5":{"loc":{"start":{"line":79,"column":2},"end":{"line":81,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":81,"column":null}}]},"6":{"loc":{"start":{"line":79,"column":6},"end":{"line":79,"column":60}},"type":"binary-expr","locations":[{"start":{"line":79,"column":6},"end":{"line":79,"column":20}},{"start":{"line":79,"column":25},"end":{"line":79,"column":39}},{"start":{"line":79,"column":43},"end":{"line":79,"column":59}}]},"7":{"loc":{"start":{"line":95,"column":2},"end":{"line":124,"column":null}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":124,"column":null}},{"start":{"line":107,"column":9},"end":{"line":124,"column":null}}]},"8":{"loc":{"start":{"line":95,"column":6},"end":{"line":95,"column":39}},"type":"binary-expr","locations":[{"start":{"line":95,"column":6},"end":{"line":95,"column":21}},{"start":{"line":95,"column":25},"end":{"line":95,"column":39}}]},"9":{"loc":{"start":{"line":96,"column":4},"end":{"line":106,"column":null}},"type":"if","locations":[{"start":{"line":96,"column":4},"end":{"line":106,"column":null}},{"start":{"line":99,"column":11},"end":{"line":106,"column":null}}]},"10":{"loc":{"start":{"line":108,"column":4},"end":{"line":123,"column":null}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":123,"column":null}},{"start":{"line":115,"column":11},"end":{"line":123,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{"0":[0],"1":[0],"2":[0],"3":[0,0],"4":[0],"5":[0],"6":[0,0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":13,"column":0},"end":{"line":13,"column":95}},"3":{"start":{"line":14,"column":0},"end":{"line":14,"column":93}},"4":{"start":{"line":17,"column":18},"end":{"line":17,"column":24}},"5":{"start":{"line":20,"column":26},"end":{"line":28,"column":9}},"6":{"start":{"line":20,"column":13},"end":{"line":20,"column":15}},"7":{"start":{"line":20,"column":22},"end":{"line":20,"column":26}},"8":{"start":{"line":31,"column":45},"end":{"line":31,"column":77}},"9":{"start":{"line":31,"column":24},"end":{"line":31,"column":26}},"10":{"start":{"line":31,"column":41},"end":{"line":31,"column":45}},"11":{"start":{"line":34,"column":50},"end":{"line":35,"column":null}},"12":{"start":{"line":34,"column":25},"end":{"line":34,"column":27}},"13":{"start":{"line":34,"column":46},"end":{"line":34,"column":50}},"14":{"start":{"line":39,"column":36},"end":{"line":39,"column":51}},"15":{"start":{"line":39,"column":18},"end":{"line":39,"column":20}},"16":{"start":{"line":39,"column":32},"end":{"line":39,"column":36}},"17":{"start":{"line":42,"column":46},"end":{"line":47,"column":61}},"18":{"start":{"line":42,"column":23},"end":{"line":42,"column":25}},"19":{"start":{"line":42,"column":42},"end":{"line":42,"column":46}},"20":{"start":{"line":50,"column":4},"end":{"line":50,"column":79}},"21":{"start":{"line":54,"column":2},"end":{"line":56,"column":null}},"22":{"start":{"line":55,"column":4},"end":{"line":55,"column":16}},"23":{"start":{"line":59,"column":4},"end":{"line":61,"column":7}},"24":{"start":{"line":60,"column":6},"end":{"line":60,"column":19}},"25":{"start":{"line":65,"column":4},"end":{"line":67,"column":7}},"26":{"start":{"line":66,"column":6},"end":{"line":66,"column":27}},"27":{"start":{"line":71,"column":4},"end":{"line":71,"column":30}},"28":{"start":{"line":72,"column":4},"end":{"line":72,"column":23}},"29":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"30":{"start":{"line":74,"column":4},"end":{"line":74,"column":24}},"31":{"start":{"line":78,"column":4},"end":{"line":78,"column":30}},"32":{"start":{"line":79,"column":4},"end":{"line":79,"column":24}},"33":{"start":{"line":80,"column":4},"end":{"line":80,"column":26}},"34":{"start":{"line":89,"column":4},"end":{"line":89,"column":57}},"35":{"start":{"line":90,"column":4},"end":{"line":90,"column":29}},"36":{"start":{"line":94,"column":4},"end":{"line":96,"column":7}},"37":{"start":{"line":95,"column":6},"end":{"line":95,"column":54}},"38":{"start":{"line":99,"column":2},"end":{"line":245,"column":null}},"39":{"start":{"line":100,"column":31},"end":{"line":177,"column":6}},"40":{"start":{"line":101,"column":48},"end":{"line":101,"column":52}},"41":{"start":{"line":102,"column":24},"end":{"line":102,"column":48}},"42":{"start":{"line":103,"column":26},"end":{"line":103,"column":74}},"43":{"start":{"line":104,"column":6},"end":{"line":176,"column":12}},"44":{"start":{"line":111,"column":14},"end":{"line":113,"column":17}},"45":{"start":{"line":112,"column":16},"end":{"line":112,"column":52}},"46":{"start":{"line":117,"column":14},"end":{"line":147,"column":null}},"47":{"start":{"line":122,"column":16},"end":{"line":146,"column":21}},"48":{"start":{"line":129,"column":20},"end":{"line":141,"column":23}},"49":{"start":{"line":130,"column":22},"end":{"line":139,"column":null}},"50":{"start":{"line":131,"column":36},"end":{"line":132,"column":null}},"51":{"start":{"line":132,"column":38},"end":{"line":132,"column":null}},"52":{"start":{"line":134,"column":24},"end":{"line":136,"column":null}},"53":{"start":{"line":135,"column":26},"end":{"line":135,"column":63}},"54":{"start":{"line":137,"column":24},"end":{"line":137,"column":46}},"55":{"start":{"line":138,"column":24},"end":{"line":138,"column":58}},"56":{"start":{"line":140,"column":22},"end":{"line":140,"column":34}},"57":{"start":{"line":142,"column":20},"end":{"line":142,"column":32}},"58":{"start":{"line":145,"column":20},"end":{"line":145,"column":38}},"59":{"start":{"line":150,"column":14},"end":{"line":170,"column":null}},"60":{"start":{"line":151,"column":16},"end":{"line":169,"column":21}},"61":{"start":{"line":161,"column":20},"end":{"line":167,"column":23}},"62":{"start":{"line":162,"column":22},"end":{"line":164,"column":null}},"63":{"start":{"line":163,"column":24},"end":{"line":163,"column":75}},"64":{"start":{"line":163,"column":55},"end":{"line":163,"column":74}},"65":{"start":{"line":166,"column":22},"end":{"line":166,"column":34}},"66":{"start":{"line":168,"column":20},"end":{"line":168,"column":32}},"67":{"start":{"line":172,"column":18},"end":{"line":172,"column":null}},"68":{"start":{"line":175,"column":12},"end":{"line":175,"column":null}},"69":{"start":{"line":179,"column":4},"end":{"line":222,"column":null}},"70":{"start":{"line":180,"column":6},"end":{"line":221,"column":8}},"71":{"start":{"line":186,"column":12},"end":{"line":188,"column":15}},"72":{"start":{"line":187,"column":14},"end":{"line":187,"column":46}},"73":{"start":{"line":189,"column":12},"end":{"line":191,"column":null}},"74":{"start":{"line":190,"column":14},"end":{"line":190,"column":57}},"75":{"start":{"line":194,"column":12},"end":{"line":196,"column":null}},"76":{"start":{"line":195,"column":14},"end":{"line":195,"column":50}},"77":{"start":{"line":200,"column":12},"end":{"line":218,"column":17}},"78":{"start":{"line":207,"column":16},"end":{"line":213,"column":19}},"79":{"start":{"line":208,"column":18},"end":{"line":212,"column":null}},"80":{"start":{"line":209,"column":20},"end":{"line":209,"column":42}},"81":{"start":{"line":211,"column":20},"end":{"line":211,"column":32}},"82":{"start":{"line":214,"column":16},"end":{"line":214,"column":28}},"83":{"start":{"line":217,"column":16},"end":{"line":217,"column":34}},"84":{"start":{"line":224,"column":4},"end":{"line":226,"column":null}},"85":{"start":{"line":225,"column":6},"end":{"line":225,"column":18}},"86":{"start":{"line":228,"column":4},"end":{"line":242,"column":6}},"87":{"start":{"line":244,"column":4},"end":{"line":244,"column":16}},"88":{"start":{"line":248,"column":0},"end":{"line":248,"column":29}}},"fnMap":{"0":{"name":"RuntimeConfig","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":22}},"loc":{"start":{"line":16,"column":45},"end":{"line":246,"column":1}}},"1":{"name":"resetCurrentRowData","decl":{"start":{"line":49,"column":11},"end":{"line":49,"column":30}},"loc":{"start":{"line":49,"column":30},"end":{"line":51,"column":3}}},"2":{"name":"fetchData","decl":{"start":{"line":58,"column":11},"end":{"line":58,"column":20}},"loc":{"start":{"line":58,"column":20},"end":{"line":62,"column":3}}},"3":{"name":"(anonymous_12)","decl":{"start":{"line":59,"column":26},"end":{"line":59,"column":27}},"loc":{"start":{"line":59,"column":30},"end":{"line":61,"column":5}}},"4":{"name":"fetchDescriptions","decl":{"start":{"line":64,"column":11},"end":{"line":64,"column":28}},"loc":{"start":{"line":64,"column":28},"end":{"line":68,"column":3}}},"5":{"name":"(anonymous_14)","decl":{"start":{"line":65,"column":31},"end":{"line":65,"column":32}},"loc":{"start":{"line":65,"column":35},"end":{"line":67,"column":5}}},"6":{"name":"addNewConfig","decl":{"start":{"line":70,"column":11},"end":{"line":70,"column":23}},"loc":{"start":{"line":70,"column":23},"end":{"line":75,"column":3}}},"7":{"name":"resetForm","decl":{"start":{"line":77,"column":11},"end":{"line":77,"column":20}},"loc":{"start":{"line":77,"column":20},"end":{"line":81,"column":3}}},"8":{"name":"enterEditMode","decl":{"start":{"line":83,"column":11},"end":{"line":83,"column":24}},"loc":{"start":{"line":87,"column":20},"end":{"line":91,"column":3}}},"9":{"name":"updateDescription","decl":{"start":{"line":93,"column":11},"end":{"line":93,"column":28}},"loc":{"start":{"line":93,"column":51},"end":{"line":97,"column":3}}},"10":{"name":"(anonymous_19)","decl":{"start":{"line":94,"column":22},"end":{"line":94,"column":23}},"loc":{"start":{"line":94,"column":27},"end":{"line":96,"column":5}}},"11":{"name":"(anonymous_20)","decl":{"start":{"line":100,"column":40},"end":{"line":100,"column":41}},"loc":{"start":{"line":100,"column":44},"end":{"line":177,"column":5}}},"12":{"name":"(anonymous_21)","decl":{"start":{"line":110,"column":12},"end":{"line":110,"column":13}},"loc":{"start":{"line":110,"column":21},"end":{"line":114,"column":13}}},"13":{"name":"(anonymous_22)","decl":{"start":{"line":111,"column":32},"end":{"line":111,"column":33}},"loc":{"start":{"line":111,"column":37},"end":{"line":113,"column":15}}},"14":{"name":"(anonymous_23)","decl":{"start":{"line":116,"column":12},"end":{"line":116,"column":null}},"loc":{"start":{"line":116,"column":12},"end":{"line":148,"column":13}}},"15":{"name":"(anonymous_24)","decl":{"start":{"line":128,"column":24},"end":{"line":128,"column":25}},"loc":{"start":{"line":128,"column":28},"end":{"line":143,"column":19}}},"16":{"name":"(anonymous_25)","decl":{"start":{"line":129,"column":28},"end":{"line":129,"column":29}},"loc":{"start":{"line":129,"column":33},"end":{"line":141,"column":21}}},"17":{"name":"(anonymous_26)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":33},"end":{"line":132,"column":44}}},"18":{"name":"(anonymous_27)","decl":{"start":{"line":144,"column":25},"end":{"line":144,"column":26}},"loc":{"start":{"line":144,"column":29},"end":{"line":146,"column":19}}},"19":{"name":"(anonymous_28)","decl":{"start":{"line":149,"column":12},"end":{"line":149,"column":null}},"loc":{"start":{"line":149,"column":12},"end":{"line":171,"column":13}}},"20":{"name":"(anonymous_29)","decl":{"start":{"line":160,"column":24},"end":{"line":160,"column":null}},"loc":{"start":{"line":160,"column":24},"end":{"line":169,"column":19}}},"21":{"name":"(anonymous_30)","decl":{"start":{"line":161,"column":28},"end":{"line":161,"column":29}},"loc":{"start":{"line":161,"column":33},"end":{"line":167,"column":21}}},"22":{"name":"(anonymous_31)","decl":{"start":{"line":163,"column":43},"end":{"line":163,"column":44}},"loc":{"start":{"line":163,"column":50},"end":{"line":163,"column":61}}},"23":{"name":"(anonymous_32)","decl":{"start":{"line":172,"column":12},"end":{"line":172,"column":18}},"loc":{"start":{"line":172,"column":12},"end":{"line":172,"column":37}}},"24":{"name":"(anonymous_33)","decl":{"start":{"line":174,"column":69},"end":{"line":174,"column":null}},"loc":{"start":{"line":174,"column":69},"end":{"line":175,"column":25}}},"25":{"name":"(anonymous_34)","decl":{"start":{"line":185,"column":10},"end":{"line":185,"column":11}},"loc":{"start":{"line":185,"column":17},"end":{"line":192,"column":11}}},"26":{"name":"(anonymous_35)","decl":{"start":{"line":186,"column":30},"end":{"line":186,"column":31}},"loc":{"start":{"line":186,"column":35},"end":{"line":188,"column":13}}},"27":{"name":"(anonymous_36)","decl":{"start":{"line":193,"column":10},"end":{"line":193,"column":11}},"loc":{"start":{"line":193,"column":19},"end":{"line":194,"column":29}}},"28":{"name":"(anonymous_37)","decl":{"start":{"line":194,"column":30},"end":{"line":194,"column":31}},"loc":{"start":{"line":194,"column":35},"end":{"line":196,"column":13}}},"29":{"name":"(anonymous_38)","decl":{"start":{"line":199,"column":10},"end":{"line":199,"column":null}},"loc":{"start":{"line":199,"column":10},"end":{"line":219,"column":11}}},"30":{"name":"(anonymous_39)","decl":{"start":{"line":206,"column":20},"end":{"line":206,"column":21}},"loc":{"start":{"line":206,"column":24},"end":{"line":215,"column":15}}},"31":{"name":"(anonymous_40)","decl":{"start":{"line":207,"column":24},"end":{"line":207,"column":25}},"loc":{"start":{"line":207,"column":29},"end":{"line":213,"column":17}}},"32":{"name":"(anonymous_41)","decl":{"start":{"line":216,"column":21},"end":{"line":216,"column":22}},"loc":{"start":{"line":216,"column":25},"end":{"line":218,"column":15}}}},"branchMap":{"0":{"loc":{"start":{"line":54,"column":2},"end":{"line":56,"column":null}},"type":"if","locations":[{"start":{"line":54,"column":2},"end":{"line":56,"column":null}}]},"1":{"loc":{"start":{"line":99,"column":2},"end":{"line":245,"column":null}},"type":"if","locations":[{"start":{"line":99,"column":2},"end":{"line":245,"column":null}},{"start":{"line":243,"column":9},"end":{"line":245,"column":null}}]},"2":{"loc":{"start":{"line":103,"column":26},"end":{"line":103,"column":74}},"type":"binary-expr","locations":[{"start":{"line":103,"column":26},"end":{"line":103,"column":51}},{"start":{"line":103,"column":55},"end":{"line":103,"column":74}}]},"3":{"loc":{"start":{"line":104,"column":13},"end":{"line":175,"column":null}},"type":"cond-expr","locations":[{"start":{"line":105,"column":10},"end":{"line":172,"column":null}},{"start":{"line":174,"column":10},"end":{"line":175,"column":null}}]},"4":{"loc":{"start":{"line":117,"column":14},"end":{"line":147,"column":null}},"type":"if","locations":[{"start":{"line":117,"column":14},"end":{"line":147,"column":null}}]},"5":{"loc":{"start":{"line":130,"column":22},"end":{"line":139,"column":null}},"type":"if","locations":[{"start":{"line":130,"column":22},"end":{"line":139,"column":null}}]},"6":{"loc":{"start":{"line":134,"column":24},"end":{"line":136,"column":null}},"type":"if","locations":[{"start":{"line":134,"column":24},"end":{"line":136,"column":null}}]},"7":{"loc":{"start":{"line":150,"column":14},"end":{"line":170,"column":null}},"type":"if","locations":[{"start":{"line":150,"column":14},"end":{"line":170,"column":null}}]},"8":{"loc":{"start":{"line":162,"column":22},"end":{"line":164,"column":null}},"type":"if","locations":[{"start":{"line":162,"column":22},"end":{"line":164,"column":null}}]},"9":{"loc":{"start":{"line":179,"column":4},"end":{"line":222,"column":null}},"type":"if","locations":[{"start":{"line":179,"column":4},"end":{"line":222,"column":null}}]},"10":{"loc":{"start":{"line":189,"column":12},"end":{"line":191,"column":null}},"type":"if","locations":[{"start":{"line":189,"column":12},"end":{"line":191,"column":null}}]},"11":{"loc":{"start":{"line":208,"column":18},"end":{"line":212,"column":null}},"type":"if","locations":[{"start":{"line":208,"column":18},"end":{"line":212,"column":null}},{"start":{"line":210,"column":25},"end":{"line":212,"column":null}}]},"12":{"loc":{"start":{"line":224,"column":4},"end":{"line":226,"column":null}},"type":"if","locations":[{"start":{"line":224,"column":4},"end":{"line":226,"column":null}}]},"13":{"loc":{"start":{"line":236,"column":9},"end":{"line":239,"column":null}},"type":"binary-expr","locations":[{"start":{"line":236,"column":9},"end":{"line":236,"column":19}},{"start":{"line":236,"column":23},"end":{"line":236,"column":40}},{"start":{"line":237,"column":10},"end":{"line":237,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0},"b":{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0],"5":[0],"6":[0],"7":[0],"8":[0],"9":[0],"10":[0],"11":[0,0],"12":[0],"13":[0,0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/row_data.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/row_data.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":61}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":53}},"3":{"start":{"line":13,"column":14},"end":{"line":13,"column":40}},"4":{"start":{"line":16,"column":17},"end":{"line":16,"column":72}},"5":{"start":{"line":17,"column":2},"end":{"line":17,"column":68}},"6":{"start":{"line":28,"column":2},"end":{"line":38,"column":4}},"7":{"start":{"line":34,"column":42},"end":{"line":34,"column":null}},"8":{"start":{"line":105,"column":9},"end":{"line":105,"column":23}},"9":{"start":{"line":52,"column":2},"end":{"line":75,"column":4}},"10":{"start":{"line":58,"column":42},"end":{"line":58,"column":null}},"11":{"start":{"line":67,"column":63},"end":{"line":67,"column":null}},"12":{"start":{"line":71,"column":42},"end":{"line":71,"column":null}},"13":{"start":{"line":105,"column":25},"end":{"line":105,"column":39}},"14":{"start":{"line":88,"column":2},"end":{"line":102,"column":4}},"15":{"start":{"line":98,"column":42},"end":{"line":98,"column":null}},"16":{"start":{"line":105,"column":41},"end":{"line":105,"column":50}}},"fnMap":{"0":{"name":"Space","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":14}},"loc":{"start":{"line":15,"column":41},"end":{"line":18,"column":1}}},"1":{"name":"getReadonlyRow","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":23}},"loc":{"start":{"line":26,"column":18},"end":{"line":39,"column":1}}},"2":{"name":"(anonymous_5)","decl":{"start":{"line":34,"column":36},"end":{"line":34,"column":42}},"loc":{"start":{"line":34,"column":36},"end":{"line":34,"column":46}}},"3":{"name":"getEditableRow","decl":{"start":{"line":41,"column":9},"end":{"line":41,"column":23}},"loc":{"start":{"line":50,"column":20},"end":{"line":76,"column":1}}},"4":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":36},"end":{"line":58,"column":42}},"loc":{"start":{"line":58,"column":36},"end":{"line":58,"column":46}}},"5":{"name":"(anonymous_8)","decl":{"start":{"line":67,"column":57},"end":{"line":67,"column":63}},"loc":{"start":{"line":67,"column":57},"end":{"line":67,"column":72}}},"6":{"name":"(anonymous_9)","decl":{"start":{"line":71,"column":36},"end":{"line":71,"column":42}},"loc":{"start":{"line":71,"column":36},"end":{"line":71,"column":48}}},"7":{"name":"getNewRow","decl":{"start":{"line":78,"column":9},"end":{"line":78,"column":18}},"loc":{"start":{"line":86,"column":18},"end":{"line":103,"column":1}}},"8":{"name":"(anonymous_11)","decl":{"start":{"line":98,"column":36},"end":{"line":98,"column":42}},"loc":{"start":{"line":98,"column":36},"end":{"line":98,"column":48}}}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":17},"end":{"line":16,"column":72}},"type":"cond-expr","locations":[{"start":{"line":16,"column":55},"end":{"line":16,"column":67}},{"start":{"line":16,"column":70},"end":{"line":16,"column":72}}]},"1":{"loc":{"start":{"line":33,"column":4},"end":{"line":36,"column":null}},"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":15}},{"start":{"line":34,"column":6},"end":{"line":34,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":0,"13":1,"14":0,"15":0,"16":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,0],"1":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/runtime_config/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"1":{"start":{"line":3,"column":23},"end":{"line":6,"column":2}},"2":{"start":{"line":20,"column":9},"end":{"line":20,"column":23}},"3":{"start":{"line":8,"column":18},"end":{"line":13,"column":2}},"4":{"start":{"line":20,"column":25},"end":{"line":20,"column":34}},"5":{"start":{"line":15,"column":23},"end":{"line":18,"column":2}},"6":{"start":{"line":20,"column":36},"end":{"line":20,"column":50}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":70}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":68}},"4":{"start":{"line":7,"column":0},"end":{"line":7,"column":56}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":60}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":78}},"7":{"start":{"line":17,"column":20},"end":{"line":17,"column":33}},"8":{"start":{"line":19,"column":34},"end":{"line":19,"column":66}},"9":{"start":{"line":19,"column":17},"end":{"line":19,"column":19}},"10":{"start":{"line":19,"column":30},"end":{"line":19,"column":34}},"11":{"start":{"line":20,"column":33},"end":{"line":20,"column":100}},"12":{"start":{"line":20,"column":19},"end":{"line":20,"column":21}},"13":{"start":{"line":20,"column":29},"end":{"line":20,"column":33}},"14":{"start":{"line":21,"column":54},"end":{"line":22,"column":null}},"15":{"start":{"line":21,"column":27},"end":{"line":21,"column":29}},"16":{"start":{"line":21,"column":50},"end":{"line":21,"column":54}},"17":{"start":{"line":25,"column":2},"end":{"line":29,"column":9}},"18":{"start":{"line":26,"column":4},"end":{"line":28,"column":7}},"19":{"start":{"line":27,"column":6},"end":{"line":27,"column":23}},"20":{"start":{"line":32,"column":4},"end":{"line":37,"column":7}},"21":{"start":{"line":33,"column":6},"end":{"line":35,"column":null}},"22":{"start":{"line":41,"column":4},"end":{"line":46,"column":7}},"23":{"start":{"line":42,"column":6},"end":{"line":44,"column":null}},"24":{"start":{"line":50,"column":4},"end":{"line":59,"column":9}},"25":{"start":{"line":53,"column":29},"end":{"line":56,"column":10}},"26":{"start":{"line":57,"column":8},"end":{"line":57,"column":52}},"27":{"start":{"line":58,"column":8},"end":{"line":58,"column":79}},"28":{"start":{"line":58,"column":47},"end":{"line":58,"column":77}},"29":{"start":{"line":62,"column":2},"end":{"line":101,"column":4}},"30":{"start":{"line":93,"column":59},"end":{"line":96,"column":12}},"31":{"start":{"line":104,"column":0},"end":{"line":104,"column":25}}},"fnMap":{"0":{"name":"SnQLToSQL","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":41},"end":{"line":102,"column":1}}},"1":{"name":"(anonymous_11)","decl":{"start":{"line":25,"column":12},"end":{"line":25,"column":null}},"loc":{"start":{"line":25,"column":12},"end":{"line":29,"column":3}}},"2":{"name":"(anonymous_12)","decl":{"start":{"line":26,"column":42},"end":{"line":26,"column":43}},"loc":{"start":{"line":26,"column":46},"end":{"line":28,"column":5}}},"3":{"name":"selectDataset","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":40},"end":{"line":38,"column":3}}},"4":{"name":"(anonymous_14)","decl":{"start":{"line":32,"column":13},"end":{"line":32,"column":14}},"loc":{"start":{"line":32,"column":23},"end":{"line":37,"column":5}}},"5":{"name":"updateQuerySql","decl":{"start":{"line":40,"column":11},"end":{"line":40,"column":25}},"loc":{"start":{"line":40,"column":39},"end":{"line":47,"column":3}}},"6":{"name":"(anonymous_16)","decl":{"start":{"line":41,"column":13},"end":{"line":41,"column":14}},"loc":{"start":{"line":41,"column":23},"end":{"line":46,"column":5}}},"7":{"name":"convertQuery","decl":{"start":{"line":49,"column":11},"end":{"line":49,"column":23}},"loc":{"start":{"line":49,"column":23},"end":{"line":60,"column":3}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":52,"column":12},"end":{"line":52,"column":13}},"loc":{"start":{"line":52,"column":19},"end":{"line":59,"column":7}}},"9":{"name":"(anonymous_19)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":42},"end":{"line":58,"column":48}}},"10":{"name":"(anonymous_20)","decl":{"start":{"line":93,"column":42},"end":{"line":93,"column":43}},"loc":{"start":{"line":93,"column":54},"end":{"line":93,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":67,"column":27},"end":{"line":67,"column":49}},"type":"binary-expr","locations":[{"start":{"line":67,"column":27},"end":{"line":67,"column":43}},{"start":{"line":67,"column":47},"end":{"line":67,"column":49}}]},"1":{"loc":{"start":{"line":72,"column":21},"end":{"line":72,"column":45}},"type":"binary-expr","locations":[{"start":{"line":72,"column":21},"end":{"line":72,"column":39}},{"start":{"line":72,"column":43},"end":{"line":72,"column":45}}]},"2":{"loc":{"start":{"line":82,"column":16},"end":{"line":82,"column":80}},"type":"binary-expr","locations":[{"start":{"line":82,"column":16},"end":{"line":82,"column":47}},{"start":{"line":82,"column":51},"end":{"line":82,"column":80}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":5,"column":2}},"1":{"start":{"line":21,"column":2},"end":{"line":21,"column":21}},"2":{"start":{"line":7,"column":27},"end":{"line":11,"column":2}},"3":{"start":{"line":22,"column":2},"end":{"line":22,"column":20}},"4":{"start":{"line":13,"column":20},"end":{"line":16,"column":2}},"5":{"start":{"line":23,"column":2},"end":{"line":23,"column":13}},"6":{"start":{"line":18,"column":23},"end":{"line":18,"column":70}},"7":{"start":{"line":24,"column":2},"end":{"line":24,"column":18}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/utils.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snql_to_sql/utils.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":7,"column":30},"end":{"line":7,"column":36}},"2":{"start":{"line":8,"column":2},"end":{"line":16,"column":4}},"3":{"start":{"line":12,"column":25},"end":{"line":12,"column":null}},"4":{"start":{"line":23,"column":9},"end":{"line":23,"column":17}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":45}},"6":{"start":{"line":23,"column":19},"end":{"line":23,"column":27}}},"fnMap":{"0":{"name":"TextArea","decl":{"start":{"line":3,"column":9},"end":{"line":3,"column":17}},"loc":{"start":{"line":6,"column":1},"end":{"line":17,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":16},"end":{"line":12,"column":17}},"loc":{"start":{"line":12,"column":20},"end":{"line":12,"column":33}}},"2":{"name":"copyText","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":17}},"loc":{"start":{"line":19,"column":30},"end":{"line":21,"column":1}}}},"branchMap":{},"s":{"0":1,"1":0,"2":0,"3":0,"4":1,"5":0,"6":1},"f":{"0":0,"1":0,"2":0},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":47}},"4":{"start":{"line":13,"column":0},"end":{"line":13,"column":60}},"5":{"start":{"line":14,"column":0},"end":{"line":14,"column":70}},"6":{"start":{"line":15,"column":0},"end":{"line":15,"column":60}},"7":{"start":{"line":16,"column":0},"end":{"line":16,"column":78}},"8":{"start":{"line":17,"column":0},"end":{"line":17,"column":null}},"9":{"start":{"line":23,"column":20},"end":{"line":23,"column":35}},"10":{"start":{"line":25,"column":34},"end":{"line":25,"column":66}},"11":{"start":{"line":25,"column":17},"end":{"line":25,"column":19}},"12":{"start":{"line":25,"column":30},"end":{"line":25,"column":34}},"13":{"start":{"line":26,"column":33},"end":{"line":26,"column":100}},"14":{"start":{"line":26,"column":19},"end":{"line":26,"column":21}},"15":{"start":{"line":26,"column":29},"end":{"line":26,"column":33}},"16":{"start":{"line":27,"column":54},"end":{"line":28,"column":null}},"17":{"start":{"line":27,"column":27},"end":{"line":27,"column":29}},"18":{"start":{"line":27,"column":50},"end":{"line":27,"column":54}},"19":{"start":{"line":31,"column":2},"end":{"line":35,"column":9}},"20":{"start":{"line":32,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":33,"column":6},"end":{"line":33,"column":23}},"22":{"start":{"line":38,"column":4},"end":{"line":43,"column":7}},"23":{"start":{"line":39,"column":6},"end":{"line":41,"column":null}},"24":{"start":{"line":47,"column":4},"end":{"line":52,"column":7}},"25":{"start":{"line":48,"column":6},"end":{"line":50,"column":null}},"26":{"start":{"line":56,"column":4},"end":{"line":66,"column":9}},"27":{"start":{"line":59,"column":29},"end":{"line":63,"column":10}},"28":{"start":{"line":64,"column":8},"end":{"line":64,"column":52}},"29":{"start":{"line":65,"column":8},"end":{"line":65,"column":79}},"30":{"start":{"line":65,"column":47},"end":{"line":65,"column":77}},"31":{"start":{"line":70,"column":2},"end":{"line":89,"column":null}},"32":{"start":{"line":71,"column":4},"end":{"line":71,"column":39}},"33":{"start":{"line":72,"column":4},"end":{"line":72,"column":40}},"34":{"start":{"line":73,"column":4},"end":{"line":88,"column":null}},"35":{"start":{"line":75,"column":6},"end":{"line":87,"column":8}},"36":{"start":{"line":77,"column":10},"end":{"line":83,"column":null}},"37":{"start":{"line":78,"column":12},"end":{"line":78,"column":29}},"38":{"start":{"line":79,"column":17},"end":{"line":83,"column":null}},"39":{"start":{"line":80,"column":12},"end":{"line":80,"column":29}},"40":{"start":{"line":82,"column":12},"end":{"line":82,"column":43}},"41":{"start":{"line":84,"column":10},"end":{"line":84,"column":21}},"42":{"start":{"line":91,"column":2},"end":{"line":148,"column":4}},"43":{"start":{"line":96,"column":10},"end":{"line":96,"column":31}},"44":{"start":{"line":128,"column":44},"end":{"line":138,"column":14}},"45":{"start":{"line":131,"column":42},"end":{"line":135,"column":20}},"46":{"start":{"line":151,"column":0},"end":{"line":151,"column":28}}},"fnMap":{"0":{"name":"SnubaExplain","decl":{"start":{"line":24,"column":9},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":44},"end":{"line":149,"column":1}}},"1":{"name":"(anonymous_11)","decl":{"start":{"line":31,"column":12},"end":{"line":31,"column":null}},"loc":{"start":{"line":31,"column":12},"end":{"line":35,"column":3}}},"2":{"name":"(anonymous_12)","decl":{"start":{"line":32,"column":42},"end":{"line":32,"column":43}},"loc":{"start":{"line":32,"column":46},"end":{"line":34,"column":5}}},"3":{"name":"selectDataset","decl":{"start":{"line":37,"column":11},"end":{"line":37,"column":24}},"loc":{"start":{"line":37,"column":40},"end":{"line":44,"column":3}}},"4":{"name":"(anonymous_14)","decl":{"start":{"line":38,"column":13},"end":{"line":38,"column":14}},"loc":{"start":{"line":38,"column":23},"end":{"line":43,"column":5}}},"5":{"name":"updateQuerySnQL","decl":{"start":{"line":46,"column":11},"end":{"line":46,"column":26}},"loc":{"start":{"line":46,"column":40},"end":{"line":53,"column":3}}},"6":{"name":"(anonymous_16)","decl":{"start":{"line":47,"column":13},"end":{"line":47,"column":14}},"loc":{"start":{"line":47,"column":23},"end":{"line":52,"column":5}}},"7":{"name":"explainQuery","decl":{"start":{"line":55,"column":11},"end":{"line":55,"column":23}},"loc":{"start":{"line":55,"column":23},"end":{"line":67,"column":3}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":58,"column":12},"end":{"line":58,"column":13}},"loc":{"start":{"line":58,"column":19},"end":{"line":66,"column":7}}},"9":{"name":"(anonymous_19)","decl":{"start":{"line":65,"column":30},"end":{"line":65,"column":31}},"loc":{"start":{"line":65,"column":42},"end":{"line":65,"column":48}}},"10":{"name":"(anonymous_20)","decl":{"start":{"line":76,"column":8},"end":{"line":76,"column":9}},"loc":{"start":{"line":76,"column":48},"end":{"line":85,"column":9}}},"11":{"name":"(anonymous_21)","decl":{"start":{"line":95,"column":23},"end":{"line":95,"column":24}},"loc":{"start":{"line":95,"column":27},"end":{"line":97,"column":9}}},"12":{"name":"(anonymous_22)","decl":{"start":{"line":128,"column":30},"end":{"line":128,"column":31}},"loc":{"start":{"line":128,"column":39},"end":{"line":128,"column":null}}},"13":{"name":"(anonymous_23)","decl":{"start":{"line":131,"column":29},"end":{"line":131,"column":30}},"loc":{"start":{"line":131,"column":37},"end":{"line":131,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":70,"column":2},"end":{"line":89,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":89,"column":null}}]},"1":{"loc":{"start":{"line":73,"column":4},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":88,"column":null}}]},"2":{"loc":{"start":{"line":77,"column":10},"end":{"line":83,"column":null}},"type":"if","locations":[{"start":{"line":77,"column":10},"end":{"line":83,"column":null}},{"start":{"line":79,"column":17},"end":{"line":83,"column":null}}]},"3":{"loc":{"start":{"line":79,"column":17},"end":{"line":83,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":17},"end":{"line":83,"column":null}},{"start":{"line":81,"column":17},"end":{"line":83,"column":null}}]},"4":{"loc":{"start":{"line":102,"column":19},"end":{"line":102,"column":43}},"type":"binary-expr","locations":[{"start":{"line":102,"column":19},"end":{"line":102,"column":37}},{"start":{"line":102,"column":41},"end":{"line":102,"column":43}}]},"5":{"loc":{"start":{"line":113,"column":16},"end":{"line":113,"column":80}},"type":"binary-expr","locations":[{"start":{"line":113,"column":16},"end":{"line":113,"column":47}},{"start":{"line":113,"column":51},"end":{"line":113,"column":80}}]},"6":{"loc":{"start":{"line":120,"column":7},"end":{"line":145,"column":null}},"type":"binary-expr","locations":[{"start":{"line":120,"column":7},"end":{"line":120,"column":29}},{"start":{"line":120,"column":33},"end":{"line":120,"column":51}},{"start":{"line":120,"column":55},"end":{"line":120,"column":75}},{"start":{"line":121,"column":8},"end":{"line":144,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"b":{"0":[0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0,0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/step_render.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/step_render.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":39}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":70}},"3":{"start":{"line":7,"column":0},"end":{"line":7,"column":39}},"4":{"start":{"line":14,"column":19},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":15,"column":46}},"6":{"start":{"line":16,"column":2},"end":{"line":22,"column":null}},"7":{"start":{"line":17,"column":4},"end":{"line":21,"column":6}},"8":{"start":{"line":23,"column":20},"end":{"line":23,"column":72}},"9":{"start":{"line":25,"column":2},"end":{"line":29,"column":4}},"10":{"start":{"line":33,"column":19},"end":{"line":33,"column":25}},"11":{"start":{"line":34,"column":2},"end":{"line":38,"column":null}},"12":{"start":{"line":35,"column":4},"end":{"line":35,"column":46}},"13":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"14":{"start":{"line":41,"column":9},"end":{"line":41,"column":13}}},"fnMap":{"0":{"name":"QueryTransformStep","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":27}},"loc":{"start":{"line":13,"column":44},"end":{"line":30,"column":1}}},"1":{"name":"Step","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":13}},"loc":{"start":{"line":32,"column":30},"end":{"line":39,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":2},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":16,"column":2},"end":{"line":22,"column":null}}]},"1":{"loc":{"start":{"line":34,"column":2},"end":{"line":38,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":38,"column":null}},{"start":{"line":36,"column":9},"end":{"line":38,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":1},"f":{"0":0,"1":0},"b":{"0":[0],"1":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/styles.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/snuba_explain/styles.tsx","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":5,"column":2}},"1":{"start":{"line":28,"column":2},"end":{"line":28,"column":21}},"2":{"start":{"line":7,"column":27},"end":{"line":11,"column":2}},"3":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"4":{"start":{"line":13,"column":20},"end":{"line":16,"column":2}},"5":{"start":{"line":30,"column":2},"end":{"line":30,"column":13}},"6":{"start":{"line":18,"column":23},"end":{"line":18,"column":70}},"7":{"start":{"line":31,"column":2},"end":{"line":31,"column":18}},"8":{"start":{"line":20,"column":28},"end":{"line":25,"column":2}},"9":{"start":{"line":32,"column":2},"end":{"line":32,"column":21}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/tests/tracing/fixture.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/tests/tracing/fixture.tsx","statementMap":{"0":{"start":{"line":1,"column":25},"end":{"line":7,"column":2}},"1":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1},"f":{},"b":{}} +,"/Users/rachelchen/snuba/snuba/admin/static/tracing/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/tracing/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":69}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"3":{"start":{"line":28,"column":0},"end":{"line":28,"column":null}},"4":{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},"5":{"start":{"line":30,"column":2},"end":{"line":30,"column":null}},"6":{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},"7":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"8":{"start":{"line":33,"column":2},"end":{"line":33,"column":null}},"9":{"start":{"line":36,"column":23},"end":{"line":40,"column":2}},"10":{"start":{"line":43,"column":20},"end":{"line":43,"column":37}},"11":{"start":{"line":44,"column":2},"end":{"line":62,"column":null}},"12":{"start":{"line":48,"column":4},"end":{"line":48,"column":40}},"13":{"start":{"line":49,"column":9},"end":{"line":62,"column":null}},"14":{"start":{"line":50,"column":4},"end":{"line":50,"column":44}},"15":{"start":{"line":51,"column":9},"end":{"line":62,"column":null}},"16":{"start":{"line":54,"column":4},"end":{"line":54,"column":39}},"17":{"start":{"line":55,"column":9},"end":{"line":62,"column":null}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":42}},"19":{"start":{"line":61,"column":4},"end":{"line":61,"column":35}},"20":{"start":{"line":67,"column":19},"end":{"line":67,"column":21}},"21":{"start":{"line":68,"column":4},"end":{"line":72,"column":null}},"22":{"start":{"line":69,"column":6},"end":{"line":69,"column":53}},"23":{"start":{"line":71,"column":6},"end":{"line":71,"column":47}},"24":{"start":{"line":73,"column":4},"end":{"line":73,"column":50}},"25":{"start":{"line":77,"column":4},"end":{"line":117,"column":6}},"26":{"start":{"line":81,"column":45},"end":{"line":81,"column":47}},"27":{"start":{"line":81,"column":47},"end":{"line":81,"column":48}},"28":{"start":{"line":81,"column":53},"end":{"line":81,"column":55}},"29":{"start":{"line":81,"column":61},"end":{"line":81,"column":62}},"30":{"start":{"line":82,"column":10},"end":{"line":114,"column":null}},"31":{"start":{"line":83,"column":12},"end":{"line":93,"column":14}},"32":{"start":{"line":94,"column":17},"end":{"line":114,"column":null}},"33":{"start":{"line":95,"column":12},"end":{"line":113,"column":null}},"34":{"start":{"line":96,"column":14},"end":{"line":103,"column":16}},"35":{"start":{"line":105,"column":14},"end":{"line":112,"column":16}},"36":{"start":{"line":121,"column":39},"end":{"line":121,"column":56}},"37":{"start":{"line":123,"column":44},"end":{"line":123,"column":46}},"38":{"start":{"line":124,"column":4},"end":{"line":126,"column":null}},"39":{"start":{"line":124,"column":25},"end":{"line":124,"column":31}},"40":{"start":{"line":124,"column":25},"end":{"line":124,"column":60}},"41":{"start":{"line":124,"column":15},"end":{"line":124,"column":16}},"42":{"start":{"line":124,"column":17},"end":{"line":124,"column":19}},"43":{"start":{"line":124,"column":20},"end":{"line":124,"column":21}},"44":{"start":{"line":125,"column":6},"end":{"line":125,"column":50}},"45":{"start":{"line":128,"column":4},"end":{"line":150,"column":6}},"46":{"start":{"line":132,"column":28},"end":{"line":132,"column":47}},"47":{"start":{"line":133,"column":22},"end":{"line":133,"column":41}},"48":{"start":{"line":134,"column":10},"end":{"line":138,"column":12}},"49":{"start":{"line":143,"column":10},"end":{"line":147,"column":12}},"50":{"start":{"line":154,"column":4},"end":{"line":162,"column":6}},"51":{"start":{"line":166,"column":4},"end":{"line":184,"column":6}},"52":{"start":{"line":188,"column":4},"end":{"line":193,"column":6}},"53":{"start":{"line":197,"column":4},"end":{"line":202,"column":6}},"54":{"start":{"line":206,"column":4},"end":{"line":211,"column":6}},"55":{"start":{"line":215,"column":4},"end":{"line":220,"column":6}},"56":{"start":{"line":224,"column":20},"end":{"line":225,"column":39}},"57":{"start":{"line":226,"column":17},"end":{"line":226,"column":61}},"58":{"start":{"line":227,"column":28},"end":{"line":229,"column":12}},"59":{"start":{"line":228,"column":41},"end":{"line":228,"column":57}},"60":{"start":{"line":230,"column":29},"end":{"line":232,"column":12}},"61":{"start":{"line":231,"column":42},"end":{"line":231,"column":59}},"62":{"start":{"line":233,"column":29},"end":{"line":235,"column":12}},"63":{"start":{"line":234,"column":42},"end":{"line":234,"column":59}},"64":{"start":{"line":237,"column":6},"end":{"line":237,"column":61}},"65":{"start":{"line":238,"column":34},"end":{"line":240,"column":12}},"66":{"start":{"line":239,"column":47},"end":{"line":239,"column":69}},"67":{"start":{"line":241,"column":30},"end":{"line":243,"column":12}},"68":{"start":{"line":242,"column":43},"end":{"line":242,"column":61}},"69":{"start":{"line":244,"column":29},"end":{"line":244,"column":71}},"70":{"start":{"line":245,"column":4},"end":{"line":266,"column":6}},"71":{"start":{"line":262,"column":75},"end":{"line":262,"column":93}},"72":{"start":{"line":273,"column":16},"end":{"line":273,"column":18}},"73":{"start":{"line":274,"column":4},"end":{"line":280,"column":null}},"74":{"start":{"line":274,"column":34},"end":{"line":274,"column":40}},"75":{"start":{"line":274,"column":34},"end":{"line":274,"column":71}},"76":{"start":{"line":274,"column":15},"end":{"line":274,"column":16}},"77":{"start":{"line":274,"column":20},"end":{"line":274,"column":22}},"78":{"start":{"line":274,"column":29},"end":{"line":274,"column":30}},"79":{"start":{"line":275,"column":6},"end":{"line":279,"column":null}},"80":{"start":{"line":276,"column":8},"end":{"line":276,"column":28}},"81":{"start":{"line":278,"column":8},"end":{"line":278,"column":28}},"82":{"start":{"line":281,"column":4},"end":{"line":292,"column":6}},"83":{"start":{"line":288,"column":41},"end":{"line":288,"column":59}},"84":{"start":{"line":289,"column":38},"end":{"line":289,"column":54}},"85":{"start":{"line":295,"column":2},"end":{"line":303,"column":4}},"86":{"start":{"line":306,"column":0},"end":{"line":306,"column":30}}},"fnMap":{"0":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":0},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":20},"end":{"line":34,"column":1}}},"1":{"name":"getMessageCategory","decl":{"start":{"line":42,"column":9},"end":{"line":42,"column":27}},"loc":{"start":{"line":42,"column":44},"end":{"line":63,"column":1}}},"2":{"name":"TracingQueries","decl":{"start":{"line":65,"column":9},"end":{"line":65,"column":23}},"loc":{"start":{"line":65,"column":46},"end":{"line":304,"column":1}}},"3":{"name":"tablePopulator","decl":{"start":{"line":66,"column":11},"end":{"line":66,"column":25}},"loc":{"start":{"line":66,"column":76},"end":{"line":74,"column":3}}},"4":{"name":"tracingOutput","decl":{"start":{"line":76,"column":11},"end":{"line":76,"column":24}},"loc":{"start":{"line":76,"column":65},"end":{"line":118,"column":3}}},"5":{"name":"(anonymous_6)","decl":{"start":{"line":81,"column":38},"end":{"line":81,"column":39}},"loc":{"start":{"line":81,"column":63},"end":{"line":115,"column":9}}},"6":{"name":"rawTraceDisplay","decl":{"start":{"line":120,"column":11},"end":{"line":120,"column":26}},"loc":{"start":{"line":120,"column":87},"end":{"line":151,"column":3}}},"7":{"name":"(anonymous_8)","decl":{"start":{"line":131,"column":30},"end":{"line":131,"column":31}},"loc":{"start":{"line":131,"column":42},"end":{"line":139,"column":9}}},"8":{"name":"(anonymous_9)","decl":{"start":{"line":142,"column":25},"end":{"line":142,"column":26}},"loc":{"start":{"line":142,"column":37},"end":{"line":148,"column":9}}},"9":{"name":"indexSummary","decl":{"start":{"line":153,"column":11},"end":{"line":153,"column":23}},"loc":{"start":{"line":153,"column":43},"end":{"line":163,"column":3}}},"10":{"name":"selectSummary","decl":{"start":{"line":165,"column":11},"end":{"line":165,"column":24}},"loc":{"start":{"line":165,"column":45},"end":{"line":185,"column":3}}},"11":{"name":"streamSummary","decl":{"start":{"line":187,"column":11},"end":{"line":187,"column":24}},"loc":{"start":{"line":187,"column":45},"end":{"line":194,"column":3}}},"12":{"name":"aggregationSummary","decl":{"start":{"line":196,"column":11},"end":{"line":196,"column":29}},"loc":{"start":{"line":196,"column":55},"end":{"line":203,"column":3}}},"13":{"name":"sortingSummary","decl":{"start":{"line":205,"column":11},"end":{"line":205,"column":25}},"loc":{"start":{"line":205,"column":47},"end":{"line":212,"column":3}}},"14":{"name":"executeSummary","decl":{"start":{"line":214,"column":11},"end":{"line":214,"column":25}},"loc":{"start":{"line":214,"column":47},"end":{"line":221,"column":3}}},"15":{"name":"querySummary","decl":{"start":{"line":223,"column":11},"end":{"line":223,"column":23}},"loc":{"start":{"line":223,"column":43},"end":{"line":267,"column":3}}},"16":{"name":"(anonymous_17)","decl":{"start":{"line":228,"column":34},"end":{"line":228,"column":35}},"loc":{"start":{"line":228,"column":36},"end":{"line":228,"column":53}}},"17":{"name":"(anonymous_18)","decl":{"start":{"line":231,"column":35},"end":{"line":231,"column":36}},"loc":{"start":{"line":231,"column":37},"end":{"line":231,"column":55}}},"18":{"name":"(anonymous_19)","decl":{"start":{"line":234,"column":35},"end":{"line":234,"column":36}},"loc":{"start":{"line":234,"column":37},"end":{"line":234,"column":55}}},"19":{"name":"(anonymous_20)","decl":{"start":{"line":239,"column":40},"end":{"line":239,"column":41}},"loc":{"start":{"line":239,"column":42},"end":{"line":239,"column":65}}},"20":{"name":"(anonymous_21)","decl":{"start":{"line":242,"column":36},"end":{"line":242,"column":37}},"loc":{"start":{"line":242,"column":38},"end":{"line":242,"column":57}}},"21":{"name":"(anonymous_22)","decl":{"start":{"line":262,"column":68},"end":{"line":262,"column":69}},"loc":{"start":{"line":262,"column":70},"end":{"line":262,"column":89}}},"22":{"name":"summarizedTraceDisplay","decl":{"start":{"line":269,"column":11},"end":{"line":269,"column":33}},"loc":{"start":{"line":270,"column":25},"end":{"line":293,"column":3}}},"23":{"name":"(anonymous_24)","decl":{"start":{"line":288,"column":20},"end":{"line":288,"column":21}},"loc":{"start":{"line":288,"column":36},"end":{"line":288,"column":42}}},"24":{"name":"(anonymous_25)","decl":{"start":{"line":289,"column":17},"end":{"line":289,"column":18}},"loc":{"start":{"line":289,"column":33},"end":{"line":289,"column":50}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":5},"end":{"line":28,"column":null}},"type":"binary-expr","locations":[{"start":{"line":28,"column":5},"end":{"line":28,"column":20}},{"start":{"line":28,"column":5},"end":{"line":28,"column":null}}]},"1":{"loc":{"start":{"line":44,"column":2},"end":{"line":62,"column":null}},"type":"if","locations":[{"start":{"line":44,"column":2},"end":{"line":62,"column":null}},{"start":{"line":49,"column":9},"end":{"line":62,"column":null}}]},"2":{"loc":{"start":{"line":45,"column":4},"end":{"line":46,"column":39}},"type":"binary-expr","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":71}},{"start":{"line":46,"column":4},"end":{"line":46,"column":39}}]},"3":{"loc":{"start":{"line":49,"column":9},"end":{"line":62,"column":null}},"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":62,"column":null}},{"start":{"line":51,"column":9},"end":{"line":62,"column":null}}]},"4":{"loc":{"start":{"line":51,"column":9},"end":{"line":62,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":9},"end":{"line":62,"column":null}},{"start":{"line":55,"column":9},"end":{"line":62,"column":null}}]},"5":{"loc":{"start":{"line":55,"column":9},"end":{"line":62,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":9},"end":{"line":62,"column":null}},{"start":{"line":60,"column":9},"end":{"line":62,"column":null}}]},"6":{"loc":{"start":{"line":56,"column":4},"end":{"line":57,"column":76}},"type":"binary-expr","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":36}},{"start":{"line":57,"column":5},"end":{"line":57,"column":37}},{"start":{"line":57,"column":41},"end":{"line":57,"column":75}}]},"7":{"loc":{"start":{"line":68,"column":4},"end":{"line":72,"column":null}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":72,"column":null}},{"start":{"line":70,"column":11},"end":{"line":72,"column":null}}]},"8":{"loc":{"start":{"line":82,"column":10},"end":{"line":114,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":10},"end":{"line":114,"column":null}},{"start":{"line":94,"column":17},"end":{"line":114,"column":null}}]},"9":{"loc":{"start":{"line":94,"column":17},"end":{"line":114,"column":null}},"type":"if","locations":[{"start":{"line":94,"column":17},"end":{"line":114,"column":null}}]},"10":{"loc":{"start":{"line":95,"column":12},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":95,"column":12},"end":{"line":113,"column":null}},{"start":{"line":104,"column":19},"end":{"line":113,"column":null}}]},"11":{"loc":{"start":{"line":224,"column":20},"end":{"line":225,"column":39}},"type":"cond-expr","locations":[{"start":{"line":225,"column":6},"end":{"line":225,"column":32}},{"start":{"line":225,"column":35},"end":{"line":225,"column":39}}]},"12":{"loc":{"start":{"line":226,"column":17},"end":{"line":226,"column":61}},"type":"cond-expr","locations":[{"start":{"line":226,"column":40},"end":{"line":226,"column":56}},{"start":{"line":226,"column":59},"end":{"line":226,"column":61}}]},"13":{"loc":{"start":{"line":227,"column":28},"end":{"line":229,"column":12}},"type":"cond-expr","locations":[{"start":{"line":228,"column":8},"end":{"line":228,"column":57}},{"start":{"line":229,"column":8},"end":{"line":229,"column":12}}]},"14":{"loc":{"start":{"line":230,"column":29},"end":{"line":232,"column":12}},"type":"cond-expr","locations":[{"start":{"line":231,"column":8},"end":{"line":231,"column":59}},{"start":{"line":232,"column":8},"end":{"line":232,"column":12}}]},"15":{"loc":{"start":{"line":233,"column":29},"end":{"line":235,"column":12}},"type":"cond-expr","locations":[{"start":{"line":234,"column":8},"end":{"line":234,"column":59}},{"start":{"line":235,"column":8},"end":{"line":235,"column":12}}]},"16":{"loc":{"start":{"line":237,"column":6},"end":{"line":237,"column":61}},"type":"binary-expr","locations":[{"start":{"line":237,"column":6},"end":{"line":237,"column":21}},{"start":{"line":237,"column":25},"end":{"line":237,"column":41}},{"start":{"line":237,"column":45},"end":{"line":237,"column":61}}]},"17":{"loc":{"start":{"line":238,"column":34},"end":{"line":240,"column":12}},"type":"cond-expr","locations":[{"start":{"line":239,"column":8},"end":{"line":239,"column":69}},{"start":{"line":240,"column":8},"end":{"line":240,"column":12}}]},"18":{"loc":{"start":{"line":241,"column":30},"end":{"line":243,"column":12}},"type":"cond-expr","locations":[{"start":{"line":242,"column":8},"end":{"line":242,"column":61}},{"start":{"line":243,"column":8},"end":{"line":243,"column":12}}]},"19":{"loc":{"start":{"line":244,"column":29},"end":{"line":244,"column":71}},"type":"binary-expr","locations":[{"start":{"line":244,"column":29},"end":{"line":244,"column":50}},{"start":{"line":244,"column":54},"end":{"line":244,"column":71}}]},"20":{"loc":{"start":{"line":249,"column":39},"end":{"line":249,"column":72}},"type":"cond-expr","locations":[{"start":{"line":249,"column":49},"end":{"line":249,"column":64}},{"start":{"line":249,"column":67},"end":{"line":249,"column":72}}]},"21":{"loc":{"start":{"line":254,"column":13},"end":{"line":254,"column":71}},"type":"cond-expr","locations":[{"start":{"line":254,"column":30},"end":{"line":254,"column":64}},{"start":{"line":254,"column":67},"end":{"line":254,"column":71}}]},"22":{"loc":{"start":{"line":258,"column":13},"end":{"line":258,"column":75}},"type":"cond-expr","locations":[{"start":{"line":258,"column":32},"end":{"line":258,"column":68}},{"start":{"line":258,"column":71},"end":{"line":258,"column":75}}]},"23":{"loc":{"start":{"line":262,"column":13},"end":{"line":262,"column":93}},"type":"binary-expr","locations":[{"start":{"line":262,"column":13},"end":{"line":262,"column":36}},{"start":{"line":262,"column":40},"end":{"line":262,"column":93}}]},"24":{"loc":{"start":{"line":275,"column":6},"end":{"line":279,"column":null}},"type":"if","locations":[{"start":{"line":275,"column":6},"end":{"line":279,"column":null}},{"start":{"line":277,"column":13},"end":{"line":279,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":6,"86":2},"f":{"0":2,"1":0,"2":6,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},"b":{"0":[2,2],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0,0],"7":[0,0],"8":[0,0],"9":[0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/tracing/query_display.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/tracing/query_display.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":12,"column":0},"end":{"line":12,"column":50}},"3":{"start":{"line":13,"column":0},"end":{"line":13,"column":41}},"4":{"start":{"line":14,"column":0},"end":{"line":14,"column":60}},"5":{"start":{"line":15,"column":0},"end":{"line":15,"column":78}},"6":{"start":{"line":16,"column":0},"end":{"line":16,"column":70}},"7":{"start":{"line":21,"column":20},"end":{"line":21,"column":37}},"8":{"start":{"line":30,"column":34},"end":{"line":30,"column":56}},"9":{"start":{"line":30,"column":17},"end":{"line":30,"column":19}},"10":{"start":{"line":30,"column":30},"end":{"line":30,"column":34}},"11":{"start":{"line":31,"column":28},"end":{"line":33,"column":4}},"12":{"start":{"line":31,"column":14},"end":{"line":31,"column":16}},"13":{"start":{"line":31,"column":24},"end":{"line":31,"column":28}},"14":{"start":{"line":34,"column":54},"end":{"line":35,"column":null}},"15":{"start":{"line":34,"column":27},"end":{"line":34,"column":29}},"16":{"start":{"line":34,"column":50},"end":{"line":34,"column":54}},"17":{"start":{"line":37,"column":44},"end":{"line":37,"column":67}},"18":{"start":{"line":37,"column":22},"end":{"line":37,"column":24}},"19":{"start":{"line":37,"column":40},"end":{"line":37,"column":44}},"20":{"start":{"line":39,"column":2},"end":{"line":43,"column":9}},"21":{"start":{"line":40,"column":4},"end":{"line":42,"column":7}},"22":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"23":{"start":{"line":41,"column":33},"end":{"line":41,"column":48}},"24":{"start":{"line":46,"column":4},"end":{"line":51,"column":7}},"25":{"start":{"line":47,"column":6},"end":{"line":49,"column":null}},"26":{"start":{"line":55,"column":4},"end":{"line":75,"column":9}},"27":{"start":{"line":58,"column":31},"end":{"line":69,"column":10}},"28":{"start":{"line":70,"column":8},"end":{"line":70,"column":54}},"29":{"start":{"line":71,"column":8},"end":{"line":74,"column":11}},"30":{"start":{"line":71,"column":47},"end":{"line":73,"column":null}},"31":{"start":{"line":79,"column":4},"end":{"line":84,"column":7}},"32":{"start":{"line":80,"column":6},"end":{"line":82,"column":null}},"33":{"start":{"line":85,"column":4},"end":{"line":85,"column":23}},"34":{"start":{"line":89,"column":4},"end":{"line":89,"column":47}},"35":{"start":{"line":92,"column":2},"end":{"line":158,"column":4}},"36":{"start":{"line":97,"column":10},"end":{"line":97,"column":30}},"37":{"start":{"line":119,"column":12},"end":{"line":119,"column":null}},"38":{"start":{"line":128,"column":59},"end":{"line":153,"column":12}},"39":{"start":{"line":132,"column":33},"end":{"line":132,"column":null}},"40":{"start":{"line":136,"column":39},"end":{"line":136,"column":null}},"41":{"start":{"line":161,"column":28},"end":{"line":165,"column":2}},"42":{"start":{"line":167,"column":20},"end":{"line":170,"column":2}},"43":{"start":{"line":171,"column":0},"end":{"line":171,"column":28}}},"fnMap":{"0":{"name":"QueryDisplay","decl":{"start":{"line":22,"column":9},"end":{"line":22,"column":21}},"loc":{"start":{"line":29,"column":1},"end":{"line":159,"column":1}}},"1":{"name":"(anonymous_11)","decl":{"start":{"line":39,"column":12},"end":{"line":39,"column":null}},"loc":{"start":{"line":39,"column":12},"end":{"line":43,"column":3}}},"2":{"name":"(anonymous_12)","decl":{"start":{"line":40,"column":40},"end":{"line":40,"column":41}},"loc":{"start":{"line":40,"column":44},"end":{"line":42,"column":5}}},"3":{"name":"(anonymous_13)","decl":{"start":{"line":41,"column":26},"end":{"line":41,"column":27}},"loc":{"start":{"line":41,"column":28},"end":{"line":41,"column":34}}},"4":{"name":"updateQuerySql","decl":{"start":{"line":45,"column":11},"end":{"line":45,"column":25}},"loc":{"start":{"line":45,"column":37},"end":{"line":52,"column":3}}},"5":{"name":"(anonymous_15)","decl":{"start":{"line":46,"column":13},"end":{"line":46,"column":14}},"loc":{"start":{"line":46,"column":23},"end":{"line":51,"column":5}}},"6":{"name":"executeQuery","decl":{"start":{"line":54,"column":11},"end":{"line":54,"column":23}},"loc":{"start":{"line":54,"column":23},"end":{"line":76,"column":3}}},"7":{"name":"(anonymous_17)","decl":{"start":{"line":57,"column":12},"end":{"line":57,"column":13}},"loc":{"start":{"line":57,"column":19},"end":{"line":75,"column":7}}},"8":{"name":"(anonymous_18)","decl":{"start":{"line":71,"column":30},"end":{"line":71,"column":31}},"loc":{"start":{"line":71,"column":42},"end":{"line":71,"column":null}}},"9":{"name":"selectStorage","decl":{"start":{"line":78,"column":11},"end":{"line":78,"column":24}},"loc":{"start":{"line":78,"column":40},"end":{"line":86,"column":3}}},"10":{"name":"(anonymous_20)","decl":{"start":{"line":79,"column":13},"end":{"line":79,"column":14}},"loc":{"start":{"line":79,"column":23},"end":{"line":84,"column":5}}},"11":{"name":"copyText","decl":{"start":{"line":88,"column":11},"end":{"line":88,"column":19}},"loc":{"start":{"line":88,"column":32},"end":{"line":90,"column":3}}},"12":{"name":"(anonymous_22)","decl":{"start":{"line":96,"column":23},"end":{"line":96,"column":24}},"loc":{"start":{"line":96,"column":27},"end":{"line":98,"column":9}}},"13":{"name":"(anonymous_23)","decl":{"start":{"line":118,"column":20},"end":{"line":118,"column":21}},"loc":{"start":{"line":118,"column":61},"end":{"line":119,"column":28}}},"14":{"name":"(anonymous_24)","decl":{"start":{"line":128,"column":42},"end":{"line":128,"column":43}},"loc":{"start":{"line":128,"column":54},"end":{"line":128,"column":null}}},"15":{"name":"(anonymous_25)","decl":{"start":{"line":132,"column":27},"end":{"line":132,"column":33}},"loc":{"start":{"line":132,"column":27},"end":{"line":132,"column":41}}},"16":{"name":"(anonymous_26)","decl":{"start":{"line":136,"column":33},"end":{"line":136,"column":39}},"loc":{"start":{"line":136,"column":33},"end":{"line":136,"column":47}}}},"branchMap":{"0":{"loc":{"start":{"line":103,"column":19},"end":{"line":103,"column":38}},"type":"binary-expr","locations":[{"start":{"line":103,"column":19},"end":{"line":103,"column":32}},{"start":{"line":103,"column":36},"end":{"line":103,"column":38}}]},"1":{"loc":{"start":{"line":111,"column":20},"end":{"line":111,"column":48}},"type":"binary-expr","locations":[{"start":{"line":111,"column":20},"end":{"line":111,"column":34}},{"start":{"line":111,"column":38},"end":{"line":111,"column":48}}]},"2":{"loc":{"start":{"line":132,"column":42},"end":{"line":132,"column":72}},"type":"binary-expr","locations":[{"start":{"line":132,"column":42},"end":{"line":132,"column":66}},{"start":{"line":132,"column":70},"end":{"line":132,"column":72}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":6,"9":6,"10":6,"11":6,"12":6,"13":6,"14":6,"15":6,"16":6,"17":6,"18":6,"19":6,"20":6,"21":1,"22":1,"23":1,"24":4,"25":4,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":6,"36":4,"37":0,"38":0,"39":0,"40":0,"41":2,"42":2,"43":2},"f":{"0":6,"1":1,"2":1,"3":1,"4":4,"5":4,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":4,"13":0,"14":0,"15":0,"16":0},"b":{"0":[6,6],"1":[6,0],"2":[0,0]}} +,"/Users/rachelchen/snuba/snuba/admin/static/utils/execute_button.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/utils/execute_button.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"2":{"start":{"line":10,"column":40},"end":{"line":10,"column":64}},"3":{"start":{"line":10,"column":20},"end":{"line":10,"column":22}},"4":{"start":{"line":10,"column":36},"end":{"line":10,"column":40}},"5":{"start":{"line":12,"column":14},"end":{"line":12,"column":44}},"6":{"start":{"line":14,"column":23},"end":{"line":17,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":30}},"8":{"start":{"line":16,"column":4},"end":{"line":16,"column":46}},"9":{"start":{"line":18,"column":22},"end":{"line":18,"column":51}},"10":{"start":{"line":21,"column":4},"end":{"line":23,"column":null}},"11":{"start":{"line":22,"column":6},"end":{"line":22,"column":49}},"12":{"start":{"line":24,"column":4},"end":{"line":24,"column":25}},"13":{"start":{"line":25,"column":4},"end":{"line":32,"column":9}},"14":{"start":{"line":28,"column":8},"end":{"line":28,"column":27}},"15":{"start":{"line":31,"column":8},"end":{"line":31,"column":30}},"16":{"start":{"line":35,"column":2},"end":{"line":48,"column":4}},"17":{"start":{"line":39,"column":10},"end":{"line":39,"column":31}},"18":{"start":{"line":40,"column":10},"end":{"line":40,"column":25}},"19":{"start":{"line":51,"column":0},"end":{"line":51,"column":29}}},"fnMap":{"0":{"name":"ExecuteButton","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"loc":{"start":{"line":9,"column":1},"end":{"line":49,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":14,"column":23},"end":{"line":14,"column":24}},"loc":{"start":{"line":14,"column":32},"end":{"line":17,"column":3}}},"2":{"name":"executeQuery","decl":{"start":{"line":20,"column":11},"end":{"line":20,"column":23}},"loc":{"start":{"line":20,"column":23},"end":{"line":33,"column":3}}},"3":{"name":"(anonymous_9)","decl":{"start":{"line":27,"column":13},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":22},"end":{"line":29,"column":7}}},"4":{"name":"(anonymous_10)","decl":{"start":{"line":30,"column":15},"end":{"line":30,"column":null}},"loc":{"start":{"line":30,"column":15},"end":{"line":32,"column":7}}},"5":{"name":"(anonymous_11)","decl":{"start":{"line":38,"column":17},"end":{"line":38,"column":18}},"loc":{"start":{"line":38,"column":26},"end":{"line":41,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":14},"end":{"line":12,"column":44}},"type":"binary-expr","locations":[{"start":{"line":12,"column":14},"end":{"line":12,"column":25}},{"start":{"line":12,"column":29},"end":{"line":12,"column":44}}]},"1":{"loc":{"start":{"line":18,"column":22},"end":{"line":18,"column":51}},"type":"binary-expr","locations":[{"start":{"line":18,"column":22},"end":{"line":18,"column":35}},{"start":{"line":18,"column":39},"end":{"line":18,"column":51}}]},"2":{"loc":{"start":{"line":21,"column":4},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":23,"column":null}}]},"3":{"loc":{"start":{"line":43,"column":18},"end":{"line":43,"column":47}},"type":"binary-expr","locations":[{"start":{"line":43,"column":18},"end":{"line":43,"column":29}},{"start":{"line":43,"column":33},"end":{"line":43,"column":47}}]}},"s":{"0":3,"1":3,"2":11,"3":11,"4":11,"5":11,"6":11,"7":0,"8":0,"9":11,"10":2,"11":0,"12":2,"13":2,"14":0,"15":1,"16":11,"17":2,"18":2,"19":3},"f":{"0":11,"1":0,"2":2,"3":0,"4":1,"5":2},"b":{"0":[11,11],"1":[11,11],"2":[0],"3":[11,9]}} +,"/Users/rachelchen/snuba/snuba/admin/static/welcome/index.tsx": {"path":"/Users/rachelchen/snuba/snuba/admin/static/welcome/index.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":5,"column":42},"end":{"line":5,"column":64}},"2":{"start":{"line":5,"column":21},"end":{"line":5,"column":23}},"3":{"start":{"line":5,"column":38},"end":{"line":5,"column":42}},"4":{"start":{"line":7,"column":2},"end":{"line":11,"column":9}},"5":{"start":{"line":8,"column":4},"end":{"line":10,"column":7}},"6":{"start":{"line":9,"column":6},"end":{"line":9,"column":27}},"7":{"start":{"line":14,"column":4},"end":{"line":35,"column":6}},"8":{"start":{"line":23,"column":40},"end":{"line":32,"column":12}},"9":{"start":{"line":38,"column":2},"end":{"line":38,"column":29}},"10":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}}},"fnMap":{"0":{"name":"Welcome","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":16}},"loc":{"start":{"line":4,"column":39},"end":{"line":39,"column":1}}},"1":{"name":"(anonymous_7)","decl":{"start":{"line":7,"column":12},"end":{"line":7,"column":null}},"loc":{"start":{"line":7,"column":12},"end":{"line":11,"column":3}}},"2":{"name":"(anonymous_8)","decl":{"start":{"line":8,"column":37},"end":{"line":8,"column":38}},"loc":{"start":{"line":8,"column":41},"end":{"line":10,"column":5}}},"3":{"name":"urls","decl":{"start":{"line":13,"column":11},"end":{"line":13,"column":15}},"loc":{"start":{"line":13,"column":15},"end":{"line":36,"column":3}}},"4":{"name":"(anonymous_10)","decl":{"start":{"line":23,"column":28},"end":{"line":23,"column":29}},"loc":{"start":{"line":23,"column":35},"end":{"line":23,"column":null}}}},"branchMap":{},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{}} +} diff --git a/snuba/admin/coverage/lcov-report/base.css b/snuba/admin/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/snuba/admin/coverage/lcov-report/block-navigation.js b/snuba/admin/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/snuba/admin/coverage/lcov-report/favicon.png b/snuba/admin/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/snuba/admin/coverage/lcov-report/favicon.png differ diff --git a/snuba/admin/coverage/lcov-report/index.html b/snuba/admin/coverage/lcov-report/index.html new file mode 100644 index 0000000000..98d95521fa --- /dev/null +++ b/snuba/admin/coverage/lcov-report/index.html @@ -0,0 +1,400 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 36.61% + Statements + 614/1677 +
+ + +
+ 20.45% + Branches + 126/616 +
+ + +
+ 17.7% + Functions + 97/548 +
+ + +
+ 38.89% + Lines + 555/1427 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
static +
+
49.26%168/34138.92%65/16726.44%32/12148.87%152/311
static/auto_replacements_bypass_projects +
+
18.75%3/160%0/10%0/425%3/12
static/capacity_management +
+
90.5%143/15889.79%44/4976.78%43/5690.15%119/132
static/cardinality_analyzer +
+
44.3%35/7940%4/1018.51%5/2748.57%34/70
static/clickhouse_migrations +
+
10.73%16/1491.37%2/1452.04%1/4913.67%16/117
static/clickhouse_queries +
+
26.47%27/1020%0/170%0/3730.33%27/89
static/common/components +
+
34.28%12/350%0/40%0/638.7%12/31
static/dead_letter_queue +
+
16.12%10/620%0/240%0/1420.83%10/48
static/delete_tool +
+
4.44%2/450%0/80%0/136.06%2/33
static/kafka +
+
100%9/9100%0/0100%3/3100%7/7
static/mql_queries +
+
22.47%20/890%0/280%0/2827.39%20/73
static/production_queries +
+
24.05%19/790%0/250%0/3028.35%19/67
static/querylog +
+
24%18/750%0/90%0/2928.12%18/64
static/runtime_config +
+
14.83%23/1550%0/420%0/4814.39%19/132
static/snql_to_sql +
+
42.55%20/470%0/60%0/1448.71%19/39
static/snuba_explain +
+
36.11%26/720%0/170%0/1640%26/65
static/tests/tracing +
+
100%2/2100%0/0100%0/0100%2/2
static/tracing +
+
32.82%43/1318.77%5/5721.42%9/4231.48%34/108
static/utils +
+
80%16/2085.71%6/766.66%4/677.77%14/18
static/welcome +
+
18.18%2/11100%0/00%0/522.22%2/9
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/prettify.css b/snuba/admin/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/snuba/admin/coverage/lcov-report/prettify.js b/snuba/admin/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/snuba/admin/coverage/lcov-report/sort-arrow-sprite.png b/snuba/admin/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/snuba/admin/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/snuba/admin/coverage/lcov-report/sorter.js b/snuba/admin/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/snuba/admin/coverage/lcov-report/sorter.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if ( + row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()) + ) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/snuba/admin/coverage/lcov-report/static/api_client.tsx.html b/snuba/admin/coverage/lcov-report/static/api_client.tsx.html new file mode 100644 index 0000000000..2e1bbedbdf --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/api_client.tsx.html @@ -0,0 +1,1635 @@ + + + + + + Code coverage report for static/api_client.tsx + + + + + + + + + +
+
+

All files / static api_client.tsx

+
+ +
+ 1.88% + Statements + 3/159 +
+ + +
+ 0% + Branches + 0/83 +
+ + +
+ 1.23% + Functions + 1/81 +
+ + +
+ 2.01% + Lines + 3/149 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x + 
import { AllowedTools, Settings } from "SnubaAdmin/types";
+ 
+import {
+  Config,
+  ConfigKey,
+  ConfigValue,
+  ConfigChange,
+  ConfigDescription,
+  ConfigDescriptions,
+} from "SnubaAdmin/runtime_config/types";
+ 
+import {
+  ClickhouseNodeData,
+  QueryRequest,
+  QueryResult,
+  PredefinedQuery,
+} from "SnubaAdmin/clickhouse_queries/types";
+import {
+  MigrationGroupResult,
+  RunMigrationRequest,
+  RunMigrationResult,
+} from "SnubaAdmin/clickhouse_migrations/types";
+import { TracingRequest, TracingResult } from "SnubaAdmin/tracing/types";
+import { MQLRequest } from "SnubaAdmin/mql_queries/types";
+import {
+  SnQLRequest,
+  SnQLResult,
+  SnubaDatasetName,
+} from "SnubaAdmin/snql_to_sql/types";
+ 
+import { KafkaTopicData } from "SnubaAdmin/kafka/types";
+import { QuerylogRequest, QuerylogResult } from "SnubaAdmin/querylog/types";
+import {
+  CardinalityQueryRequest,
+  CardinalityQueryResult,
+} from "SnubaAdmin/cardinality_analyzer/types";
+ 
+import { AllocationPolicy } from "SnubaAdmin/capacity_management/types";
+ 
+import { ReplayInstruction, Topic } from "SnubaAdmin/dead_letter_queue/types";
+import { AutoReplacementsBypassProjectsData } from "SnubaAdmin/auto_replacements_bypass_projects/types";
+ 
+interface Client {
+  getSettings: () => Promise<Settings>;
+  getConfigs: () => Promise<Config[]>;
+  getAutoReplacementsBypassProjects: () => Promise<
+    AutoReplacementsBypassProjectsData[]
+  >;
+  createNewConfig: (
+    key: ConfigKey,
+    value: ConfigValue,
+    description: ConfigDescription
+  ) => Promise<Config>;
+  deleteConfig: (key: ConfigKey, keepDescription: boolean) => Promise<void>;
+  editConfig: (
+    key: ConfigKey,
+    value: ConfigValue,
+    description: ConfigDescription
+  ) => Promise<Config>;
+  getDescriptions: () => Promise<ConfigDescriptions>;
+  getAuditlog: () => Promise<ConfigChange[]>;
+  getClickhouseNodes: () => Promise<[ClickhouseNodeData]>;
+  getSnubaDatasetNames: () => Promise<SnubaDatasetName[]>;
+  getAllowedProjects: () => Promise<string[]>;
+  executeSnQLQuery: (query: SnQLRequest) => Promise<any>;
+  executeMQLQuery: (query: MQLRequest) => Promise<any>;
+  debugSnQLQuery: (query: SnQLRequest) => Promise<SnQLResult>;
+  getPredefinedQueryOptions: () => Promise<[PredefinedQuery]>;
+  executeSystemQuery: (req: QueryRequest) => Promise<QueryResult>;
+  executeTracingQuery: (req: TracingRequest) => Promise<TracingResult>;
+  getKafkaData: () => Promise<KafkaTopicData[]>;
+  getPredefinedQuerylogOptions: () => Promise<[PredefinedQuery]>;
+  getQuerylogSchema: () => Promise<QuerylogResult>;
+  executeQuerylogQuery: (req: QuerylogRequest) => Promise<QuerylogResult>;
+  getPredefinedCardinalityQueryOptions: () => Promise<[PredefinedQuery]>;
+  executeCardinalityQuery: (
+    req: CardinalityQueryRequest
+  ) => Promise<CardinalityQueryResult>;
+  getAllMigrationGroups: () => Promise<MigrationGroupResult[]>;
+  runMigration: (req: RunMigrationRequest) => Promise<RunMigrationResult>;
+  getAllowedTools: () => Promise<AllowedTools>;
+  getStoragesWithAllocationPolicies: () => Promise<string[]>;
+  getAllocationPolicies: (storage: string) => Promise<AllocationPolicy[]>;
+  setAllocationPolicyConfig: (
+    storage: string,
+    policy: string,
+    key: string,
+    value: string,
+    params: object
+  ) => Promise<void>;
+  deleteAllocationPolicyConfig: (
+    storage: string,
+    policy: string,
+    key: string,
+    params: object
+  ) => Promise<void>;
+  getDlqTopics: () => Promise<Topic[]>;
+  getDlqInstruction: () => Promise<ReplayInstruction | null>;
+  setDlqInstruction: (
+    topic: Topic,
+    instruction: ReplayInstruction
+  ) => Promise<ReplayInstruction | null>;
+  clearDlqInstruction: () => Promise<ReplayInstruction | null>;
+  getAdminRegions: () => Promise<string[]>;
+  runLightweightDelete: (
+    storage_name: string,
+    column_conditions: object
+  ) => Promise<Response>;
+}
+ 
+function Client() {
+  const baseUrl = "/";
+ 
+  return {
+    getSettings: () => {
+      const url = baseUrl + "settings";
+      return fetch(url).then((resp) => resp.json());
+    },
+    getConfigs: () => {
+      const url = baseUrl + "configs";
+      return fetch(url).then((resp) => resp.json());
+    },
+    getAutoReplacementsBypassProjects: () => {
+      const url = baseUrl + "auto-replacements-bypass-projects";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+    createNewConfig: (
+      key: ConfigKey,
+      value: ConfigValue,
+      description: ConfigDescription
+    ) => {
+      const url = baseUrl + "configs";
+      const params = { key, value, description };
+ 
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(params),
+      }).then((res) => {
+        if (res.ok) {
+          return Promise.resolve(res.json());
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error || "Could not create config";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+    deleteConfig: (key: ConfigKey, keepDescription: boolean) => {
+      const url =
+        baseUrl +
+        "configs/" +
+        encodeURIComponent(key) +
+        (keepDescription ? "?keepDescription=true" : "");
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "DELETE",
+      }).then((res) => {
+        if (res.ok) {
+          return;
+        } else {
+          throw new Error("Could not delete config");
+        }
+      });
+    },
+    editConfig: (
+      key: ConfigKey,
+      value: ConfigValue,
+      description: ConfigDescription
+    ) => {
+      const url = baseUrl + "configs/" + encodeURIComponent(key);
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "PUT",
+        body: JSON.stringify({ value, description }),
+      }).then((res) => {
+        if (res.ok) {
+          return Promise.resolve(res.json());
+        } else {
+          throw new Error("Could not edit config");
+        }
+      });
+    },
+    getDescriptions: () => {
+      const url = baseUrl + "all_config_descriptions";
+      return fetch(url).then((resp) => resp.json());
+    },
+    getAuditlog: () => {
+      const url = baseUrl + "config_auditlog";
+      return fetch(url).then((resp) => resp.json());
+    },
+    getClickhouseNodes: () => {
+      const url = baseUrl + "clickhouse_nodes";
+      return fetch(url)
+        .then((resp) => resp.json())
+        .then((res) => {
+          return res.filter(
+            (storage: any) =>
+              storage.local_nodes.length > 0 ||
+              storage.dist_nodes.length > 0 ||
+              storage.query_node
+          );
+        });
+    },
+ 
+    getSnubaDatasetNames: () => {
+      const url = baseUrl + "snuba_datasets";
+      return fetch(url).then((resp) => resp.json());
+    },
+ 
+    getAllowedProjects: () => {
+      const url = baseUrl + "allowed_projects";
+      return fetch(url).then((resp) => resp.json());
+    },
+ 
+    getAdminRegions: () => {
+      const url = baseUrl + "admin_regions";
+      return fetch(url).then((resp) => resp.json());
+    },
+ 
+    debugSnQLQuery: (query: SnQLRequest) => {
+      const url = baseUrl + "snuba_debug";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((res) => {
+        if (res.ok) {
+          return Promise.resolve(res.json());
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error.message || "Could not convert SnQL";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+ 
+    executeSnQLQuery: (query: SnQLRequest) => {
+      const url = baseUrl + "production_snql_query";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((res) => {
+        if (res.ok) {
+          return Promise.resolve(res.json());
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error.message || "Could not execute SnQL";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+ 
+    executeMQLQuery: (query: MQLRequest) => {
+      const url = baseUrl + "production_mql_query";
+      query.dataset = "generic_metrics";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((res) => {
+        if (res.ok) {
+          return Promise.resolve(res.json());
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error.message || "Could not execute SnQL";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+ 
+    getPredefinedQueryOptions: () => {
+      const url = baseUrl + "clickhouse_queries";
+      return fetch(url).then((resp) => resp.json());
+    },
+    executeSystemQuery: (query: QueryRequest) => {
+      const url = baseUrl + "run_clickhouse_system_query";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+    executeTracingQuery: (query: TracingRequest) => {
+      const url = baseUrl + "clickhouse_trace_query";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+    getKafkaData: () => {
+      const url = baseUrl + "kafka";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+ 
+    getPredefinedQuerylogOptions: () => {
+      const url = baseUrl + "querylog_queries";
+      return fetch(url).then((resp) => resp.json());
+    },
+    getQuerylogSchema: () => {
+      const url = baseUrl + "clickhouse_querylog_schema";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+    executeQuerylogQuery: (query: QuerylogRequest) => {
+      const url = baseUrl + "clickhouse_querylog_query";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+    getPredefinedCardinalityQueryOptions: () => {
+      const url = baseUrl + "cardinality_queries";
+      return fetch(url).then((resp) => resp.json());
+    },
+    executeCardinalityQuery: (query: CardinalityQueryRequest) => {
+      const url = baseUrl + "cardinality_query";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(query),
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+    getAllMigrationGroups: () => {
+      const url = baseUrl + "migrations/groups";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+ 
+    runMigration: (req: RunMigrationRequest) => {
+      const params = new URLSearchParams({
+        force: (req.force || false).toString(),
+        fake: (req.fake || false).toString(),
+        dry_run: (req.dry_run || false).toString(),
+      });
+      const url: string = `/migrations/${req.group}/${req.action}/${req.migration_id}?`;
+      return fetch(url + params, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify(params),
+      }).then((resp) => {
+        if (resp.ok) {
+          return resp.json();
+        } else {
+          return resp.json().then(Promise.reject.bind(Promise));
+        }
+      });
+    },
+ 
+    getAllowedTools: () => {
+      const url = baseUrl + "tools";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+ 
+    getStoragesWithAllocationPolicies: () => {
+      const url = baseUrl + "storages_with_allocation_policies";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+    getAllocationPolicies: (storage: string) => {
+      const url =
+        baseUrl + "allocation_policy_configs/" + encodeURIComponent(storage);
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+    setAllocationPolicyConfig: (
+      storage: string,
+      policy: string,
+      key: string,
+      value: string,
+      params: object
+    ) => {
+      const url = baseUrl + "allocation_policy_config";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify({ storage, policy, key, value, params }),
+      }).then((res) => {
+        if (res.ok) {
+          return;
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error || "Could not set config";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+    deleteAllocationPolicyConfig: (
+      storage: string,
+      policy: string,
+      key: string,
+      params: object
+    ) => {
+      const url = baseUrl + "allocation_policy_config";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "DELETE",
+        body: JSON.stringify({ storage, policy, key, params }),
+      }).then((res) => {
+        if (res.ok) {
+          return;
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error || "Could not delete config";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+    getDlqTopics: () => {
+      const url = baseUrl + "dead_letter_queue";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+    getDlqInstruction: () => {
+      const url = baseUrl + "dead_letter_queue/replay";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+      }).then((resp) => resp.json());
+    },
+    setDlqInstruction: (topic: Topic, instruction: ReplayInstruction) => {
+      const url = baseUrl + "dead_letter_queue/replay";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "POST",
+        body: JSON.stringify({
+          logicalName: topic.logicalName,
+          physicalName: topic.physicalName,
+          storage: topic.storage,
+          slice: topic.slice,
+          maxMessages: instruction.messagesToProcess,
+          policy: instruction.policy,
+        }),
+      }).then((res) => {
+        if (res.ok) {
+          return res.json();
+        } else {
+          return res.json().then((err) => {
+            let errMsg = err?.error || "Could not replay";
+            throw new Error(errMsg);
+          });
+        }
+      });
+    },
+    clearDlqInstruction: () => {
+      const url = baseUrl + "dead_letter_queue/replay";
+      return fetch(url, {
+        headers: { "Content-Type": "application/json" },
+        method: "DELETE",
+      }).then((resp) => resp.json());
+    },
+    runLightweightDelete: (storage_name: string, column_conditions: object) => {
+      const url = baseUrl + "delete";
+      return fetch(url, {
+        method: "DELETE",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        body: JSON.stringify({
+          storage: storage_name,
+          query: { columns: column_conditions },
+        }),
+      });
+    },
+  };
+}
+ 
+export default Client;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.html b/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.html new file mode 100644 index 0000000000..3916a3b0e1 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/auto_replacements_bypass_projects + + + + + + + + + +
+
+

All files static/auto_replacements_bypass_projects

+
+ +
+ 18.75% + Statements + 3/16 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/4 +
+ + +
+ 25% + Lines + 3/12 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
18.75%3/160%0/10%0/425%3/12
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.tsx.html b/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.tsx.html new file mode 100644 index 0000000000..19b631c8c9 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/auto_replacements_bypass_projects/index.tsx.html @@ -0,0 +1,198 @@ + + + + + + Code coverage report for static/auto_replacements_bypass_projects/index.tsx + + + + + + + + + +
+
+

All files / static/auto_replacements_bypass_projects index.tsx

+
+ +
+ 18.75% + Statements + 3/16 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/4 +
+ + +
+ 25% + Lines + 3/12 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +391x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useState, useEffect } from "react";
+import { AutoReplacementsBypassProjectsData } from "SnubaAdmin/auto_replacements_bypass_projects/types";
+ 
+import Client from "SnubaAdmin/api_client";
+import { Table } from "../table";
+ 
+function AutoReplacementsBypassProjects(props: { api: Client }) {
+  const [data, setData] = useState<AutoReplacementsBypassProjectsData[] | null>(
+    null
+  );
+ 
+  useEffect(() => {
+    props.api.getAutoReplacementsBypassProjects().then((res) => {
+      setData(res);
+    });
+  }, []);
+ 
+  Iif (!data) {
+    return null;
+  }
+ 
+  const rowData = data.map(({ projectID, expiry }) => {
+    return [projectID, expiry];
+  });
+ 
+  return (
+    <div>
+      <div>
+        <Table
+          headerData={["Project ID", "Expiration Time"]}
+          rowData={rowData}
+        />
+      </div>
+    </div>
+  );
+}
+ 
+export default AutoReplacementsBypassProjects;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/add_config_modal.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/add_config_modal.tsx.html new file mode 100644 index 0000000000..5b697e19cc --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/add_config_modal.tsx.html @@ -0,0 +1,549 @@ + + + + + + Code coverage report for static/capacity_management/add_config_modal.tsx + + + + + + + + + +
+
+

All files / static/capacity_management add_config_modal.tsx

+
+ +
+ 100% + Statements + 33/33 +
+ + +
+ 100% + Branches + 12/12 +
+ + +
+ 100% + Functions + 15/15 +
+ + +
+ 100% + Lines + 30/30 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +1565x +5x +5x +5x +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +56x +  +14x +14x +  +14x +  +  +  +  +  +  +  +  +1x +2x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +  +  +  +2x +2x +  +  +  +  +1x +1x +  +  +  +  +1x +1x +  +  +  +12x +  +  +14x +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +17x +  +  +  +  +  +  +  +  +  +  +  +  +  +8x +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x + 
import React, { useState } from "react";
+import Button from "react-bootstrap/Button";
+import Form from "react-bootstrap/Form";
+import Modal from "react-bootstrap/Modal";
+import {
+  AllocationPolicyConfig,
+  AllocationPolicyOptionalConfigDefinition,
+} from "SnubaAdmin/capacity_management/types";
+import FormGroup from "react-bootstrap/FormGroup";
+ 
+function AddConfigModal(props: {
+  currentlyAdding: boolean;
+  setCurrentlyAdding: (currentlyAdding: boolean) => void;
+  optionalConfigDefinitions: AllocationPolicyOptionalConfigDefinition[];
+  saveConfig: (config: AllocationPolicyConfig) => void;
+}) {
+  const {
+    currentlyAdding,
+    setCurrentlyAdding,
+    optionalConfigDefinitions,
+    saveConfig,
+  } = props;
+ 
+  const [selectedDefinition, selectDefinition] =
+    useState<AllocationPolicyOptionalConfigDefinition>();
+ 
+  const [config, buildConfig] = useState<AllocationPolicyConfig>({
+    name: "",
+    value: "",
+    description: "",
+    type: "",
+    params: {},
+  });
+ 
+  function selectConfigDefinition(name: string) {
+    optionalConfigDefinitions.map((definition) => {
+      if (definition.name == name) {
+        selectDefinition(definition);
+        buildConfig({
+          name: definition.name,
+          value: "",
+          description: definition.description,
+          type: definition.type,
+          params: {},
+        });
+      }
+    });
+  }
+ 
+  function saveChanges() {
+    setCurrentlyAdding(false);
+    selectDefinition(undefined);
+    saveConfig(config);
+  }
+ 
+  function updateParam(name: string, value: string) {
+    buildConfig((prev) => {
+      return { ...prev, params: { ...prev.params, [name]: value } };
+    });
+  }
+ 
+  function setValue(value: string) {
+    buildConfig((prev) => {
+      return { ...prev, value: value };
+    });
+  }
+ 
+  function cancelAdding() {
+    selectDefinition(undefined);
+    setCurrentlyAdding(false);
+  }
+ 
+  function inputType(type: string) {
+    return type == "int" || type == "float" ? "number" : "text";
+  }
+ 
+  return (
+    <Modal show={currentlyAdding} onHide={cancelAdding}>
+      <Modal.Header>
+        <Modal.Title>Adding a new config:</Modal.Title>
+      </Modal.Header>
+      <Modal.Body>
+        <Form.Group>
+          <Form.Label>Key: </Form.Label>
+          <Form.Select
+            aria-label="Default select example"
+            onChange={(e) => selectConfigDefinition(e.target.value)}
+          >
+            <option key="default_selected" className="d-none" value="">
+              Select Option
+            </option>
+            {optionalConfigDefinitions.map((definition) => (
+              <option key={definition.name}>{definition.name}</option>
+            ))}
+          </Form.Select>
+        </Form.Group>
+ 
+        <br />
+ 
+        {selectedDefinition ? (
+          <>
+            Description:
+            <p>{selectedDefinition.description}</p>
+            Params:
+            <Form.Group>
+              {selectedDefinition.params.map((param) => (
+                <div key={param.name + "_input"}>
+                  <Form.Label>
+                    {param.name + " (" + param.type + ")"}
+                  </Form.Label>
+                  <Form.Control
+                    data-testid={param.name}
+                    type={inputType(param.type)}
+                    onChange={(e) => updateParam(param.name, e.target.value)}
+                  />
+                </div>
+              ))}
+            </Form.Group>
+            <br />
+            <FormGroup>
+              <Form.Label>Value: </Form.Label>
+              <Form.Control
+                data-testid="value_field"
+                type={inputType(selectedDefinition.type)}
+                onChange={(e) => setValue(e.target.value)}
+                placeholder={selectedDefinition.default}
+              />
+            </FormGroup>
+          </>
+        ) : null}
+      </Modal.Body>
+      <Modal.Footer>
+        <Button variant="secondary" onClick={cancelAdding}>
+          Close
+        </Button>
+        <Button
+          variant="primary"
+          onClick={saveChanges}
+          disabled={
+            selectedDefinition == undefined ||
+            (selectedDefinition &&
+              (Object.keys(config.params).length !=
+                Object.keys(selectedDefinition.params).length ||
+                Object.values(config.params).includes("") ||
+                config.value == ""))
+          }
+        >
+          Save Changes
+        </Button>
+      </Modal.Footer>
+    </Modal>
+  );
+}
+ 
+export default AddConfigModal;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/allocation_policy.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/allocation_policy.tsx.html new file mode 100644 index 0000000000..ee6e32ab1d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/allocation_policy.tsx.html @@ -0,0 +1,660 @@ + + + + + + Code coverage report for static/capacity_management/allocation_policy.tsx + + + + + + + + + +
+
+

All files / static/capacity_management allocation_policy.tsx

+
+ +
+ 80.95% + Statements + 51/63 +
+ + +
+ 89.47% + Branches + 17/19 +
+ + +
+ 52.17% + Functions + 12/23 +
+ + +
+ 80.39% + Lines + 41/51 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +1934x +  +4x +4x +  +  +4x +4x +4x +4x +  +  +17x +17x +17x +32x +3x +2x +  +1x +  +  +32x +3x +2x +  +1x +  +  +  +17x +1x +16x +1x +  +15x +  +  +  +  +  +  +  +  +23x +  +7x +  +7x +3x +3x +  +  +7x +7x +  +  +  +  +  +  +7x +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +3x +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +3x +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x + 
import React, { useEffect, useState } from "react";
+ 
+import { Table, createCustomTableStyles } from "../table";
+import { COLORS } from "SnubaAdmin/theme";
+import Client from "SnubaAdmin/api_client";
+import { AllocationPolicy, AllocationPolicyConfig } from "SnubaAdmin/capacity_management/types";
+import { containerStyle, linkStyle, paragraphStyle } from "SnubaAdmin/capacity_management/styles";
+import { getReadonlyRow } from "SnubaAdmin/capacity_management/row_data";
+import EditConfigModal from "SnubaAdmin/capacity_management/edit_config_modal";
+import AddConfigModal from "SnubaAdmin/capacity_management/add_config_modal";
+ 
+function getTableColor(configs: AllocationPolicyConfig[]): string {
+  let policyIsActive = false;
+  let policyIsEnforced = false;
+  configs.forEach((config) => {
+    if (config.name == "is_active") {
+      if (parseInt(config.value) === 1) {
+        policyIsActive = true;
+      } else {
+        policyIsActive = false;
+      }
+    }
+    if (config.name == "is_enforced") {
+      if (parseInt(config.value) === 1) {
+        policyIsEnforced = true;
+      } else {
+        policyIsEnforced = false;
+      }
+    }
+  });
+  if (policyIsActive && policyIsEnforced) {
+    return COLORS.SNUBA_BLUE;
+  } else if (policyIsActive && !policyIsEnforced) {
+    return "orange";
+  } else {
+    return "gray";
+  }
+}
+ 
+function AllocationPolicyConfigs(props: {
+  api: Client;
+  storage: string;
+  policy: AllocationPolicy;
+}) {
+  const { api, storage, policy } = props;
+ 
+  const [configs, setConfigs] = useState<AllocationPolicyConfig[]>([]);
+ 
+  useEffect(() => {
+    policy.configs.sort();
+    setConfigs(policy.configs);
+  }, [policy]);
+ 
+  const [currentlyEditing, setCurrentlyEditing] = useState(false);
+  const [currentConfig, setCurrentConfig] = useState<AllocationPolicyConfig>({
+    name: "",
+    value: "",
+    description: "",
+    type: "",
+    params: {},
+  });
+  const [addingNew, setAddingNew] = useState(false);
+ 
+  function enterEditMode(config: AllocationPolicyConfig) {
+    setCurrentlyEditing(true);
+    setCurrentConfig(config);
+  }
+ 
+  function deleteConfig(toDelete: AllocationPolicyConfig) {
+    api
+      .deleteAllocationPolicyConfig(
+        storage,
+        policy.policy_name,
+        toDelete.name,
+        toDelete.params
+      )
+      .then(() => {
+        setConfigs((prev) =>
+          Object.keys(currentConfig.params).length
+            ? prev.filter((config) => config != toDelete)
+            : prev
+        );
+      })
+      .catch((err) => {
+        window.alert(err);
+      });
+  }
+ 
+  function saveConfig(config: AllocationPolicyConfig) {
+    api
+      .setAllocationPolicyConfig(
+        storage,
+        policy.policy_name,
+        config.name,
+        config.value,
+        config.params
+      )
+      .catch((err) => {
+        window.alert(err);
+      });
+  }
+ 
+  function addConfig(config: AllocationPolicyConfig) {
+    saveConfig(config);
+    setConfigs((prev) => [...prev, config]);
+  }
+ 
+  return (
+    <>
+      <link
+        rel="stylesheet"
+        href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
+        integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
+        crossOrigin="anonymous"
+      />
+      <EditConfigModal
+        currentlyEditing={currentlyEditing}
+        currentConfig={currentConfig}
+        setCurrentlyEditing={setCurrentlyEditing}
+        deleteConfig={deleteConfig}
+        saveConfig={saveConfig}
+      />
+      <AddConfigModal
+        currentlyAdding={addingNew}
+        setCurrentlyAdding={setAddingNew}
+        optionalConfigDefinitions={policy.optional_config_definitions}
+        saveConfig={addConfig}
+      />
+      <div style={containerStyle}>
+        <p>{policy.policy_name}</p>
+        <p style={paragraphStyle}>These are the global configurations.</p>
+        <Table
+          headerData={["Key", "Value", "Description", "Type", "Actions"]}
+          rowData={configs
+            .filter((configs) => Object.keys(configs.params).length == 0)
+            .map((config) =>
+              getReadonlyRow(config, () => enterEditMode(config))
+            )
+            .map((row_data) => [
+              row_data.name,
+              row_data.value,
+              row_data.description,
+              row_data.type,
+              row_data.edit,
+            ])}
+          columnWidths={[3, 2, 5, 1, 1]}
+          customStyles={createCustomTableStyles({
+            headerStyle: { backgroundColor: getTableColor(policy.configs) },
+          })}
+        />
+        <p style={paragraphStyle}>
+          These are the tenant specific configurations.
+        </p>
+        <Table
+          headerData={[
+            "Key",
+            "Params",
+            "Value",
+            "Description",
+            "Type",
+            "Actions",
+          ]}
+          rowData={configs
+            .filter((config) => Object.keys(config.params).length > 0)
+            .map((config) =>
+              getReadonlyRow(config, () => enterEditMode(config))
+            )
+            .map((row_data) => [
+              row_data.name,
+              row_data.params,
+              row_data.value,
+              row_data.description,
+              row_data.type,
+              row_data.edit,
+            ])}
+          columnWidths={[3, 3, 2, 5, 1, 1]}
+          customStyles={createCustomTableStyles({
+            headerStyle: { backgroundColor: getTableColor(policy.configs) },
+          })}
+        />
+        {!addingNew && policy.optional_config_definitions.length != 0 && (
+          <a onClick={() => setAddingNew(true)} style={linkStyle}>
+            add new
+          </a>
+        )}
+      </div>
+      <br />
+    </>
+  );
+}
+ 
+export { AllocationPolicyConfigs, getTableColor };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/edit_config_modal.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/edit_config_modal.tsx.html new file mode 100644 index 0000000000..150ea59224 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/edit_config_modal.tsx.html @@ -0,0 +1,351 @@ + + + + + + Code coverage report for static/capacity_management/edit_config_modal.tsx + + + + + + + + + +
+
+

All files / static/capacity_management edit_config_modal.tsx

+
+ +
+ 95.23% + Statements + 20/21 +
+ + +
+ 77.77% + Branches + 7/9 +
+ + +
+ 87.5% + Functions + 7/8 +
+ + +
+ 94.73% + Lines + 18/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +905x +5x +5x +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +45x +  +9x +  +  +1x +1x +1x +  +  +  +1x +  +  +  +  +  +  +1x +  +1x +  +  +  +19x +  +  +  +9x +  +  +9x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x + 
import React, { useState } from "react";
+import Button from "react-bootstrap/Button";
+import Form from "react-bootstrap/Form";
+import Modal from "react-bootstrap/Modal";
+import { AllocationPolicyConfig } from "SnubaAdmin/capacity_management/types";
+ 
+function EditConfigModal(props: {
+  currentlyEditing: boolean;
+  currentConfig: AllocationPolicyConfig;
+  setCurrentlyEditing: (currentlyEditing: boolean) => void;
+  deleteConfig: (config: AllocationPolicyConfig) => void;
+  saveConfig: (config: AllocationPolicyConfig) => void;
+}) {
+  const {
+    currentlyEditing,
+    currentConfig,
+    setCurrentlyEditing,
+    deleteConfig,
+    saveConfig,
+  } = props;
+ 
+  const [value, updateValue] = useState("");
+ 
+  function saveChanges() {
+    currentConfig.value = value;
+    saveConfig(currentConfig);
+    setCurrentlyEditing(false);
+  }
+ 
+  function confirmDeleteConfig() {
+    if (
+      window.confirm(
+        "Are you sure you want to " +
+          deleteOrReset().toLowerCase() +
+          " this config?"
+      )
+    ) {
+      deleteConfig(currentConfig);
+    }
+    setCurrentlyEditing(false);
+  }
+ 
+  function deleteOrReset() {
+    return Object.keys(currentConfig.params).length ? "Delete" : "Reset";
+  }
+ 
+  function inputType(type: string) {
+    return type == "int" || type == "float" ? "number" : "text";
+  }
+ 
+  return (
+    <Modal show={currentlyEditing} onHide={() => setCurrentlyEditing(false)}>
+      <Modal.Header>
+        <Modal.Title>
+          Editing:{" "}
+          <code style={{ wordBreak: "break-all", color: "black" }}>
+            {currentConfig.name}
+          </code>
+        </Modal.Title>
+      </Modal.Header>
+      <Modal.Body>
+        <Form.Group>
+          <Form.Label>Value: </Form.Label>
+          <Form.Control
+            type={inputType(currentConfig.type)}
+            onChange={(e) => updateValue(e.target.value)}
+            placeholder={currentConfig.value}
+          />
+        </Form.Group>
+      </Modal.Body>
+      <Modal.Footer>
+        <Button variant="secondary" onClick={() => setCurrentlyEditing(false)}>
+          Close
+        </Button>
+        <Button
+          variant={deleteOrReset() == "Reset" ? "warning" : "danger"}
+          onClick={confirmDeleteConfig}
+        >
+          {deleteOrReset()}
+        </Button>
+        <Button variant="primary" onClick={saveChanges} disabled={value == ""}>
+          Save Changes
+        </Button>
+      </Modal.Footer>
+    </Modal>
+  );
+}
+ 
+export default EditConfigModal;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/index.html b/snuba/admin/coverage/lcov-report/static/capacity_management/index.html new file mode 100644 index 0000000000..04c10931f9 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/index.html @@ -0,0 +1,190 @@ + + + + + + Code coverage report for static/capacity_management + + + + + + + + + +
+
+

All files static/capacity_management

+
+ +
+ 90.5% + Statements + 143/158 +
+ + +
+ 89.79% + Branches + 44/49 +
+ + +
+ 76.78% + Functions + 43/56 +
+ + +
+ 90.15% + Lines + 119/132 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
add_config_modal.tsx +
+
100%33/33100%12/12100%15/15100%30/30
allocation_policy.tsx +
+
80.95%51/6389.47%17/1952.17%12/2380.39%41/51
edit_config_modal.tsx +
+
95.23%20/2177.77%7/987.5%7/894.73%18/19
index.tsx +
+
92.59%25/2785.71%6/787.5%7/890.47%19/21
row_data.tsx +
+
100%5/5100%2/2100%2/2100%5/5
styles.tsx +
+
100%9/9100%0/0100%0/0100%6/6
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/index.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/index.tsx.html new file mode 100644 index 0000000000..2537a46827 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/index.tsx.html @@ -0,0 +1,294 @@ + + + + + + Code coverage report for static/capacity_management/index.tsx + + + + + + + + + +
+
+

All files / static/capacity_management index.tsx

+
+ +
+ 92.59% + Statements + 25/27 +
+ + +
+ 85.71% + Branches + 6/7 +
+ + +
+ 87.5% + Functions + 7/8 +
+ + +
+ 90.47% + Lines + 19/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +712x +  +2x +  +2x +  +  +5x +  +4x +4x +4x +  +  +  +4x +1x +1x +1x +1x +  +  +  +  +  +  +1x +1x +  +  +  +1x +  +  +1x +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import {AllocationPolicyConfigs} from "SnubaAdmin/capacity_management/allocation_policy";
+import { AllocationPolicy } from "SnubaAdmin/capacity_management/types";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+ 
+function CapacityManagement(props: { api: Client }) {
+  const { api } = props;
+ 
+  const [storages, setStorages] = useState<string[]>([]);
+  const [selectedStorage, setStorage] = useState<string | undefined>();
+  const [allocationPolicies, setAllocationPolicies] = useState<
+    AllocationPolicy[]
+  >([]);
+ 
+  useEffect(() => {
+    api.getStoragesWithAllocationPolicies().then((res) => {
+      setStorages(res);
+      const previousStorage = getParamFromStorage("storage");
+      Iif (previousStorage) {
+        selectStorage(previousStorage);
+      }
+    });
+  }, []);
+ 
+  function selectStorage(storage: string) {
+    setStorage(storage);
+    loadAllocationPolicies(storage);
+  }
+ 
+  function loadAllocationPolicies(storage: string) {
+    api
+      .getAllocationPolicies(storage)
+      .then((res) => {
+        setAllocationPolicies(res);
+      })
+      .catch((err) => {
+        window.alert(err);
+      });
+  }
+ 
+  return (
+    <div>
+      <p>
+        Storage:
+        <CustomSelect
+          value={selectedStorage || ""}
+          onChange={selectStorage}
+          name="storage"
+          options={storages}
+        />
+      </p>
+ 
+      {selectedStorage && allocationPolicies ? (
+        allocationPolicies.map((policy: AllocationPolicy) => (
+          <AllocationPolicyConfigs
+            api={api}
+            storage={selectedStorage}
+            policy={policy}
+            key={selectedStorage + policy.policy_name}
+          />
+        ))
+      ) : (
+        <p>Storage not selected.</p>
+      )}
+    </div>
+  );
+}
+ 
+export default CapacityManagement;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/row_data.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/row_data.tsx.html new file mode 100644 index 0000000000..e1cfe2f667 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/row_data.tsx.html @@ -0,0 +1,237 @@ + + + + + + Code coverage report for static/capacity_management/row_data.tsx + + + + + + + + + +
+
+

All files / static/capacity_management row_data.tsx

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +524x +  +4x +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +4x + 
import React from "react";
+import { AllocationPolicyConfig, RowData } from "SnubaAdmin/capacity_management/types";
+import Button from "react-bootstrap/Button";
+ 
+function getReadonlyRow(
+  config: AllocationPolicyConfig,
+  edit: () => void
+): RowData {
+  return {
+    name: (
+      <code style={{ wordBreak: "break-all", color: "black" }}>
+        {config.name}
+      </code>
+    ),
+    params: (
+      <code style={{ wordBreak: "break-all", color: "black" }}>
+        {Object.keys(config.params).length
+          ? JSON.stringify(config.params)
+          : "N/A"}
+      </code>
+    ),
+    value: (
+      <code style={{ wordBreak: "break-all", color: "black" }}>
+        {config.value}
+      </code>
+    ),
+    description: (
+      <code
+        style={{
+          wordBreak: "normal",
+          overflowWrap: "anywhere",
+          color: "black",
+        }}
+      >
+        {config.description}
+      </code>
+    ),
+    type: config.type,
+    edit: (
+      <Button
+        variant="outline-secondary"
+        onClick={() => edit()}
+        data-testid={config.name + "_edit"}
+      >
+        edit
+      </Button>
+    ),
+  };
+}
+ 
+export { getReadonlyRow };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/capacity_management/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/capacity_management/styles.tsx.html new file mode 100644 index 0000000000..1e86561c03 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/capacity_management/styles.tsx.html @@ -0,0 +1,162 @@ + + + + + + Code coverage report for static/capacity_management/styles.tsx + + + + + + + + + +
+
+

All files / static/capacity_management styles.tsx

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +274x +  +4x +  +  +  +  +  +4x +  +  +  +  +4x +  +  +  +  +  +  +4x +  +  +  +  +4x + 
import { COLORS } from "SnubaAdmin/theme";
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+  marginLeft: 8,
+};
+ 
+const containerStyle = {
+  width: 1200,
+  maxWidth: "100%",
+};
+ 
+const linkStyle = {
+  cursor: "pointer",
+  fontSize: 13,
+  color: COLORS.TEXT_LIGHTER,
+  textDecoration: "underline",
+};
+ 
+const paragraphStyle = {
+  fontSize: 15,
+  color: COLORS.TEXT_LIGHTER,
+};
+ 
+export { containerStyle, linkStyle, paragraphStyle, selectStyle };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/CSV.ts.html b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/CSV.ts.html new file mode 100644 index 0000000000..a6d512d352 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/CSV.ts.html @@ -0,0 +1,162 @@ + + + + + + Code coverage report for static/cardinality_analyzer/CSV.ts + + + + + + + + + +
+
+

All files / static/cardinality_analyzer CSV.ts

+
+ +
+ 94.11% + Statements + 16/17 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 15/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +272x +2x +4x +  +  +2x +8x +  +  +2x +16x +  +16x +15x +15x +  +15x +2x +  +  +13x +  +  +1x +  +2x + 
export class CSV {
+  static sheet(rows: Array<Array<unknown>>) {
+    return rows.map(CSV.row).join("\n");
+  }
+ 
+  static row(values: unknown[]): string {
+    return values.map(CSV.cell).join(",");
+  }
+ 
+  static cell(value: unknown): string {
+    Iif (!value) return "";
+ 
+    if (typeof value === "string") {
+      let sanitizedValue: string = "";
+      sanitizedValue = value.replace(/"/g, '""');
+ 
+      if (value.includes(",")) {
+        return `"${sanitizedValue}"`;
+      }
+ 
+      return sanitizedValue;
+    }
+ 
+    return value.toString();
+  }
+}
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.html b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.html new file mode 100644 index 0000000000..3099063853 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.html @@ -0,0 +1,145 @@ + + + + + + Code coverage report for static/cardinality_analyzer + + + + + + + + + +
+
+

All files static/cardinality_analyzer

+
+ +
+ 44.3% + Statements + 35/79 +
+ + +
+ 40% + Branches + 4/10 +
+ + +
+ 18.51% + Functions + 5/27 +
+ + +
+ 48.57% + Lines + 34/70 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CSV.ts +
+
94.11%16/1766.66%2/3100%4/4100%15/15
index.tsx +
+
31.57%6/19100%0/00%0/735.29%6/17
query_display.tsx +
+
30.23%13/4328.57%2/76.25%1/1634.21%13/38
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.tsx.html b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.tsx.html new file mode 100644 index 0000000000..75be7db85c --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/index.tsx.html @@ -0,0 +1,264 @@ + + + + + + Code coverage report for static/cardinality_analyzer/index.tsx + + + + + + + + + +
+
+

All files / static/cardinality_analyzer index.tsx

+
+ +
+ 31.57% + Statements + 6/19 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 35.29% + Lines + 6/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +611x +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +1x + 
import React, { useState, useEffect } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+import QueryDisplay from "SnubaAdmin/cardinality_analyzer/query_display";
+import { CardinalityQueryResult, PredefinedQuery } from "SnubaAdmin/cardinality_analyzer/types";
+ 
+function CardinalityQueries(props: { api: Client }) {
+  const [predefinedQueryOptions, setPredefinedQueryOptions] = useState<
+    PredefinedQuery[]
+  >([]);
+ 
+  useEffect(() => {
+    props.api.getPredefinedCardinalityQueryOptions().then((res) => {
+      res.forEach(
+          (queryOption) => (queryOption.sql = formatSQL(queryOption.sql))
+      );
+      setPredefinedQueryOptions(res);
+    });
+  }, []);
+ 
+  function tablePopulator(queryResult: CardinalityQueryResult) {
+    return (
+      <div style={scroll}>
+        <Table
+          headerData={queryResult.column_names}
+          rowData={queryResult.rows}
+        />
+      </div>
+    );
+  }
+  function formatSQL(sql: string) {
+    const formatted = sql
+      .split("\n")
+      .map((line) => line.substring(4, line.length))
+      .join("\n");
+    return formatted.trim();
+  }
+ 
+  return (
+    <div>
+      {QueryDisplay({
+        api: props.api,
+        resultDataPopulator: tablePopulator,
+        predefinedQueryOptions: predefinedQueryOptions,
+      })}
+    </div>
+  );
+}
+ 
+const selectStyle = {
+  marginBottom: 8,
+  height: 30,
+};
+ 
+const scroll = {
+  overflowX: "scroll" as const,
+  width: "100%",
+};
+ 
+export default CardinalityQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/query_display.tsx.html b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/query_display.tsx.html new file mode 100644 index 0000000000..334033abe4 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/cardinality_analyzer/query_display.tsx.html @@ -0,0 +1,540 @@ + + + + + + Code coverage report for static/cardinality_analyzer/query_display.tsx + + + + + + + + + +
+
+

All files / static/cardinality_analyzer query_display.tsx

+
+ +
+ 30.23% + Statements + 13/43 +
+ + +
+ 28.57% + Branches + 2/7 +
+ + +
+ 6.25% + Functions + 1/16 +
+ + +
+ 34.21% + Lines + 13/38 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +1531x +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +1x +1x +1x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +1x + 
import React, { useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Collapse } from "SnubaAdmin/collapse";
+import { CSV } from "SnubaAdmin/cardinality_analyzer/CSV";
+import QueryEditor from "SnubaAdmin/query_editor";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+ 
+import {
+  CardinalityQueryRequest,
+  CardinalityQueryResult,
+  PredefinedQuery,
+} from "SnubaAdmin/cardinality_analyzer/types";
+ 
+enum ClipboardFormats {
+  CSV = "csv",
+  JSON = "json",
+}
+type QueryState = Partial<CardinalityQueryRequest>;
+ 
+const HISTORY_KEY = "cardinality_analyzer";
+function QueryDisplay(props: {
+  api: Client;
+  resultDataPopulator: (queryResult: CardinalityQueryResult) => JSX.Element;
+  predefinedQueryOptions: Array<PredefinedQuery>;
+}) {
+  const [query, setQuery] = useState<QueryState>({});
+  const [queryResultHistory, setCardinalityQueryResultHistory] = useState<
+    CardinalityQueryResult[]
+  >(getRecentHistory(HISTORY_KEY));
+ 
+  function updateQuerySql(sql: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        sql,
+      };
+    });
+  }
+ 
+  function convertResultsToCSV(queryResult: CardinalityQueryResult) {
+    return CSV.sheet([queryResult.column_names, ...queryResult.rows]);
+  }
+ 
+  function copyText(
+    queryResult: CardinalityQueryResult,
+    format: ClipboardFormats
+  ) {
+    let formatter: (input: CardinalityQueryResult) => string = (s) =>
+      s.toString();
+ 
+    Iif (format === ClipboardFormats.JSON) {
+      formatter = JSON.stringify;
+    }
+ 
+    Iif (format === ClipboardFormats.CSV) {
+      formatter = convertResultsToCSV;
+    }
+ 
+    window.navigator.clipboard.writeText(formatter(queryResult));
+  }
+ 
+  function executeQuery() {
+    return props.api
+      .executeCardinalityQuery(query as CardinalityQueryRequest)
+      .then((result) => {
+        result.input_query = query.sql || "<Input Query>";
+        setRecentHistory(HISTORY_KEY, result);
+        setCardinalityQueryResultHistory((prevHistory) => [
+          result,
+          ...prevHistory,
+        ]);
+      });
+  }
+ 
+  return (
+    <div>
+      <h2>Construct a Metrics Query</h2>
+      <QueryEditor
+        onQueryUpdate={(sql) => {
+          updateQuerySql(sql);
+        }}
+        predefinedQueryOptions={props.predefinedQueryOptions}
+      />
+      <div style={executeActionsStyle}>
+        <ExecuteButton onClick={executeQuery} disabled={!query.sql} />
+      </div>
+      <div>
+        <h2>Query results</h2>
+        {queryResultHistory.map((queryResult, idx) => {
+          Iif (idx === 0) {
+            return (
+              <div key={idx}>
+                <p>{queryResult.input_query}</p>
+                <p>
+                  <button
+                    style={copyButtonStyle}
+                    onClick={() => copyText(queryResult, ClipboardFormats.JSON)}
+                  >
+                    Copy to clipboard (JSON)
+                  </button>
+                </p>
+                <p>
+                  <button
+                    style={copyButtonStyle}
+                    onClick={() => copyText(queryResult, ClipboardFormats.CSV)}
+                  >
+                    Copy to clipboard (CSV)
+                  </button>
+                </p>
+                {props.resultDataPopulator(queryResult)}
+              </div>
+            );
+          }
+ 
+          return (
+            <Collapse key={idx} text={queryResult.input_query}>
+              <button
+                style={copyButtonStyle}
+                onClick={() => copyText(queryResult, ClipboardFormats.JSON)}
+              >
+                Copy to clipboard (JSON)
+              </button>
+              <button
+                style={copyButtonStyle}
+                onClick={() => copyText(queryResult, ClipboardFormats.CSV)}
+              >
+                Copy to clipboard (CSV)
+              </button>
+              {props.resultDataPopulator(queryResult)}
+            </Collapse>
+          );
+        })}
+      </div>
+    </div>
+  );
+}
+ 
+const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const copyButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+  marginRight: 10,
+};
+ 
+export default QueryDisplay;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.html b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.html new file mode 100644 index 0000000000..73d53a3c6e --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/clickhouse_migrations + + + + + + + + + +
+
+

All files static/clickhouse_migrations

+
+ +
+ 10.73% + Statements + 16/149 +
+ + +
+ 1.37% + Branches + 2/145 +
+ + +
+ 2.04% + Functions + 1/49 +
+ + +
+ 13.67% + Lines + 16/117 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
8.9%13/1460%0/1430%0/4811.4%13/114
types.tsx +
+
100%3/3100%2/2100%1/1100%3/3
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.tsx.html b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.tsx.html new file mode 100644 index 0000000000..830a15c2ac --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/index.tsx.html @@ -0,0 +1,1188 @@ + + + + + + Code coverage report for static/clickhouse_migrations/index.tsx + + + + + + + + + +
+
+

All files / static/clickhouse_migrations index.tsx

+
+ +
+ 8.9% + Statements + 13/146 +
+ + +
+ 0% + Branches + 0/143 +
+ + +
+ 0% + Functions + 0/48 +
+ + +
+ 11.4% + Lines + 13/114 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +3691x +  +1x +1x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +1x +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+import {
+  MigrationData,
+  MigrationGroupResult,
+  GroupOptions,
+  RunMigrationRequest,
+  Action,
+} from "SnubaAdmin/clickhouse_migrations/types";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+ 
+function ClickhouseMigrations(props: { api: Client }) {
+  const [allGroups, setAllGroups] = useState<GroupOptions>({});
+  const [migrationGroup, setMigrationGroup] =
+    useState<MigrationGroupResult | null>(null);
+  const [migrationId, setMigrationId] = useState<string | null>(null);
+  const [SQLText, setSQLText] = useState<string | null>(null);
+ 
+  const [header, setHeader] = useState<string | null>(null);
+  const [show_action, setShowAction] = useState<boolean | null>(false);
+ 
+  const dry_run_header = "Dry run SQL output"
+  const real_run_header = "Run log output"
+ 
+  const [forwards_dry_run, setFowardsDryRun] = useState<string | null>(null);
+  const [backwards_dry_run, setBackwardsDryRun] = useState<string | null>(null);
+ 
+  useEffect(() => {
+    props.api.getAllMigrationGroups().then((res) => {
+      let options: GroupOptions = {};
+      res.sort().forEach(
+        (group: MigrationGroupResult) => (options[group.group] = group)
+      );
+      setAllGroups(options);
+    });
+  }, []);
+ 
+  function clearBtnState() {
+    setBackwardsDryRun(() => null)
+    setFowardsDryRun(() => null)
+    setSQLText(() => null);
+  }
+ 
+  function selectGroup(groupName: string) {
+    const migrationGroup: MigrationGroupResult = allGroups[groupName];
+    setMigrationGroup(() => migrationGroup);
+    clearBtnState()
+    setMigrationId(() => null);
+    setShowAction(()=> false)
+    refreshStatus(migrationGroup.group);
+  }
+ 
+  function selectMigration(migrationId: string) {
+    setMigrationId(() => migrationId);
+    clearBtnState()
+    setShowAction(()=> false)
+  }
+ 
+  function selectForwards(dry_run_sql: string) {
+    setBackwardsDryRun(() => null)
+    setFowardsDryRun(() => dry_run_sql)
+  }
+ 
+  function selectBackwards(dry_run_sql: string) {
+    setFowardsDryRun(() => null)
+    setBackwardsDryRun(() => dry_run_sql)
+  }
+ 
+  function execute(action: Action) {
+    let force = false;
+    const data = migrationGroup?.migration_ids.find(
+      (m) => m.migration_id == migrationId
+    );
+    Iif (action == Action.Run && !forwards_dry_run) {
+      return alert("Please run a forwards dry run first")
+    }
+    Iif (action == Action.Reverse && !backwards_dry_run) {
+ 
+      return alert("Please run a backwards dry run first: ")
+    }
+    Iif (data?.blocking) {
+      Iif (
+        window.confirm(
+          `Migration ${migrationId} is blocking, are you sure you want to execute?`
+        )
+      ) {
+        force = true;
+      }
+    }
+    Iif (data?.status !== "not_started" && action === Action.Reverse) {
+      Iif (
+        window.confirm(
+          `Migration ${migrationId} is ${data?.status}, are you sure you want to reverse?`
+        )
+      ) {
+        force = true;
+      }
+    }
+    executeRealRun(action, force);
+  }
+ 
+  function executeRun(action: Action, dry_run: boolean, force: boolean,
+    cb?: (stdout: string, err?: string) => void ) {
+    let req = {
+      action: action,
+      migration_id: migrationId,
+      group: migrationGroup?.group,
+      dry_run: dry_run,
+      force: force,
+    };
+    props.api
+      .runMigration(req as RunMigrationRequest)
+      .then((res) => {
+        console.log(res);
+        Iif (action == Action.Run && dry_run) {
+          selectForwards(res.stdout)
+        }
+        Iif (action == Action.Reverse && dry_run) {
+          selectBackwards(res.stdout)
+        }
+        setSQLText(() => res.stdout);
+        Iif (cb) {
+          cb(res.stdout)
+        }
+      })
+      .catch((err) => {
+        console.error(err);
+        setSQLText(() => JSON.stringify(err));
+        Iif (cb) {
+          cb("", JSON.stringify(err))
+        }
+      });
+  }
+ 
+  function executeDryRun(action: Action) {
+    console.log("executing dry run !", migrationId, action);
+    setHeader(()=> dry_run_header)
+    executeRun(action, true, false)
+    setShowAction(()=> true)
+  }
+ 
+  function executeRealRun(action: Action, force: boolean) {
+    console.log("executing real run !", migrationId, action, force);
+    clearBtnState()
+    setHeader(()=> real_run_header)
+    executeRun(action, false, force, (stdout: string, err?: string) => {
+      if (stdout.indexOf("migration.completed") > -1) {
+        alert(`Migration ${migrationId} ${action} completed successfully`)
+      } else {
+        alert(`Migration ${migrationId} ${action} didn't complete.` +
+              `See run log output. \n\n ${err||""} \n ${stdout}`)
+      }
+      Iif (migrationGroup){
+        refreshStatus(migrationGroup.group)
+      }
+    })
+ 
+    Iif (migrationGroup){
+      refreshStatus(migrationGroup.group)
+    }
+  }
+ 
+ 
+  function refreshStatus(group: string) {
+    props.api.getAllMigrationGroups().then((res) => {
+      let options: GroupOptions = {};
+      res.sort().forEach(
+        (group: MigrationGroupResult) => (options[group.group] = group)
+      );
+      setAllGroups(options);
+      setMigrationGroup(options[group]);
+    });
+  }
+ 
+  function rowData() {
+    Iif (migrationGroup) {
+      let data: any = [];
+      allGroups[migrationGroup.group].migration_ids.forEach((migration) => {
+        data.push([
+          migration.migration_id,
+          migration.status,
+          migration.blocking.toString(),
+        ]);
+      });
+      return data;
+    }
+    return null;
+  }
+ 
+  function renderMigrationIds() {
+    return (
+      <CustomSelect
+        disabled={migrationGroup === null}
+        value={migrationId || ""}
+        onChange={selectMigration}
+        name="Migration ID"
+        options={
+          migrationGroup
+            ? allGroups[migrationGroup.group].migration_ids.map((m: MigrationData) => ({
+              value: m.migration_id,
+              label: `${m.migration_id} - ${m.status}`,
+            }))
+            : []
+        }
+      />
+    );
+  }
+ 
+  function renderActions() {
+    Iif (!(migrationGroup && migrationId) || !show_action) {
+      return null;
+    }
+    const data = migrationGroup?.migration_ids.find(
+      (m) => m.migration_id == migrationId
+    );
+ 
+    return (
+      <div>
+        {forwards_dry_run && <input
+          key="run"
+          type="button"
+          disabled={!data?.can_run}
+          title={!data?.can_run ? data?.run_reason : ""}
+          id="run"
+          defaultValue="EXECUTE run"
+          onClick={() => execute(Action.Run)}
+          style={buttonStyle}
+        />}
+        {backwards_dry_run && <input
+          key="reverse"
+          type="button"
+          disabled={!data?.can_reverse}
+          title={!data?.can_reverse ? data?.reverse_reason : ""}
+          id="reverse"
+          defaultValue="EXECUTE reverse"
+          onClick={() => execute(Action.Reverse)}
+          style={buttonStyle}
+        />}
+        <div>
+          {!data?.can_reverse && data?.reverse_reason && backwards_dry_run && (
+            <p style={textStyle}>
+              ❌ <strong>You cannot reverse this migration: </strong>
+              {data?.reverse_reason}
+            </p>
+          )}
+          {!data?.can_run && data?.run_reason && forwards_dry_run && (
+            <p style={textStyle}>
+              ❌ <strong>You cannot run this migration: </strong>
+              {data?.run_reason}
+            </p>
+          )}
+        </div>
+      </div>
+    );
+  }
+ 
+  return (
+    <div style={{ display: "flex" }}>
+      <form>
+        <div style={migrationPicker}>
+          <h4>Execute a migration</h4>
+          <p style={textStyle}>
+            Attempt to run or reverse a migration for one of the migration
+            groups you have access to
+          </p>
+          <CustomSelect
+            value={migrationGroup?.group || ""}
+            onChange={selectGroup}
+            name="Migration Group"
+            options={Object.keys(allGroups).map((name: string) => (name))}
+          />
+        </div>
+ 
+        <div>
+          {renderMigrationIds()}
+          {migrationGroup && migrationId && (
+            <div style={{ display: "block" }}>
+              <br />
+              <button type="button"
+                onClick={() => executeDryRun(Action.Run)}
+                style={forwards_dry_run? selectedButtonStyle : buttonStyle}
+              >
+                DRY RUN forwards
+              </button>
+              <button
+                type="button"
+                onClick={() => executeDryRun(Action.Reverse)}
+                style={backwards_dry_run ? selectedButtonStyle : buttonStyle}
+              >
+                DRY RUN backwards
+              </button>
+            </div>
+          )}
+        </div>
+        <p>
+        Before executing a migration, do a dry run first. This will generate the raw SQL for running a migration (forwards) or reversing (backwards) a migration so that you can verify it's contents.
+        </p>
+ 
+        {migrationGroup && migrationId && SQLText && (
+          <div style={sqlBox}>
+            <p style={textStyle}>
+              {header}
+            </p>
+            <textarea style={textareaStyle} readOnly value={SQLText} />
+          </div>
+        )}
+        <div style={actionsStyle}>{renderActions()}</div>
+      </form>
+      <div>
+        {migrationGroup && (
+          <Table
+            headerData={["Migration ID", "Status", "Blocking"]}
+            rowData={rowData()}
+            columnWidths={[5, 2, 2]}
+          />
+        )}
+      </div>
+    </div>
+  );
+}
+ 
+export default ClickhouseMigrations;
+ 
+const sqlBox = {
+  width: "90%",
+  height: "300px",
+};
+ 
+const migrationPicker = {
+  paddingRight: "10px",
+};
+ 
+const actionsStyle = {
+  margin: "10px 0px",
+  width: "100%",
+  padding: "10px 0px",
+};
+ 
+const buttonStyle = {
+  padding: "2px 5px",
+  marginRight: "10px",
+};
+ 
+const selectedButtonStyle = {
+  color: "red",
+  padding: "2px 5px",
+  marginRight: "10px",
+}
+ 
+const textStyle = {
+  fontSize: 14,
+};
+ 
+const dropDownStyle = {
+  padding: "2px 5px",
+  marginBottom: "4px",
+  marginRight: "10px",
+};
+ 
+const textareaStyle = {
+  marginTop: "10px",
+  width: "100%",
+  height: "200px",
+  overflowX: "scroll" as const,
+  overflowY: "scroll" as const,
+  resize: "none" as const,
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/types.tsx.html b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/types.tsx.html new file mode 100644 index 0000000000..267d79acb5 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_migrations/types.tsx.html @@ -0,0 +1,195 @@ + + + + + + Code coverage report for static/clickhouse_migrations/types.tsx + + + + + + + + + +
+
+

All files / static/clickhouse_migrations types.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
export type MigrationGroupResult = {
+  group: string;
+  migration_ids: MigrationData[];
+};
+ 
+export type MigrationData = {
+  can_run: boolean;
+  can_reverse: boolean;
+  run_reason: string;
+  reverse_reason: string;
+  blocking: boolean;
+  status: string;
+  migration_id: string;
+};
+ 
+export type GroupOptions = {
+  [key: string]: MigrationGroupResult;
+}
+ 
+export enum Action {
+    Run = "run",
+    Reverse = "reverse",
+}
+ 
+export type RunMigrationRequest = {
+    group: string;
+    action: Action;
+    migration_id: string;
+    force?: boolean;
+    fake?: boolean;
+    dry_run?: boolean;
+};
+ 
+export type RunMigrationResult = {
+    stdout: string;
+    error?: string;
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.html b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.html new file mode 100644 index 0000000000..cb35c1856c --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/clickhouse_queries + + + + + + + + + +
+
+

All files static/clickhouse_queries

+
+ +
+ 26.47% + Statements + 27/102 +
+ + +
+ 0% + Branches + 0/17 +
+ + +
+ 0% + Functions + 0/37 +
+ + +
+ 30.33% + Lines + 27/89 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
31.57%6/19100%0/00%0/735.29%6/17
query_display.tsx +
+
25.3%21/830%0/170%0/3029.16%21/72
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.tsx.html b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.tsx.html new file mode 100644 index 0000000000..8e98f610b7 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/index.tsx.html @@ -0,0 +1,267 @@ + + + + + + Code coverage report for static/clickhouse_queries/index.tsx + + + + + + + + + +
+
+

All files / static/clickhouse_queries index.tsx

+
+ +
+ 31.57% + Statements + 6/19 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 35.29% + Lines + 6/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +621x +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +1x + 
import React, { useState, useEffect } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+import QueryDisplay from "SnubaAdmin/clickhouse_queries/query_display";
+import { QueryResult, PredefinedQuery } from "./types";
+ 
+function ClickhouseQueries(props: { api: Client }) {
+  const [predefinedQueryOptions, setPredefinedQueryOptions] = useState<
+    PredefinedQuery[]
+  >([]);
+ 
+  useEffect(() => {
+    props.api.getPredefinedQueryOptions().then((res) => {
+      res.forEach(
+        (queryOption) => (queryOption.sql = formatSQL(queryOption.sql))
+      );
+      setPredefinedQueryOptions(res);
+    });
+  }, []);
+ 
+  function tablePopulator(queryResult: QueryResult) {
+    return (
+      <div style={scroll}>
+        <Table
+          headerData={queryResult.column_names}
+          rowData={queryResult.rows}
+        />
+      </div>
+    );
+  }
+ 
+  function formatSQL(sql: string) {
+    const formatted = sql
+      .split("\n")
+      .map((line) => line.substring(4, line.length))
+      .join("\n");
+    return formatted.trim();
+  }
+ 
+  return (
+    <div>
+      {QueryDisplay({
+        api: props.api,
+        resultDataPopulator: tablePopulator,
+        predefinedQueryOptions: predefinedQueryOptions,
+      })}
+    </div>
+  );
+}
+ 
+const selectStyle = {
+  marginBottom: 8,
+  height: 30,
+};
+ 
+const scroll = {
+  overflowX: "scroll" as const,
+  width: "100%",
+};
+ 
+export default ClickhouseQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/clickhouse_queries/query_display.tsx.html b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/query_display.tsx.html new file mode 100644 index 0000000000..11147c7c53 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/clickhouse_queries/query_display.tsx.html @@ -0,0 +1,930 @@ + + + + + + Code coverage report for static/clickhouse_queries/query_display.tsx + + + + + + + + + +
+
+

All files / static/clickhouse_queries query_display.tsx

+
+ +
+ 25.3% + Statements + 21/83 +
+ + +
+ 0% + Branches + 0/17 +
+ + +
+ 0% + Functions + 0/30 +
+ + +
+ 29.16% + Lines + 21/72 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +2831x +  +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +1x +  +1x +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Collapse } from "SnubaAdmin/collapse";
+import QueryEditor from "SnubaAdmin/query_editor";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+ 
+import { SelectItem, Switch } from "@mantine/core";
+import { Prism } from "@mantine/prism";
+import { RichTextEditor } from "@mantine/tiptap";
+import { useEditor } from "@tiptap/react";
+import HardBreak from "@tiptap/extension-hard-break";
+import Placeholder from "@tiptap/extension-placeholder";
+import StarterKit from "@tiptap/starter-kit";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+ 
+import {
+  ClickhouseNodeData,
+  QueryRequest,
+  QueryResult,
+  PredefinedQuery,
+} from "SnubaAdmin/clickhouse_queries/types";
+ 
+type QueryState = Partial<QueryRequest>;
+ 
+const HISTORY_KEY = "clickhouse_queries";
+function QueryDisplay(props: {
+  api: Client;
+  resultDataPopulator: (queryResult: QueryResult) => JSX.Element;
+  predefinedQueryOptions: Array<PredefinedQuery>;
+}) {
+  const [nodeData, setNodeData] = useState<ClickhouseNodeData[]>([]);
+  const [query, setQuery] = useState<QueryState>({
+    storage: getParamFromStorage("storage"),
+  });
+  const [queryResultHistory, setQueryResultHistory] = useState<QueryResult[]>(
+    getRecentHistory(HISTORY_KEY)
+  );
+ 
+  useEffect(() => {
+    props.api.getClickhouseNodes().then((res) => {
+      setNodeData(res);
+    });
+  }, []);
+ 
+  function selectStorage(storage: string) {
+    setQuery((prevQuery) => {
+      // clear old host port
+      delete prevQuery.host;
+      delete prevQuery.port;
+ 
+      return {
+        ...prevQuery,
+        storage: storage,
+      };
+    });
+  }
+ 
+  function setSudo(value: boolean) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        sudo: value,
+      };
+    });
+  }
+ 
+  function selectHost(hostString: string) {
+    const [host, portAsString] = hostString.split(":");
+ 
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        host: host,
+        port: parseInt(portAsString, 10),
+      };
+    });
+  }
+ 
+  function updateQuerySql(sql: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        sql,
+      };
+    });
+  }
+ 
+  function executeQuery() {
+    return props.api
+      .executeSystemQuery(query as QueryRequest)
+      .then((result) => {
+        result.input_query = `${query.sql} (${query.storage},${query.host}:${query.port})`;
+        setRecentHistory(HISTORY_KEY, result);
+        setQueryResultHistory((prevHistory) => [result, ...prevHistory]);
+      });
+  }
+ 
+  function copyText(text: string) {
+    window.navigator.clipboard.writeText(text);
+  }
+ 
+  function getHosts(nodeData: ClickhouseNodeData[]): SelectItem[] {
+    let node_info = nodeData.find((el) => el.storage_name === query.storage)!;
+    // populate the hosts entries marking distributed hosts that are not also local
+    Iif (node_info) {
+      let local_hosts = node_info.local_nodes.map((node) => ({
+        value: `${node.host}:${node.port}`,
+        label: `${node.host}:${node.port}`,
+      }));
+      let dist_hosts = node_info.dist_nodes
+        .filter((node) => !node_info.local_nodes.includes(node))
+        .map((node) => ({
+          value: `${node.host}:${node.port}`,
+          label: `${node.host}:${node.port} (distributed)`,
+        }));
+      let hosts = local_hosts.concat(dist_hosts);
+      let query_node = node_info.query_node;
+      Iif (query_node) {
+        hosts.push({
+          value: `${query_node.host}:${query_node.port}`,
+          label: `${query_node.host}:${query_node.port} (query node)`,
+        });
+      }
+      return hosts;
+    }
+    return [];
+  }
+ 
+  return (
+    <div>
+      <form style={query.sudo ? sudoForm : standardForm}>
+        <h2>Construct a ClickHouse System Query</h2>
+        <div>
+          <Switch
+            checked={query.sudo}
+            onChange={(evt: React.ChangeEvent<HTMLInputElement>) =>
+              setSudo(evt.currentTarget.checked)
+            }
+            onLabel="Sudo mode"
+            offLabel="User mode"
+            size="xl"
+          />
+        </div>
+        <QueryEditor
+          onQueryUpdate={(sql) => {
+            updateQuerySql(sql);
+          }}
+          predefinedQueryOptions={props.predefinedQueryOptions}
+        />
+        <div style={executeActionsStyle}>
+          <div>
+            <CustomSelect
+              value={query.storage || ""}
+              onChange={selectStorage}
+              name="storage"
+              options={nodeData.map((storage) => storage.storage_name)}
+            />
+            <CustomSelect
+              disabled={!query.storage}
+              value={
+                query.host && query.port ? `${query.host}:${query.port}` : ""
+              }
+              onChange={selectHost}
+              name="Host"
+              options={getHosts(nodeData)}
+            />
+          </div>
+          <div>
+            <ExecuteButton
+              onClick={executeQuery}
+              disabled={
+                !query.storage || !query.host || !query.port || !query.sql
+              }
+            />
+          </div>
+        </div>
+      </form>
+      <div>
+        <h2>Query results</h2>
+        {queryResultHistory.map((queryResult, idx) => {
+          Iif (idx === 0) {
+            return (
+              <div key={idx}>
+                <p>{queryResult.input_query}</p>
+                <p>
+                  <button
+                    style={executeButtonStyle}
+                    onClick={() => copyText(JSON.stringify(queryResult))}
+                  >
+                    Copy to clipboard
+                  </button>
+                </p>
+                {props.resultDataPopulator(queryResult)}
+              </div>
+            );
+          }
+ 
+          return (
+            <Collapse key={idx} text={queryResult.input_query}>
+              <button
+                style={executeButtonStyle}
+                onClick={() => copyText(JSON.stringify(queryResult))}
+              >
+                Copy to clipboard
+              </button>
+              {props.resultDataPopulator(queryResult)}
+            </Collapse>
+          );
+        })}
+      </div>
+    </div>
+  );
+}
+ 
+const sudoForm = {
+  border: "8px solid red",
+};
+ 
+const standardForm = {};
+ 
+const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+function TextArea(props: {
+  value: string;
+  onChange: (nextValue: string) => void;
+}) {
+  const { value, onChange } = props;
+  const editor = useEditor({
+    extensions: [
+      StarterKit,
+      Placeholder.configure({
+        placeholder: "Write your query here.",
+      }),
+      HardBreak.extend({
+        addKeyboardShortcuts() {
+          return {
+            Enter: () => this.editor.commands.setHardBreak(),
+          };
+        },
+      }),
+    ],
+    content: `${value}`,
+    onUpdate({ editor }) {
+      onChange(editor.getText());
+    },
+  });
+  return (
+    <div>
+      <RichTextEditor editor={editor}>
+        <RichTextEditor.Content />
+      </RichTextEditor>
+      <Prism withLineNumbers language="sql">
+        {value || ""}
+      </Prism>
+    </div>
+  );
+}
+ 
+const queryDescription = {
+  minHeight: 10,
+  width: "auto",
+  fontSize: 16,
+  padding: "10px 5px",
+};
+ 
+export default QueryDisplay;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/collapse.tsx.html b/snuba/admin/coverage/lcov-report/static/collapse.tsx.html new file mode 100644 index 0000000000..28ea742c7a --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/collapse.tsx.html @@ -0,0 +1,264 @@ + + + + + + Code coverage report for static/collapse.tsx + + + + + + + + + +
+
+

All files / static collapse.tsx

+
+ +
+ 58.82% + Statements + 10/17 +
+ + +
+ 0% + Branches + 0/6 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 71.42% + Lines + 10/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +611x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +1x +  +  +  +1x +  +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +1x +  +  +  +1x + 
import React, { useState } from "react";
+import { COLORS } from "SnubaAdmin/theme";
+ 
+function Collapse(props: { text: string; children: React.ReactNode }) {
+  const [collapsed, setCollapsed] = useState(false);
+  const { text, children } = props;
+  return (
+    <div>
+      <div style={header}>
+        <span style={collapsed ? downArrowContainer : rightArrowContainer}>
+          <a
+            style={collapsed ? downArrow : rightArrow}
+            onClick={() => setCollapsed((prev) => !prev)}
+          ></a>
+        </span>
+        <span style={indent}>{text}</span>
+      </div>
+      {collapsed && <div style={indent}>{children}</div>}
+    </div>
+  );
+}
+ 
+const header = {
+  fontSize: 16,
+  lineHeight: 1,
+  height: 20,
+  display: "flex",
+};
+ 
+const downArrowContainer = {
+  marginTop: -4,
+};
+ 
+const rightArrowContainer = {
+  marginTop: 0,
+};
+ 
+const arrow = {
+  border: `solid ${COLORS.TEXT_INACTIVE}`,
+  borderWidth: "0 2px 2px 0",
+  display: "inline-block",
+  padding: 4,
+  cursor: "pointer",
+};
+ 
+const rightArrow = {
+  ...arrow,
+  transform: "rotate(-45deg)",
+};
+ 
+const downArrow = {
+  ...arrow,
+  transform: "rotate(45deg)",
+};
+ 
+const indent = {
+  marginLeft: 20,
+};
+ 
+export { Collapse };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/common/components/index.html b/snuba/admin/coverage/lcov-report/static/common/components/index.html new file mode 100644 index 0000000000..b551fb3b0b --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/common/components/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/common/components + + + + + + + + + +
+
+

All files static/common/components

+
+ +
+ 34.28% + Statements + 12/35 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/6 +
+ + +
+ 38.7% + Lines + 12/31 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
sql_editor.tsx +
+
23.33%7/300%0/40%0/626.92%7/26
theme.tsx +
+
100%5/5100%0/0100%0/0100%5/5
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/common/components/sql_editor.tsx.html b/snuba/admin/coverage/lcov-report/static/common/components/sql_editor.tsx.html new file mode 100644 index 0000000000..afdd1c126c --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/common/components/sql_editor.tsx.html @@ -0,0 +1,291 @@ + + + + + + Code coverage report for static/common/components/sql_editor.tsx + + + + + + + + + +
+
+

All files / static/common/components sql_editor.tsx

+
+ +
+ 23.33% + Statements + 7/30 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/6 +
+ + +
+ 26.92% + Lines + 7/26 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +701x +1x +1x +1x +  +1x +1x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import React, { useLayoutEffect, useMemo, useRef } from "react";
+import { EditorState } from "@codemirror/state";
+import { EditorView, lineNumbers, keymap } from "@codemirror/view";
+import { insertNewline } from "@codemirror/commands";
+ 
+import { sql } from "@codemirror/lang-sql";
+import { theme, highlighting } from "./theme";
+ 
+export interface Props {
+  value: string;
+  onChange: (newValue: string) => void;
+}
+ 
+export function SQLEditor({ value, onChange }: Props) {
+  const elementRef = useRef<HTMLDivElement | null>(null);
+  const viewRef = useRef<EditorView | null>(null);
+ 
+  const updateListener = useMemo(() => {
+    return EditorView.updateListener.of((update) => {
+      Iif (update.docChanged) {
+        onChange(update.state.doc.toString());
+      }
+    });
+  }, [onChange]);
+ 
+  const multiNewLine = useMemo(() => {
+    return keymap.of([{ key: "Enter", run: insertNewline }]);
+  }, []);
+ 
+  const extensions = [
+    updateListener,
+    multiNewLine,
+    theme,
+    highlighting,
+    EditorView.lineWrapping,
+    lineNumbers(),
+    sql(),
+  ];
+ 
+  useLayoutEffect(() => {
+    Iif (!elementRef.current) return;
+ 
+    const state = EditorState.create({
+      extensions,
+    });
+ 
+    viewRef.current = new EditorView({
+      state,
+      parent: elementRef.current,
+    });
+  }, []);
+ 
+  useLayoutEffect(() => {
+    Iif (!viewRef.current) return;
+ 
+    const state = viewRef.current.state;
+ 
+    Iif (value !== state.doc.toString()) {
+      viewRef.current.setState(
+        EditorState.create({
+          doc: value,
+          extensions,
+        }),
+      );
+    }
+  }, [value]);
+ 
+  return <div ref={elementRef} />;
+}
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/common/components/theme.tsx.html b/snuba/admin/coverage/lcov-report/static/common/components/theme.tsx.html new file mode 100644 index 0000000000..3b12f48441 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/common/components/theme.tsx.html @@ -0,0 +1,210 @@ + + + + + + Code coverage report for static/common/components/theme.tsx + + + + + + + + + +
+
+

All files / static/common/components theme.tsx

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +431x +1x +1x +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { EditorView } from "@codemirror/view";
+import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
+import { tags } from "@lezer/highlight";
+ 
+export const theme = EditorView.theme({
+  "&": {
+    fontSize: "14px",
+  },
+});
+ 
+export const highlighting = syntaxHighlighting(
+  HighlightStyle.define([
+    {
+      tag: [tags.standard(tags.tagName), tags.tagName],
+      color: "#116329",
+      fontSize: 10,
+    },
+    { tag: [tags.comment, tags.bracket], color: "#6a737d" },
+    { tag: [tags.className, tags.propertyName], color: "#6f42c1" },
+    {
+      tag: [tags.variableName, tags.attributeName, tags.number, tags.operator],
+      color: "#005cc5",
+    },
+    {
+      tag: [tags.keyword, tags.typeName, tags.typeOperator, tags.typeName],
+      color: "#d73a49",
+    },
+    { tag: [tags.string, tags.meta, tags.regexp], color: "#032f62" },
+    { tag: [tags.name, tags.quote], color: "#22863a" },
+    { tag: [tags.heading, tags.strong], color: "#24292e", fontWeight: "bold" },
+    { tag: [tags.emphasis], color: "#24292e", fontStyle: "italic" },
+    { tag: [tags.deleted], color: "#b31d28", backgroundColor: "ffeef0" },
+    {
+      tag: [tags.atom, tags.bool, tags.special(tags.variableName)],
+      color: "#e36209",
+    },
+    { tag: [tags.url, tags.escape, tags.regexp, tags.link], color: "#032f62" },
+    { tag: tags.link, textDecoration: "underline" },
+    { tag: tags.strikethrough, textDecoration: "line-through" },
+    { tag: tags.invalid, color: "#cb2431" },
+  ]),
+);
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/data.tsx.html b/snuba/admin/coverage/lcov-report/static/data.tsx.html new file mode 100644 index 0000000000..2be71b32a5 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/data.tsx.html @@ -0,0 +1,381 @@ + + + + + + Code coverage report for static/data.tsx + + + + + + + + + +
+
+

All files / static data.tsx

+
+ +
+ 100% + Statements + 19/19 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 19/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +1001x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import RuntimeConfig from "SnubaAdmin/runtime_config";
+import AutoReplacementsBypassProjects from "SnubaAdmin/auto_replacements_bypass_projects";
+import AuditLog from "SnubaAdmin/runtime_config/auditlog";
+import ClickhouseMigrations from "SnubaAdmin/clickhouse_migrations";
+import ClickhouseQueries from "SnubaAdmin/clickhouse_queries";
+import TracingQueries from "SnubaAdmin/tracing";
+import SnQLToSQL from "SnubaAdmin/snql_to_sql";
+import Kafka from "SnubaAdmin/kafka";
+import QuerylogQueries from "SnubaAdmin/querylog";
+import CapacityManagement from "SnubaAdmin/capacity_management";
+import DeadLetterQueue from "SnubaAdmin/dead_letter_queue";
+import CardinalityAnalyzer from "SnubaAdmin/cardinality_analyzer";
+import ProductionQueries from "SnubaAdmin/production_queries";
+import MQLQueries from "SnubaAdmin/mql_queries";
+import SnubaExplain from "SnubaAdmin/snuba_explain";
+import Welcome from "SnubaAdmin/welcome";
+import DeleteTool from "SnubaAdmin/delete_tool";
+ 
+const NAV_ITEMS = [
+  { id: "overview", display: "🤿 Snuba Admin", component: Welcome },
+  { id: "config", display: "⚙️ Runtime Config", component: RuntimeConfig },
+  {
+    id: "auto-replacements-bypass-projects",
+    display: "👻 Replacements",
+    component: AutoReplacementsBypassProjects,
+  },
+  {
+    id: "capacity-management",
+    display: "🪫 Capacity Management",
+    component: CapacityManagement,
+  },
+  {
+    id: "snql-to-sql",
+    display: "🌐 SnQL to SQL",
+    component: SnQLToSQL,
+  },
+  {
+    id: "snuba-explain",
+    display: "🩺 Snubsplain",
+    component: SnubaExplain,
+  },
+  {
+    id: "system-queries",
+    display: "🏚️ System Queries",
+    component: ClickhouseQueries,
+  },
+  {
+    id: "clickhouse-migrations",
+    display: "🚧 ClickHouse Migrations",
+    component: ClickhouseMigrations,
+  },
+  {
+    id: "tracing",
+    display: "🔎 ClickHouse Tracing",
+    component: TracingQueries,
+  },
+  {
+    id: "querylog",
+    display: "🔍 ClickHouse Querylog",
+    component: QuerylogQueries,
+  },
+  {
+    id: "auditlog",
+    display: "📝 Audit Log",
+    component: AuditLog,
+  },
+  {
+    id: "kafka",
+    display: "🪵 Kafka",
+    component: Kafka,
+  },
+  {
+    id: "dlq",
+    display: "♻️ Dead Letter Queue",
+    component: DeadLetterQueue,
+  },
+  {
+    id: "cardinality-analyzer",
+    display: "🔢 Cardinality Analyzer!!!",
+    component: CardinalityAnalyzer,
+  },
+  {
+    id: "production-queries",
+    display: "🔦 Production Queries",
+    component: ProductionQueries,
+  },
+  {
+    id: "mql-queries",
+    display: "🎨 MQL Queries",
+    component: MQLQueries,
+  },
+  {
+    id: "delete-tool",
+    display: "🗑️ Delete Tool",
+    component: DeleteTool,
+  },
+];
+ 
+export { NAV_ITEMS };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.html b/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.html new file mode 100644 index 0000000000..3fc84fde04 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/dead_letter_queue + + + + + + + + + +
+
+

All files static/dead_letter_queue

+
+ +
+ 16.12% + Statements + 10/62 +
+ + +
+ 0% + Branches + 0/24 +
+ + +
+ 0% + Functions + 0/14 +
+ + +
+ 20.83% + Lines + 10/48 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
16.12%10/620%0/240%0/1420.83%10/48
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.tsx.html b/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.tsx.html new file mode 100644 index 0000000000..baa81b338d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/dead_letter_queue/index.tsx.html @@ -0,0 +1,762 @@ + + + + + + Code coverage report for static/dead_letter_queue/index.tsx + + + + + + + + + +
+
+

All files / static/dead_letter_queue index.tsx

+
+ +
+ 16.12% + Statements + 10/62 +
+ + +
+ 0% + Branches + 0/24 +
+ + +
+ 0% + Functions + 0/14 +
+ + +
+ 20.83% + Lines + 10/48 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +2271x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +1x +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { COLORS } from "SnubaAdmin/theme";
+import { Policy, ReplayInstruction, Topic } from "SnubaAdmin/dead_letter_queue/types";
+ 
+function DeadLetterQueue(props: { api: Client }) {
+  // Undefined means not loaded yet, null means no instruction was set
+  const [instruction, setInstruction] = useState<
+    ReplayInstruction | null | undefined
+  >(undefined);
+  const [isEditing, setIsEditing] = useState(false);
+  const [dlqTopics, setDlqTopics] = useState<Topic[]>([]);
+  const [topic, setTopic] = useState<Topic | null>(null);
+  const [messagesToProcess, setMessagesToProcess] = useState(1);
+  const [policy, setPolicy] = useState<Policy | null>(null);
+ 
+  useEffect(() => {
+    props.api.getDlqInstruction().then((res) => {
+      setInstruction(res);
+    });
+    props.api.getDlqTopics().then((res) => {
+      setDlqTopics(res);
+    });
+  }, []);
+ 
+  function clearInstruction() {
+    props.api.clearDlqInstruction().then((res) => {
+      setInstruction(res);
+    });
+  }
+ 
+  function replayDlq() {
+    Iif (policy === null || topic === null) {
+      return;
+    }
+ 
+    let instruction: ReplayInstruction = {
+      messagesToProcess,
+      policy,
+    };
+ 
+    props.api.setDlqInstruction(topic, instruction).then((res) => {
+      setInstruction(res);
+      setIsEditing(false);
+      setTopic(null);
+      setMessagesToProcess(0);
+      setPolicy(null);
+    });
+  }
+ 
+  Iif (typeof instruction === undefined) {
+    return null;
+  }
+ 
+  return (
+    <div>
+      <div style={currentValue}>
+        <p style={paragraphStyle}>This is the currently set DLQ instruction:</p>
+        <p>
+          <code>{JSON.stringify(instruction) || "None set"}</code>
+        </p>
+      </div>
+      {!isEditing && (
+        <div>
+          <a
+            style={linkStyle}
+            onClick={() => {
+              setIsEditing(true);
+            }}
+          >
+            edit
+          </a>
+        </div>
+      )}
+      {isEditing && (
+        <div style={{ margin: "30px 0 0 0" }}>
+          <h3 style={{ margin: "0 0 10px 0" }}>Editing</h3>
+          {instruction && (
+            <a
+              style={{ ...linkStyle, color: "red" }}
+              onClick={clearInstruction}
+            >
+              clear instruction
+            </a>
+          )}
+          {!instruction && (
+            <form style={formStyle}>
+              <fieldset>
+                <label htmlFor="topic" style={label}>
+                  Storage/topic:
+                </label>
+                <select
+                  id="topic"
+                  name="topic"
+                  value={topic ? topic.logicalName : ""}
+                  style={selectStyle}
+                  onChange={(evt) => {
+                    for (let topic of dlqTopics) {
+                      Iif (topic.logicalName === evt.target.value) {
+                        setTopic(topic);
+                        return;
+                      }
+                    }
+ 
+                    setTopic(null);
+                  }}
+                >
+                  <option disabled value="">
+                    Select DLQ topic
+                  </option>
+                  {dlqTopics.map((topic) => (
+                    <option
+                      key={`${topic.storage}-${topic.logicalName}-${topic.slice}`}
+                      value={topic.logicalName}
+                    >{`${topic.storage} - ${topic.logicalName} (slice: ${topic.slice})`}</option>
+                  ))}
+                </select>
+              </fieldset>
+              <fieldset>
+                <label htmlFor="policy" style={label}>
+                  DLQ policy:
+                </label>
+                <select
+                  id="policy"
+                  name="policy"
+                  style={selectStyle}
+                  onChange={(evt) => {
+                    let value = (evt.target.value as Policy) || null;
+                    setPolicy(value);
+                  }}
+                >
+                  <option value="">Select invalid message policy</option>
+                  <option value="reinsert-dlq">
+                    Re-insert to DLQ
+                  </option>
+                  <option value="stop-on-error">Crash on error</option>
+                  <option value="drop-invalid-messages">
+                    Drop invalid messages
+                  </option>
+                </select>
+              </fieldset>
+              <fieldset>
+                <label htmlFor="messagesToProcess" style={label}>
+                  Max messages to process:
+                </label>
+                <input
+                  type="number"
+                  id="messagesToProcess"
+                  name="messagesToProcess"
+                  value={messagesToProcess}
+                  placeholder="Max messages to process"
+                  onChange={(evt) => {
+                    let value = parseInt(evt.target.value, 10);
+                    Iif (!isNaN(value) && value >= 0) {
+                      setMessagesToProcess(value);
+                    }
+                  }}
+                />
+              </fieldset>
+              <fieldset>
+                <button
+                  type="button"
+                  style={buttonStyle}
+                  onClick={replayDlq}
+                  disabled={policy === null || topic === null}
+                >
+                  Reprocess messages
+                </button>
+              </fieldset>
+            </form>
+          )}
+          <div>
+            <a
+              style={linkStyle}
+              onClick={() => {
+                setIsEditing(false);
+              }}
+            >
+              cancel
+            </a>
+          </div>
+        </div>
+      )}
+    </div>
+  );
+}
+ 
+const currentValue = {
+  display: "block",
+  width: "100%",
+  border: `1px solid ${COLORS.TABLE_BORDER}`,
+  padding: 10,
+};
+ 
+const selectStyle = {
+  marginBottom: 8,
+  height: 30,
+};
+ 
+const buttonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const label = {
+  display: "block",
+};
+ 
+const paragraphStyle = {
+  fontSize: 15,
+  color: COLORS.TEXT_LIGHTER,
+};
+ 
+const linkStyle = {
+  cursor: "pointer",
+  fontSize: 13,
+  color: COLORS.TEXT_LIGHTER,
+  textDecoration: "underline",
+};
+ 
+const formStyle = {
+  padding: "20px 0",
+};
+ 
+export default DeadLetterQueue;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/delete_tool/index.html b/snuba/admin/coverage/lcov-report/static/delete_tool/index.html new file mode 100644 index 0000000000..86c05ee003 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/delete_tool/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/delete_tool + + + + + + + + + +
+
+

All files static/delete_tool

+
+ +
+ 4.44% + Statements + 2/45 +
+ + +
+ 0% + Branches + 0/8 +
+ + +
+ 0% + Functions + 0/13 +
+ + +
+ 6.06% + Lines + 2/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
4.44%2/450%0/80%0/136.06%2/33
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/delete_tool/index.tsx.html b/snuba/admin/coverage/lcov-report/static/delete_tool/index.tsx.html new file mode 100644 index 0000000000..15cd299f1d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/delete_tool/index.tsx.html @@ -0,0 +1,315 @@ + + + + + + Code coverage report for static/delete_tool/index.tsx + + + + + + + + + +
+
+

All files / static/delete_tool index.tsx

+
+ +
+ 4.44% + Statements + 2/45 +
+ + +
+ 0% + Branches + 0/8 +
+ + +
+ 0% + Functions + 0/13 +
+ + +
+ 6.06% + Lines + 2/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import Client from "SnubaAdmin/api_client";
+import React, { useEffect, useState } from "react"
+ 
+function DeleteTool(props: { api: Client }) {
+    const [storageName, setStorageName] = useState('')
+    const [columnConditions, setColumnConditions] = useState('')
+    const [result, setResult] = useState('')
+    const [showHelpMessage, setShowHelpMessage] = useState(false)
+    const [isDeletesEnabled, setIsDeletesEnabled] = useState(false)
+ 
+    function getHelpMessage() {
+        if (showHelpMessage) {
+            return <div style={{"backgroundColor":"#DDD"}}>
+                <h3><u>Inputs:</u></h3>
+                <p><u>Storage name</u> - the name of the storage you want to delete from.<br/>
+                <u>Column Conditions</u> - example input:
+                <pre><code>{
+`{
+    "project_id": [1]
+    "resource_id": ["123456789"]
+}`
+                }</code></pre>
+                which represents <pre><code>DELETE FROM ... WHERE project_id=1 AND resource_id='123456789'</code></pre></p>
+            </div>
+        } else {
+            return <div><p></p></div>
+        }
+    }
+ 
+    function submitRequest() {
+        let conds;
+        try {
+            conds = JSON.parse(columnConditions)
+        } catch (error) {
+            alert("expect columnConditions to be valid json but its not");
+            return;
+        }
+        let resp_status = ""
+        props.api.runLightweightDelete(storageName, conds).then(res => {
+            resp_status = `${res.status} ${res.statusText}\n`
+            if (res.headers.get("Content-Type") == "application/json") {
+                return res.json().then(json => JSON.stringify(json))
+            } else {
+                return res.text()
+            }
+        }).then(data_str => setResult(resp_status + data_str))
+    }
+ 
+    useEffect(() => {
+        fetch("/deletes-enabled").then(res => res.json()).then(data => {
+            Iif (!(data === true || data === false)) {
+                throw Error("Expected deletes-enabled to return true/false value but it didnt")
+            }
+            setIsDeletesEnabled(data)
+        })
+    }, [])
+ 
+    Iif (!isDeletesEnabled) {
+        return <p>Deletion is not enabled for this region</p>
+    }
+ 
+    return (
+        <div>
+            <div>
+            <button type="button" onClick={(event) => setShowHelpMessage(!showHelpMessage)}>Help</button>
+            {getHelpMessage()}
+            </div>
+            <input type="text" value={storageName} placeholder="storage name" onChange={(event) => setStorageName(event.target.value)} /><br/>
+            <textarea value={columnConditions} placeholder="column conditions" onChange={(event) => setColumnConditions(event.target.value)} /><br/>
+            <button type="submit" onClick={(event) => submitRequest()}>Submit</button>
+            <p>latest result:</p>
+            {result}
+        </div>
+      );
+}
+ 
+export default DeleteTool
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/index.html b/snuba/admin/coverage/lcov-report/static/index.html new file mode 100644 index 0000000000..6861d4313b --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/index.html @@ -0,0 +1,235 @@ + + + + + + Code coverage report for static + + + + + + + + + +
+
+

All files static

+
+ +
+ 49.26% + Statements + 168/341 +
+ + +
+ 38.92% + Branches + 65/167 +
+ + +
+ 26.44% + Functions + 32/121 +
+ + +
+ 48.87% + Lines + 152/311 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
api_client.tsx +
+
1.88%3/1590%0/831.23%1/812.01%3/149
collapse.tsx +
+
58.82%10/170%0/60%0/371.42%10/14
data.tsx +
+
100%19/19100%0/0100%0/0100%19/19
nav.tsx +
+
94.44%17/1893.33%14/1580%4/593.75%15/16
query_editor.tsx +
+
94.44%51/5484.44%38/4583.33%15/1895.55%43/45
query_history.tsx +
+
87.5%21/2483.33%5/6100%2/287.5%21/24
select.tsx +
+
100%17/1760%3/5100%4/4100%14/14
table.tsx +
+
90.32%28/3171.42%5/775%6/889.28%25/28
theme.tsx +
+
100%2/2100%0/0100%0/0100%2/2
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/kafka/index.html b/snuba/admin/coverage/lcov-report/static/kafka/index.html new file mode 100644 index 0000000000..46ab03f007 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/kafka/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/kafka + + + + + + + + + +
+
+

All files static/kafka

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
100%9/9100%0/0100%3/3100%7/7
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/kafka/index.tsx.html b/snuba/admin/coverage/lcov-report/static/kafka/index.tsx.html new file mode 100644 index 0000000000..6793f2ec6d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/kafka/index.tsx.html @@ -0,0 +1,138 @@ + + + + + + Code coverage report for static/kafka/index.tsx + + + + + + + + + +
+
+

All files / static/kafka index.tsx

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +192x +  +  +  +  +  +2x +  +2x +1x +1x +  +  +  +2x +  +  +2x + 
import React, { useState, useEffect } from "react";
+import { KafkaTopicData } from "SnubaAdmin/kafka/types";
+ 
+import Client from "SnubaAdmin/api_client";
+ 
+function TopicData(props: { api: Client }) {
+  const [data, setData] = useState<KafkaTopicData[] | null>(null);
+ 
+  useEffect(() => {
+    props.api.getKafkaData().then((res) => {
+      setData(res);
+    });
+  }, []);
+ 
+  return <div>{JSON.stringify(data)}</div>;
+}
+ 
+export default TopicData;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/mql_queries/index.html b/snuba/admin/coverage/lcov-report/static/mql_queries/index.html new file mode 100644 index 0000000000..9ae69e8f7d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/mql_queries/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/mql_queries + + + + + + + + + +
+
+

All files static/mql_queries

+
+ +
+ 22.47% + Statements + 20/89 +
+ + +
+ 0% + Branches + 0/28 +
+ + +
+ 0% + Functions + 0/28 +
+ + +
+ 27.39% + Lines + 20/73 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
12.65%10/790%0/280%0/2815.87%10/63
styles.tsx +
+
100%10/10100%0/0100%0/0100%10/10
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/mql_queries/index.tsx.html b/snuba/admin/coverage/lcov-report/static/mql_queries/index.tsx.html new file mode 100644 index 0000000000..4199920928 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/mql_queries/index.tsx.html @@ -0,0 +1,1203 @@ + + + + + + Code coverage report for static/mql_queries/index.tsx + + + + + + + + + +
+
+

All files / static/mql_queries index.tsx

+
+ +
+ 12.65% + Statements + 10/79 +
+ + +
+ 0% + Branches + 0/28 +
+ + +
+ 0% + Functions + 0/28 +
+ + +
+ 15.87% + Lines + 10/63 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +3741x +  +1x +1x +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { Table } from "SnubaAdmin/table";
+import {
+  QueryResult,
+  QueryResultColumnMeta,
+  MQLRequest,
+} from "SnubaAdmin/mql_queries/types";
+import { executeActionsStyle, spacing } from "SnubaAdmin/mql_queries/styles";
+import {
+  Accordion,
+  Box,
+  Button,
+  Code,
+  Collapse,
+  Group,
+  Loader,
+  Select,
+  Space,
+  Text,
+  Textarea,
+} from "@mantine/core";
+import { useDisclosure } from "@mantine/hooks";
+import { CSV } from "../cardinality_analyzer/CSV";
+ 
+const MQLQueryExample = `(sum(d:transactions/duration@millisecond{status_code: 200}) by transaction + sum(d:transactions/duration@millisecond) by transaction) * 100.0`;
+ 
+const MQLContextExample = `{
+  "start": "2024-01-01T08:00:00+00:00",
+  "end": "2024-01-01T10:30:00+00:00",
+  "rollup": {
+    "orderby": "DESC",
+    "granularity": 60,
+    "interval": null,
+    "with_totals": "True"
+  },
+  "scope": {
+    "org_ids": [101],
+    "project_ids": [1],
+    "use_case_id": "performance"
+  },
+  "indexer_mappings": {
+    "transaction.duration": "d:transactions/duration@millisecond",
+    "d:transactions/duration@millisecond": 1068,
+    "transaction": 12345,
+    "status_code": 67890
+  },
+  "limit": null,
+  "offset": null
+}`;
+ 
+function MQLQueries(props: { api: Client }) {
+  const [mql_query, setQuery] = useState<Partial<MQLRequest>>({});
+  const [raw_mql_context, setMQLContext] = useState<string>();
+  const [queryResultHistory, setQueryResultHistory] = useState<QueryResult[]>(
+    []
+  );
+  const [allowedProjects, setAllowedProjects] = useState<string[]>([]);
+  const [isExecuting, setIsExecuting] = useState<boolean>(false);
+ 
+  useEffect(() => {
+    props.api.getAllowedProjects().then((res) => {
+      setAllowedProjects(res);
+    });
+  }, []);
+ 
+  function updateMQLQuery(query: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        query,
+      };
+    });
+  }
+ 
+  function executeQuery() {
+    try {
+      let mql_context_obj = JSON.parse(raw_mql_context!);
+      mql_query.mql_context = mql_context_obj;
+      mql_query.query = mql_query.query!.trim();
+    } catch (err) {
+      Iif (err instanceof Error) {
+        console.log("ERROR", err);
+        window.alert("An error occurred: " + err.message);
+      }
+    }
+ 
+    return props.api.executeMQLQuery(mql_query as MQLRequest).then((result) => {
+      const result_columns = result.meta.map(
+        (col: QueryResultColumnMeta) => col.name
+      );
+      const query_result: QueryResult = {
+        input_query: mql_query.query,
+        input_mql_context: mql_query.mql_context,
+        columns: result_columns,
+        rows: result.data.map((obj: object) =>
+          result_columns.map(
+            (col_name: string) => obj[col_name as keyof typeof obj]
+          )
+        ),
+        duration_ms: result.timing.duration_ms,
+        quota_allowance: result.quota_allowance,
+      };
+      setQueryResultHistory((prevHistory) => [query_result, ...prevHistory]);
+    });
+  }
+ 
+  return (
+    <div>
+      <form>
+        <h2>Run a MQL Query</h2>
+        <ProjectsList projects={allowedProjects} />
+        <div style={spacing}>
+          <MQLExample />
+        </div>
+        <div>
+          <Textarea
+            value={mql_query.query || ""}
+            onChange={(evt) => updateMQLQuery(evt.target.value)}
+            placeholder="Write your MQL query here"
+            autosize
+            minRows={1}
+            maxRows={8}
+            data-testid="text-area-input"
+          />
+        </div>
+        <div style={spacing}>
+          <Textarea
+            value={raw_mql_context || ""}
+            onChange={(evt) => setMQLContext(evt.target.value)}
+            placeholder="Write the MQL context dictionary here"
+            autosize
+            minRows={4}
+            maxRows={22}
+            data-testid="text-area-input"
+          />
+        </div>
+        <div style={executeActionsStyle}>
+          <div>
+            <ExecuteButton
+              onClick={executeQuery}
+              disabled={
+                mql_query.query == undefined || raw_mql_context == undefined
+              }
+            />
+          </div>
+        </div>
+      </form>
+      <div>
+        {queryResultHistory.length > 0 && (
+          <>
+            <h2>Query results</h2>
+            <div>
+              <div id="queryResultInfo">
+                Execution Duration (ms): {queryResultHistory[0].duration_ms}
+                {QueryResultQuotaAllowance({
+                  queryResult: queryResultHistory[0],
+                })}
+              </div>
+              <Button.Group>
+                <Button
+                  variant="outline"
+                  onClick={() =>
+                    window.navigator.clipboard.writeText(
+                      JSON.stringify(queryResultHistory[0])
+                    )
+                  }
+                >
+                  Copy to clipboard (JSON)
+                </Button>
+                <Button
+                  variant="outline"
+                  onClick={() =>
+                    window.navigator.clipboard.writeText(
+                      CSV.sheet([
+                        queryResultHistory[0].columns,
+                        ...queryResultHistory[0].rows,
+                      ])
+                    )
+                  }
+                >
+                  Copy to clipboard (CSV)
+                </Button>
+              </Button.Group>
+              <Space h="md" />
+              <Table
+                headerData={queryResultHistory[0].columns}
+                rowData={queryResultHistory[0].rows}
+              />
+            </div>
+          </>
+        )}
+      </div>
+      <div>
+        {queryResultHistory.length > 1 && (
+          <>
+            <h2>Query History</h2>
+            <Accordion multiple transitionDuration={0} chevronPosition="left">
+              {queryResultHistory.slice(1).map((queryResult, idx) => {
+                return (
+                  <Accordion.Item
+                    value={(queryResultHistory.length - idx).toString()}
+                  >
+                    <Accordion.Control>
+                      query: {queryResult.input_query}, mql_context:{" "}
+                      {JSON.stringify(queryResult.input_mql_context)}
+                    </Accordion.Control>
+                    <Accordion.Panel>
+                      <QueryResultHistoryItem queryResult={queryResult} />
+                    </Accordion.Panel>
+                  </Accordion.Item>
+                );
+              })}
+            </Accordion>
+          </>
+        )}
+      </div>
+    </div>
+  );
+}
+ 
+function ProjectsList(props: { projects: string[] }) {
+  const [opened, { toggle }] = useDisclosure(false);
+ 
+  return (
+    <Box mb="xs" mx="auto">
+      <Group position="left" mb={5}>
+        <Button onClick={toggle}>
+          {opened ? "Hide" : "View"} Allowed Projects
+        </Button>
+      </Group>
+ 
+      <Collapse in={opened}>
+        <Text>{props.projects.join(", ")}</Text>
+      </Collapse>
+    </Box>
+  );
+}
+ 
+function MQLExample() {
+  const [opened, { toggle }] = useDisclosure(false);
+ 
+  return (
+    <Box mb="xs" mx="auto">
+      <Group position="left" mb={5}>
+        <Button onClick={toggle}>{opened ? "Hide" : "View"} MQL Example</Button>
+      </Group>
+ 
+      <Collapse in={opened}>
+        MQL Query:
+        <Code block>{MQLQueryExample}</Code>
+        MQL Context:
+        <Code block>{MQLContextExample}</Code>
+      </Collapse>
+    </Box>
+  );
+}
+ 
+function renderThrottleStatus(isThrottled: boolean, reasonHeader: string[]) {
+  return isThrottled ? (
+    <Text
+      style={{ color: "darkorange", fontFamily: "Arial", fontSize: "medium" }}
+    >
+      Quota Allowance - Throttled <br />
+      <ol>
+        {reasonHeader.map((line, index) => (
+          <li key={index}>{line}</li>
+        ))}
+      </ol>
+    </Text>
+  ) : (
+    <Text style={{ color: "green", fontFamily: "Arial", fontSize: "medium" }}>
+      Quota Allowance - Not throttled <br />
+      MQL Query executed with 10 threads.
+    </Text>
+  );
+}
+ 
+function renderPolicyDetails(props: { queryResult: QueryResult }) {
+  return (
+    <>
+      {props.queryResult.quota_allowance &&
+        Object.keys(props.queryResult.quota_allowance).map((policy, index) => {
+          const { can_run, ...policyDetails } =
+            props.queryResult.quota_allowance![policy]; // remove can_run from policyDetails
+          const policyDetailsString = JSON.stringify(policyDetails);
+          return (
+            <React.Fragment key={index}>
+              <Text size="xs">{policy}</Text>
+              <Text size="xs">{policyDetailsString}</Text>
+            </React.Fragment>
+          );
+        })}
+    </>
+  );
+}
+ 
+function QueryResultQuotaAllowance(props: { queryResult: QueryResult }) {
+  const isThrottled: boolean =
+    (props.queryResult.quota_allowance &&
+      Object.values(props.queryResult.quota_allowance).some(
+        (policy) => policy.max_threads < 10
+      )) ||
+    false;
+  let reasonHeader: string[] = [];
+  Iif (isThrottled) {
+    props.queryResult.quota_allowance &&
+      Object.keys(props.queryResult.quota_allowance).forEach((policyName) => {
+        const policy = props.queryResult.quota_allowance![policyName];
+        Iif (policy.max_threads < 10 && policy.explanation.reason != null) {
+          reasonHeader.push(
+            policyName +
+              ": " +
+              policy.explanation.reason +
+              ". MQL Query executed with " +
+              policy.max_threads +
+              " threads."
+          );
+        }
+      });
+  }
+  return (
+    <Accordion multiple transitionDuration={0} chevronPosition="left">
+      <Accordion.Item value="0">
+        <Accordion.Control>
+          {renderThrottleStatus(isThrottled, reasonHeader)}
+        </Accordion.Control>
+        <Accordion.Panel>{renderPolicyDetails(props)}</Accordion.Panel>
+      </Accordion.Item>
+    </Accordion>
+  );
+}
+ 
+function QueryResultHistoryItem(props: { queryResult: QueryResult }) {
+  return (
+    <div>
+      <div id="queryResultInfo">
+        Execution Duration (ms): {props.queryResult.duration_ms}
+        {QueryResultQuotaAllowance({ queryResult: props.queryResult })}
+      </div>
+      <Button.Group>
+        <Button
+          variant="outline"
+          onClick={() =>
+            window.navigator.clipboard.writeText(
+              JSON.stringify(props.queryResult)
+            )
+          }
+        >
+          Copy to clipboard (JSON)
+        </Button>
+        <Button
+          variant="outline"
+          onClick={() =>
+            window.navigator.clipboard.writeText(
+              CSV.sheet([props.queryResult.columns, ...props.queryResult.rows])
+            )
+          }
+        >
+          Copy to clipboard (CSV)
+        </Button>
+      </Button.Group>
+      <Space h="md" />
+      <Table
+        headerData={props.queryResult.columns}
+        rowData={props.queryResult.rows}
+      />
+    </div>
+  );
+}
+ 
+export default MQLQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/mql_queries/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/mql_queries/styles.tsx.html new file mode 100644 index 0000000000..03daf27314 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/mql_queries/styles.tsx.html @@ -0,0 +1,174 @@ + + + + + + Code coverage report for static/mql_queries/styles.tsx + + + + + + + + + +
+
+

All files / static/mql_queries styles.tsx

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +311x +  +  +  +  +  +1x +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +1x +  +  +1x +1x +1x +1x +1x +  + 
const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const spacing = {
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+let collapsibleStyle = { listStyleType: "none", fontFamily: "Monaco" };
+ 
+export {
+  executeActionsStyle,
+  executeButtonStyle,
+  selectStyle,
+  collapsibleStyle,
+  spacing,
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/nav.tsx.html b/snuba/admin/coverage/lcov-report/static/nav.tsx.html new file mode 100644 index 0000000000..1ff8382a65 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/nav.tsx.html @@ -0,0 +1,312 @@ + + + + + + Code coverage report for static/nav.tsx + + + + + + + + + +
+
+

All files / static nav.tsx

+
+ +
+ 94.44% + Statements + 17/18 +
+ + +
+ 93.33% + Branches + 14/15 +
+ + +
+ 80% + Functions + 4/5 +
+ + +
+ 93.75% + Lines + 15/16 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +771x +1x +1x +  +  +  +  +  +  +  +  +  +12x +  +4x +  +  +4x +2x +  +  +  +2x +2x +  +  +  +4x +  +  +  +68x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +1x + 
import React, { useState } from "react";
+import { COLORS } from "SnubaAdmin/theme";
+import { NAV_ITEMS } from "SnubaAdmin/data";
+import Client from "SnubaAdmin/api_client";
+ 
+type NavProps = {
+  active: string | null;
+  navigate: (nextTab: string) => void;
+  api: Client;
+};
+ 
+function Nav(props: NavProps) {
+  const { active, navigate, api } = props;
+ 
+  const [allowedTools, setAllowedTools] = useState<string[] | null>(null);
+ 
+  // Load data if it was not previously loaded
+  if (allowedTools === null) {
+    fetchData();
+  }
+ 
+  function fetchData() {
+    api.getAllowedTools().then((res) => {
+      setAllowedTools(res.tools);
+    });
+  }
+ 
+  return (
+    <nav style={navStyle}>
+      <ul style={ulStyle}>
+        {NAV_ITEMS.map((item) =>
+          allowedTools?.includes(item.id) || allowedTools?.includes("all") ? (
+            item.id === active ? (
+              <li key={item.id} style={{ color: COLORS.TEXT_DEFAULT }}>
+                <a className="nav-link-active" style={linkStyle}>
+                  {item.display}
+                </a>
+              </li>
+            ) : (
+              <li key={item.id} style={{ color: COLORS.TEXT_INACTIVE }}>
+                <a
+                  className="nav-link"
+                  style={linkStyle}
+                  onClick={() => navigate(item.id)}
+                >
+                  {item.display}
+                </a>
+              </li>
+            )
+          ) : (
+            <div key={item.id} />
+          )
+        )}
+      </ul>
+    </nav>
+  );
+}
+ 
+const navStyle = {
+  borderRight: `1px solid ${COLORS.NAV_BORDER}`,
+  width: 250,
+};
+ 
+const ulStyle = {
+  listStyleType: "none",
+  margin: 0,
+  padding: 0,
+};
+ 
+const linkStyle = {
+  display: "block",
+  cursor: "pointer",
+  padding: 20,
+};
+ 
+export default Nav;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/production_queries/index.html b/snuba/admin/coverage/lcov-report/static/production_queries/index.html new file mode 100644 index 0000000000..3df1aa0b88 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/production_queries/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/production_queries + + + + + + + + + +
+
+

All files static/production_queries

+
+ +
+ 24.05% + Statements + 19/79 +
+ + +
+ 0% + Branches + 0/25 +
+ + +
+ 0% + Functions + 0/30 +
+ + +
+ 28.35% + Lines + 19/67 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
15.49%11/710%0/250%0/3018.64%11/59
styles.tsx +
+
100%8/8100%0/0100%0/0100%8/8
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/production_queries/index.tsx.html b/snuba/admin/coverage/lcov-report/static/production_queries/index.tsx.html new file mode 100644 index 0000000000..db92cd145d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/production_queries/index.tsx.html @@ -0,0 +1,1068 @@ + + + + + + Code coverage report for static/production_queries/index.tsx + + + + + + + + + +
+
+

All files / static/production_queries index.tsx

+
+ +
+ 15.49% + Statements + 11/71 +
+ + +
+ 0% + Branches + 0/25 +
+ + +
+ 0% + Functions + 0/30 +
+ + +
+ 18.64% + Lines + 11/59 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +3291x +  +1x +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+import {
+  QueryResult,
+  QueryResultColumnMeta,
+  SnQLRequest,
+} from "SnubaAdmin/production_queries/types";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { executeActionsStyle } from "SnubaAdmin/production_queries/styles";
+import {
+  Accordion,
+  Box,
+  Button,
+  Collapse,
+  Group,
+  Space,
+  Text,
+  Textarea,
+} from "@mantine/core";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+import { useDisclosure } from "@mantine/hooks";
+import { CSV } from "SnubaAdmin/cardinality_analyzer/CSV";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+ 
+const HISTORY_KEY = "production_queries";
+function ProductionQueries(props: { api: Client }) {
+  const [datasets, setDatasets] = useState<string[]>([]);
+  const [allowedProjects, setAllowedProjects] = useState<string[]>([]);
+  const [snql_query, setQuery] = useState<Partial<SnQLRequest>>({
+    dataset: getParamFromStorage("dataset"),
+  });
+  const [queryResultHistory, setQueryResultHistory] = useState<QueryResult[]>(
+    getRecentHistory(HISTORY_KEY)
+  );
+ 
+  useEffect(() => {
+    props.api.getSnubaDatasetNames().then((res) => {
+      setDatasets(res);
+    });
+  }, []);
+ 
+  useEffect(() => {
+    props.api.getAllowedProjects().then((res) => {
+      setAllowedProjects(res);
+    });
+  }, []);
+ 
+  function selectDataset(dataset: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        dataset,
+      };
+    });
+  }
+ 
+  function updateQuerySql(query: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        query,
+      };
+    });
+  }
+ 
+  function executeQuery() {
+    return props.api
+      .executeSnQLQuery(snql_query as SnQLRequest)
+      .then((result) => {
+        const result_columns = result.meta.map(
+          (col: QueryResultColumnMeta) => col.name
+        );
+        const query_result: QueryResult = {
+          input_query: snql_query.query,
+          columns: result_columns,
+          rows: result.data.map((obj: object) =>
+            result_columns.map(
+              (col_name: string) => obj[col_name as keyof typeof obj]
+            )
+          ),
+          duration_ms: result.timing.duration_ms,
+          quota_allowance: result.quota_allowance,
+        };
+        setRecentHistory(HISTORY_KEY, query_result);
+        setQueryResultHistory((prevHistory) => [query_result, ...prevHistory]);
+      });
+  }
+ 
+  return (
+    <div>
+      <form>
+        <h2>Run a SnQL Query</h2>
+        <ProjectsList projects={allowedProjects} />
+        <div>
+          <Textarea
+            value={snql_query.query || ""}
+            onChange={(evt) => updateQuerySql(evt.target.value)}
+            placeholder="Write your query here"
+            autosize
+            minRows={2}
+            maxRows={8}
+            data-testid="text-area-input"
+          />
+        </div>
+        <div style={executeActionsStyle}>
+          <div>
+            <CustomSelect
+              value={snql_query.dataset || ""}
+              onChange={selectDataset}
+              options={datasets}
+              name="dataset"
+            />
+          </div>
+          <div>
+            <ExecuteButton
+              onClick={executeQuery}
+              disabled={
+                snql_query.dataset == undefined || snql_query.query == undefined
+              }
+            />
+          </div>
+        </div>
+      </form>
+      <div>
+        {queryResultHistory.length > 0 && (
+          <>
+            <h2>Query results</h2>
+            <div>
+              <div id="queryResultInfo">
+                Execution Duration (ms): {queryResultHistory[0].duration_ms}
+                {QueryResultQuotaAllowance({
+                  queryResult: queryResultHistory[0],
+                })}
+              </div>
+              <Button.Group>
+                <Button
+                  variant="outline"
+                  onClick={() =>
+                    window.navigator.clipboard.writeText(
+                      JSON.stringify(queryResultHistory[0])
+                    )
+                  }
+                >
+                  Copy to clipboard (JSON)
+                </Button>
+                <Button
+                  variant="outline"
+                  onClick={() =>
+                    window.navigator.clipboard.writeText(
+                      CSV.sheet([
+                        queryResultHistory[0].columns,
+                        ...queryResultHistory[0].rows,
+                      ])
+                    )
+                  }
+                >
+                  Copy to clipboard (CSV)
+                </Button>
+              </Button.Group>
+              <Space h="md" />
+              <Table
+                headerData={queryResultHistory[0].columns}
+                rowData={queryResultHistory[0].rows}
+              />
+            </div>
+          </>
+        )}
+      </div>
+      <div>
+        {queryResultHistory.length > 1 && (
+          <>
+            <h2>Query History</h2>
+            <Accordion multiple transitionDuration={0} chevronPosition="left">
+              {queryResultHistory.slice(1).map((queryResult, idx) => {
+                return (
+                  <Accordion.Item
+                    value={(queryResultHistory.length - idx).toString()}
+                  >
+                    <Accordion.Control>
+                      {queryResult.input_query}
+                    </Accordion.Control>
+                    <Accordion.Panel>
+                      <QueryResultHistoryItem queryResult={queryResult} />
+                    </Accordion.Panel>
+                  </Accordion.Item>
+                );
+              })}
+            </Accordion>
+          </>
+        )}
+      </div>
+    </div>
+  );
+}
+ 
+function ProjectsList(props: { projects: string[] }) {
+  const [opened, { toggle }] = useDisclosure(false);
+ 
+  return (
+    <Box mb="xs" mx="auto">
+      <Group position="left" mb={5}>
+        <Button onClick={toggle}>
+          {opened ? "Hide" : "View"} Allowed Projects
+        </Button>
+      </Group>
+ 
+      <Collapse in={opened}>
+        <Text>{props.projects.join(", ")}</Text>
+      </Collapse>
+    </Box>
+  );
+}
+ 
+function renderThrottleStatus(isThrottled: boolean, reasonHeader: string[]) {
+  return isThrottled ? (
+    <Text
+      style={{ color: "darkorange", fontFamily: "Arial", fontSize: "medium" }}
+    >
+      Quota Allowance - Throttled <br />
+      <ol>
+        {reasonHeader.map((line, index) => (
+          <li key={index}>{line}</li>
+        ))}
+      </ol>
+    </Text>
+  ) : (
+    <Text style={{ color: "green", fontFamily: "Arial", fontSize: "medium" }}>
+      Quota Allowance - Not throttled <br />
+      SnQL Query executed with 10 threads.
+    </Text>
+  );
+}
+ 
+function renderPolicyDetails(props: { queryResult: QueryResult }) {
+  return (
+    <>
+      {props.queryResult.quota_allowance &&
+        Object.keys(props.queryResult.quota_allowance).map((policy, index) => {
+          const { can_run, ...policyDetails } =
+            props.queryResult.quota_allowance![policy]; // remove can_run from policyDetails
+          const policyDetailsString = JSON.stringify(policyDetails);
+          return (
+            <React.Fragment key={index}>
+              <Text size="xs">{policy}</Text>
+              <Text size="xs">{policyDetailsString}</Text>
+            </React.Fragment>
+          );
+        })}
+    </>
+  );
+}
+ 
+function QueryResultQuotaAllowance(props: { queryResult: QueryResult }) {
+  const isThrottled: boolean =
+    (props.queryResult.quota_allowance &&
+      Object.values(props.queryResult.quota_allowance).some(
+        (policy) => policy.max_threads < 10
+      )) ||
+    false;
+  let reasonHeader: string[] = [];
+  Iif (isThrottled) {
+    props.queryResult.quota_allowance &&
+      Object.keys(props.queryResult.quota_allowance).forEach((policyName) => {
+        const policy = props.queryResult.quota_allowance![policyName];
+        Iif (policy.max_threads < 10 && policy.explanation.reason != null) {
+          reasonHeader.push(
+            policyName +
+              ": " +
+              policy.explanation.reason +
+              ". SnQL Query executed with " +
+              policy.max_threads +
+              " threads."
+          );
+        }
+      });
+  }
+  return (
+    <Accordion multiple transitionDuration={0} chevronPosition="left">
+      <Accordion.Item value="0">
+        <Accordion.Control>
+          {renderThrottleStatus(isThrottled, reasonHeader)}
+        </Accordion.Control>
+        <Accordion.Panel>{renderPolicyDetails(props)}</Accordion.Panel>
+      </Accordion.Item>
+    </Accordion>
+  );
+}
+ 
+function QueryResultHistoryItem(props: { queryResult: QueryResult }) {
+  return (
+    <div>
+      <div id="queryResultInfo">
+        Execution Duration (ms): {props.queryResult.duration_ms}
+        {QueryResultQuotaAllowance({ queryResult: props.queryResult })}
+      </div>
+      <Button.Group>
+        <Button
+          variant="outline"
+          onClick={() =>
+            window.navigator.clipboard.writeText(
+              JSON.stringify(props.queryResult)
+            )
+          }
+        >
+          Copy to clipboard (JSON)
+        </Button>
+        <Button
+          variant="outline"
+          onClick={() =>
+            window.navigator.clipboard.writeText(
+              CSV.sheet([props.queryResult.columns, ...props.queryResult.rows])
+            )
+          }
+        >
+          Copy to clipboard (CSV)
+        </Button>
+      </Button.Group>
+      <Space h="md" />
+      <Table
+        headerData={props.queryResult.columns}
+        rowData={props.queryResult.rows}
+      />
+    </div>
+  );
+}
+ 
+export default ProductionQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/production_queries/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/production_queries/styles.tsx.html new file mode 100644 index 0000000000..609f9b00e5 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/production_queries/styles.tsx.html @@ -0,0 +1,159 @@ + + + + + + Code coverage report for static/production_queries/styles.tsx + + + + + + + + + +
+
+

All files / static/production_queries styles.tsx

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 8/8 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +261x +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +1x +  +  +1x +1x +1x +1x +  + 
const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+let collapsibleStyle = { listStyleType: "none", fontFamily: "Monaco" };
+ 
+export {
+  executeActionsStyle,
+  executeButtonStyle,
+  selectStyle,
+  collapsibleStyle,
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/query_editor.tsx.html b/snuba/admin/coverage/lcov-report/static/query_editor.tsx.html new file mode 100644 index 0000000000..95901729dc --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/query_editor.tsx.html @@ -0,0 +1,594 @@ + + + + + + Code coverage report for static/query_editor.tsx + + + + + + + + + +
+
+

All files / static query_editor.tsx

+
+ +
+ 94.44% + Statements + 51/54 +
+ + +
+ 84.44% + Branches + 38/45 +
+ + +
+ 83.33% + Functions + 15/18 +
+ + +
+ 95.55% + Lines + 43/45 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +1713x +  +3x +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +  +  +28x +28x +14x +3x +  +  +28x +  +  +  +3x +  +  +  +16x +9x +  +  +  +  +  +  +  +  +  +  +  +  +38x +38x +  +  +38x +  +  +  +  +38x +  +  +38x +  +  +  +38x +  +38x +15x +  +  +  +  +15x +15x +  +  +  +38x +26x +26x +26x +  +  +  +  +  +  +  +21x +  +  +  +  +  +  +4x +6x +  +4x +4x +  +  +  +  +  +42x +  +  +  +  +  +  +  +  +  +  +38x +38x +16x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +38x +  +  +38x +  +  +  +  +  +  +  +  +  +  +  +6x +6x +  +  +  +  +  +  +  +  +  +3x +  +  +  +3x + 
import React, { useEffect, useState, ReactElement } from "react";
+ 
+import { Box } from "@mantine/core";
+import { SQLEditor } from "SnubaAdmin/common/components/sql_editor";
+import { useLocalStorage } from "@mantine/hooks";
+import { CustomSelect } from "SnubaAdmin/select";
+ 
+type PredefinedQuery = {
+  name: string;
+  sql: string;
+  description: string;
+};
+ 
+type QueryParamValues = {
+  [key: string]: string;
+};
+ 
+/** @private */
+export function generateQuery(
+  queryTemplate: string,
+  queryParamValues: QueryParamValues
+) {
+  let query = queryTemplate;
+  Object.keys(queryParamValues).forEach((param) => {
+    if (queryParamValues[param]) {
+      query = query.split(param).join(queryParamValues[param]);
+    }
+  });
+  return query;
+}
+ 
+/** @private */
+export function mergeQueryParamValues(
+  newQueryParams: Set<string>,
+  oldQueryParamValues: QueryParamValues
+) {
+  return Array.from(newQueryParams).reduce(
+    (o, paramName) => ({
+      ...o,
+      [paramName]:
+        paramName in oldQueryParamValues ? oldQueryParamValues[paramName] : "",
+    }),
+    {}
+  );
+}
+ 
+function QueryEditor(props: {
+  onQueryUpdate: (query: string) => void;
+  predefinedQueryOptions?: Array<PredefinedQuery>;
+}) {
+  const [query, setQuery] = useState<string>("");
+  const hash = window.location.hash;
+ 
+  // Namespace the storage by the hash, which corresponds to the screen
+  const [queryTemplate, setQueryTemplate] = useLocalStorage<string>({
+    key: `${hash}-query-editor-query`,
+    defaultValue: "",
+  });
+ 
+  const [queryParamValues, setQueryParamValues] = useState<QueryParamValues>(
+    {}
+  );
+  const [selectedPredefinedQuery, setSelectedPredefinedQuery] = useState<
+    PredefinedQuery | undefined
+  >(undefined);
+ 
+  const variableRegex = /{{([a-zA-Z0-9_]+)}}/;
+ 
+  useEffect(() => {
+    const newQueryParams = new Set(
+      queryTemplate.match(
+        new RegExp(variableRegex.source, variableRegex.flags + "g")
+      )
+    );
+    setQueryParamValues((oldQueryParamValues) =>
+      mergeQueryParamValues(newQueryParams, oldQueryParamValues)
+    );
+  }, [queryTemplate]);
+ 
+  useEffect(() => {
+    const newQuery = generateQuery(queryTemplate, queryParamValues);
+    setQuery(newQuery);
+    props.onQueryUpdate(newQuery);
+  }, [queryTemplate, queryParamValues]);
+ 
+  function updateQueryParameter(name: string, value: string) {
+    setQueryParamValues((queryParams) => ({ ...queryParams, [name]: value }));
+  }
+ 
+  function renderPredefinedQueriesSelectors() {
+    return (
+      <div>
+        <label>Predefined query: </label>
+        <div style={predefinedQueryStyle}>
+          <CustomSelect
+            value={selectedPredefinedQuery?.name ?? "undefined"}
+            onChange={(value) => {
+              let selectedPredefinedQuery = props?.predefinedQueryOptions?.find(
+                (predefinedQuery) => predefinedQuery.name == value
+              );
+              setSelectedPredefinedQuery(selectedPredefinedQuery);
+              setQueryTemplate(selectedPredefinedQuery?.sql ?? "");
+            }}
+            name="predefined query"
+            options={
+              props.predefinedQueryOptions
+                ? props.predefinedQueryOptions.map(
+                    (predefinedQuery) => predefinedQuery.name
+                  )
+                : []
+            }
+          />
+        </div>
+      </div>
+    );
+  }
+ 
+  function renderParameterSetters() {
+    let setters: Array<ReactElement> = [];
+    Object.keys(queryParamValues).forEach((paramName) => {
+      setters.push(
+        <div key={paramName}>
+          <div>
+            <label>
+              {paramName.match(variableRegex)?.[1]}
+              <br />
+              <textarea
+                value={queryParamValues[paramName]}
+                onChange={(evt) => {
+                  updateQueryParameter(paramName, evt.target.value);
+                }}
+                data-testid="parameter-value"
+              />
+            </label>
+          </div>
+          <hr />
+        </div>
+      );
+    });
+    return setters;
+  }
+ 
+  return (
+    <form>
+      {props.predefinedQueryOptions != null &&
+        renderPredefinedQueriesSelectors()}
+      {selectedPredefinedQuery?.description ? (
+        <p>{selectedPredefinedQuery?.description}</p>
+      ) : null}
+ 
+      <Box my="md">
+        <SQLEditor
+          value={queryTemplate}
+          onChange={(newValue) => {
+            setSelectedPredefinedQuery(undefined);
+            setQueryTemplate(newValue);
+          }}
+        />
+      </Box>
+ 
+      {renderParameterSetters()}
+    </form>
+  );
+}
+ 
+const predefinedQueryStyle = {
+  display: "inline-block",
+};
+ 
+export default QueryEditor;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/query_history.tsx.html b/snuba/admin/coverage/lcov-report/static/query_history.tsx.html new file mode 100644 index 0000000000..15c87d925c --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/query_history.tsx.html @@ -0,0 +1,204 @@ + + + + + + Code coverage report for static/query_history.tsx + + + + + + + + + +
+
+

All files / static query_history.tsx

+
+ +
+ 87.5% + Statements + 21/24 +
+ + +
+ 83.33% + Branches + 5/6 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 87.5% + Lines + 21/24 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +3x +  +3x +10x +10x +10x +  +  +10x +10x +10x +6x +  +10x +10x +  +10x +1x +  +10x +  +  +  +  +  +  +3x +10x +10x +10x +3x +3x +  +  +  +  +7x +  +  + 
// Set a max history size so we don't slow the page down with 100s of queries
+const HISTORY_SIZE = 5;
+ 
+export function setRecentHistory(key: string, query: any) {
+  const storageKey = `${key}.history`
+  try {
+    Iif (query === undefined) {
+      return;
+    }
+    const recentHistory = localStorage.getItem(storageKey);
+    let queries: any[] = []
+    if (recentHistory) {
+      queries = JSON.parse(recentHistory);
+    }
+    if (!queries.includes(query)) {
+      queries.unshift(query);
+    }
+    if (queries.length > HISTORY_SIZE) {
+      queries.pop();
+    }
+    localStorage.setItem(storageKey, JSON.stringify(queries));
+  } catch {
+    // If we error lets wipe history so we don't constantly loop in error land
+    localStorage.removeItem(storageKey);
+  }
+}
+ 
+export function getRecentHistory(key: string) {
+  const storageKey = `${key}.history`
+  const recentHistory = localStorage.getItem(storageKey)
+  if (recentHistory) {
+    try {
+      return JSON.parse(recentHistory);
+    } catch {
+      return [];
+    }
+  } else {
+    return [];
+  }
+}
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/querylog/index.html b/snuba/admin/coverage/lcov-report/static/querylog/index.html new file mode 100644 index 0000000000..d19e966411 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/querylog/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/querylog + + + + + + + + + +
+
+

All files static/querylog

+
+ +
+ 24% + Statements + 18/75 +
+ + +
+ 0% + Branches + 0/9 +
+ + +
+ 0% + Functions + 0/29 +
+ + +
+ 28.12% + Lines + 18/64 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
31.57%6/19100%0/00%0/735.29%6/17
query_display.tsx +
+
21.42%12/560%0/90%0/2225.53%12/47
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/querylog/index.tsx.html b/snuba/admin/coverage/lcov-report/static/querylog/index.tsx.html new file mode 100644 index 0000000000..b92c520655 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/querylog/index.tsx.html @@ -0,0 +1,267 @@ + + + + + + Code coverage report for static/querylog/index.tsx + + + + + + + + + +
+
+

All files / static/querylog index.tsx

+
+ +
+ 31.57% + Statements + 6/19 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 35.29% + Lines + 6/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +621x +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +1x + 
import React, { useState, useEffect } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+import QueryDisplay from "SnubaAdmin/querylog/query_display";
+import { QuerylogResult, PredefinedQuery } from "./types";
+ 
+function QuerylogQueries(props: { api: Client }) {
+  const [predefinedQueryOptions, setPredefinedQueryOptions] = useState<
+    PredefinedQuery[]
+  >([]);
+ 
+  useEffect(() => {
+    props.api.getPredefinedQuerylogOptions().then((res) => {
+      res.forEach(
+        (queryOption) => (queryOption.sql = formatSQL(queryOption.sql))
+      );
+      setPredefinedQueryOptions(res);
+    });
+  }, []);
+ 
+  function tablePopulator(queryResult: QuerylogResult) {
+    return (
+      <div style={scroll}>
+        <Table
+          headerData={queryResult.column_names}
+          rowData={queryResult.rows}
+        />
+      </div>
+    );
+  }
+ 
+  function formatSQL(sql: string) {
+    const formatted = sql
+      .split("\n")
+      .map((line) => line.substring(4, line.length))
+      .join("\n");
+    return formatted.trim();
+  }
+ 
+  return (
+    <div>
+      {QueryDisplay({
+        api: props.api,
+        resultDataPopulator: tablePopulator,
+        predefinedQueryOptions: predefinedQueryOptions,
+      })}
+    </div>
+  );
+}
+ 
+const selectStyle = {
+  marginBottom: 8,
+  height: 30,
+};
+ 
+const scroll = {
+  overflowX: "scroll" as const,
+  width: "100%",
+};
+ 
+export default QuerylogQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/querylog/query_display.tsx.html b/snuba/admin/coverage/lcov-report/static/querylog/query_display.tsx.html new file mode 100644 index 0000000000..52cba0402b --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/querylog/query_display.tsx.html @@ -0,0 +1,639 @@ + + + + + + Code coverage report for static/querylog/query_display.tsx + + + + + + + + + +
+
+

All files / static/querylog query_display.tsx

+
+ +
+ 21.42% + Statements + 12/56 +
+ + +
+ 0% + Branches + 0/9 +
+ + +
+ 0% + Functions + 0/22 +
+ + +
+ 25.53% + Lines + 12/47 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +1861x +1x +  +1x +1x +1x +  +  +1x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x + 
import React, { useState } from "react";
+import { Button } from "@mantine/core";
+import Client from "SnubaAdmin/api_client";
+import { Collapse } from "SnubaAdmin/collapse";
+import QueryEditor from "SnubaAdmin/query_editor";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+ 
+import { QuerylogRequest, QuerylogResult, PredefinedQuery } from "./types";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+ 
+type QueryState = Partial<QuerylogRequest>;
+const HISTORY_KEY = "querylog";
+ 
+function QueryDisplay(props: {
+  api: Client;
+  resultDataPopulator: (queryResult: QuerylogResult) => JSX.Element;
+  predefinedQueryOptions: Array<PredefinedQuery>;
+}) {
+  const [query, setQuery] = useState<QueryState>({});
+  const [queryResultHistory, setQueryResultHistory] = useState<
+    QuerylogResult[]
+  >(getRecentHistory(HISTORY_KEY));
+ 
+  function updateQuerySql(sql: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        sql,
+      };
+    });
+  }
+ 
+  function executeQuery() {
+    return props.api
+      .executeQuerylogQuery(query as QuerylogRequest)
+      .then((result) => {
+        result.input_query = query.sql || "<Input Query>";
+        setRecentHistory(HISTORY_KEY, result);
+        setQueryResultHistory((prevHistory) => [result, ...prevHistory]);
+      });
+  }
+ 
+  function getQuerylogSchema() {
+    props.api
+      .getQuerylogSchema()
+      .then((result) => {
+        result.input_query = "View Querylog Schema";
+        setQueryResultHistory((prevHistory) => [result, ...prevHistory]);
+      })
+      .catch((err) => {
+        console.log("ERROR", err);
+        window.alert("An error occurred: " + err.error.message);
+      });
+  }
+ 
+  function convertResultsToCSV(queryResult: QuerylogResult) {
+    let output = queryResult.column_names.join(",");
+    for (const row of queryResult.rows) {
+      const escaped = row.map((v) =>
+        typeof v == "string" && v.includes(",") ? '"' + v + '"' : v
+      );
+      output = output + "\n" + escaped.join(",");
+    }
+    return output;
+  }
+ 
+  function copyText(queryResult: QuerylogResult, format: string) {
+    const formatter = format == "csv" ? convertResultsToCSV : JSON.stringify;
+    window.navigator.clipboard.writeText(formatter(queryResult));
+  }
+ 
+  return (
+    <div>
+      <h2>Construct a Querylog Query</h2>
+      <QueryEditor
+        onQueryUpdate={(sql) => {
+          updateQuerySql(sql);
+        }}
+        predefinedQueryOptions={props.predefinedQueryOptions}
+      />
+      <div style={executeActionsStyle}>
+        <div>
+          <ExecuteButton onClick={executeQuery} disabled={!query.sql} />
+          <Button
+            onClick={(evt: any) => {
+              evt.preventDefault();
+              getQuerylogSchema();
+            }}
+          >
+            View Querylog Schema
+          </Button>
+        </div>
+      </div>
+      <div>
+        <h2>Query results</h2>
+        {queryResultHistory.map((queryResult, idx) => {
+          Iif (idx === 0) {
+            return (
+              <div key={idx}>
+                <p>{queryResult.input_query}</p>
+                <p>
+                  <button
+                    style={executeButtonStyle}
+                    onClick={() => copyText(queryResult, "json")}
+                  >
+                    Copy to clipboard (JSON)
+                  </button>
+                </p>
+                <p>
+                  <button
+                    style={executeButtonStyle}
+                    onClick={() => copyText(queryResult, "csv")}
+                  >
+                    Copy to clipboard (CSV)
+                  </button>
+                </p>
+                {props.resultDataPopulator(queryResult)}
+              </div>
+            );
+          }
+ 
+          return (
+            <Collapse key={idx} text={queryResult.input_query}>
+              <button
+                style={executeButtonStyle}
+                onClick={() => copyText(queryResult, "json")}
+              >
+                Copy to clipboard (JSON)
+              </button>
+              <button
+                style={executeButtonStyle}
+                onClick={() => copyText(queryResult, "csv")}
+              >
+                Copy to clipboard (CSV)
+              </button>
+              {props.resultDataPopulator(queryResult)}
+            </Collapse>
+          );
+        })}
+      </div>
+    </div>
+  );
+}
+ 
+const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+  marginRight: 10,
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+function TextArea(props: {
+  value: string;
+  onChange: (nextValue: string) => void;
+}) {
+  const { value, onChange } = props;
+  return (
+    <textarea
+      spellCheck={false}
+      value={value}
+      onChange={(evt) => onChange(evt.target.value)}
+      style={{ width: "100%", height: 140 }}
+      placeholder={"Write your query here"}
+    />
+  );
+}
+ 
+const queryDescription = {
+  minHeight: 10,
+  width: "auto",
+  fontSize: 16,
+  padding: "10px 5px",
+};
+export default QueryDisplay;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/runtime_config/auditlog.tsx.html b/snuba/admin/coverage/lcov-report/static/runtime_config/auditlog.tsx.html new file mode 100644 index 0000000000..6173c43a74 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/runtime_config/auditlog.tsx.html @@ -0,0 +1,465 @@ + + + + + + Code coverage report for static/runtime_config/auditlog.tsx + + + + + + + + + +
+
+

All files / static/runtime_config auditlog.tsx

+
+ +
+ 9.52% + Statements + 4/42 +
+ + +
+ 0% + Branches + 0/18 +
+ + +
+ 0% + Functions + 0/6 +
+ + +
+ 11.76% + Lines + 4/34 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +1281x +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { ReactNode, useState } from "react";
+ 
+import Client from "SnubaAdmin/api_client";
+import { containerStyle, paragraphStyle } from "SnubaAdmin/runtime_config/styles";
+import { Table } from "SnubaAdmin/table";
+import { ConfigChange, ConfigType, ConfigValue } from "SnubaAdmin/runtime_config/types";
+ 
+function AuditLog(props: { api: Client }) {
+  const { api } = props;
+  const [data, setData] = useState<ConfigChange[] | null>(null);
+ 
+  function fetchData() {
+    api.getAuditlog().then((res) => {
+      setData(res);
+    });
+  }
+ 
+  Iif (data === null) {
+    fetchData();
+  }
+ 
+  Iif (!data) {
+    return null;
+  }
+ 
+  const rowData = data.map(
+    ({ key, timestamp, user, before, beforeType, after, afterType }) => {
+      const formattedDate = new Date(timestamp * 1000).toLocaleDateString(
+        "en-US",
+        {
+          day: "numeric",
+          month: "short",
+          year: "numeric",
+          hour: "numeric",
+          minute: "numeric",
+          second: "numeric",
+          timeZoneName: "short",
+        }
+      );
+ 
+      return [
+        formattedDate,
+        user,
+        <code>{key}</code>,
+        getActionDetail(before, beforeType, after, afterType),
+      ];
+    }
+  );
+ 
+  const usersTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ 
+  return (
+    <div style={containerStyle}>
+      <p style={paragraphStyle}>
+        Only changes to runtime configuration are currently being captured in
+        the audit log
+      </p>
+      <Table
+        headerData={[`Timestamp (${usersTimeZone})`, "User", "Key", "Action"]}
+        rowData={rowData}
+        columnWidths={[1, 1, 1, 1]}
+      ></Table>
+    </div>
+  );
+}
+ 
+function getFormattedValue(
+  value: ConfigValue | null,
+  type: ConfigType | null
+): string {
+  Iif (value === null && type === null) {
+    return "NULL";
+  }
+ 
+  Iif (type === "string") {
+    return `"${value}"`;
+  }
+ 
+  Iif (value !== null && (type === "int" || type === "float")) {
+    return value;
+  }
+ 
+  throw new Error("Invalid type");
+}
+ 
+function getActionDetail(
+  before: ConfigValue | null,
+  beforeType: ConfigType | null,
+  after: ConfigValue | null,
+  afterType: ConfigType | null
+): ReactNode {
+  const formattedBefore = getFormattedValue(before, beforeType);
+  const formatttedAfter = getFormattedValue(after, afterType);
+ 
+  if (before === null && after !== null) {
+    if (after === null) {
+      // Value was null before and after the change, something went wrong
+      throw new Error("Unkknown action");
+    } else {
+      // A new value appeared
+      return (
+        <span>
+          Config added. New value: <code>{formatttedAfter}</code>
+        </span>
+      );
+    }
+  } else {
+    if (after === null) {
+      // Something was deleted
+      return (
+        <span>
+          Config deleted. Last value: <code>{formattedBefore}</code>
+        </span>
+      );
+    } else {
+      // Value was changed
+      return (
+        <span>
+          Config changed from <code>{formattedBefore}</code> to{" "}
+          <code>{formatttedAfter}</code>
+        </span>
+      );
+    }
+  }
+}
+ 
+export default AuditLog;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/runtime_config/index.html b/snuba/admin/coverage/lcov-report/static/runtime_config/index.html new file mode 100644 index 0000000000..fa083df4f3 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/runtime_config/index.html @@ -0,0 +1,160 @@ + + + + + + Code coverage report for static/runtime_config + + + + + + + + + +
+
+

All files static/runtime_config

+
+ +
+ 14.83% + Statements + 23/155 +
+ + +
+ 0% + Branches + 0/42 +
+ + +
+ 0% + Functions + 0/48 +
+ + +
+ 14.39% + Lines + 19/132 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
auditlog.tsx +
+
9.52%4/420%0/180%0/611.76%4/34
index.tsx +
+
5.61%5/890%0/200%0/336.41%5/78
row_data.tsx +
+
41.17%7/170%0/40%0/933.33%5/15
styles.tsx +
+
100%7/7100%0/0100%0/0100%5/5
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/runtime_config/index.tsx.html b/snuba/admin/coverage/lcov-report/static/runtime_config/index.tsx.html new file mode 100644 index 0000000000..be01661dd9 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/runtime_config/index.tsx.html @@ -0,0 +1,828 @@ + + + + + + Code coverage report for static/runtime_config/index.tsx + + + + + + + + + +
+
+

All files / static/runtime_config index.tsx

+
+ +
+ 5.61% + Statements + 5/89 +
+ + +
+ 0% + Branches + 0/20 +
+ + +
+ 0% + Functions + 0/33 +
+ + +
+ 6.41% + Lines + 5/78 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +2491x +  +1x +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useState } from "react";
+ 
+import { Table } from "SnubaAdmin/table";
+import Client from "SnubaAdmin/api_client";
+import {
+  ConfigKey,
+  ConfigValue,
+  ConfigType,
+  ConfigDescription,
+  ConfigDescriptions,
+  RowData,
+} from "./types";
+import { getEditableRow, getReadonlyRow, getNewRow } from "SnubaAdmin/runtime_config/row_data";
+import { containerStyle, linkStyle, paragraphStyle } from "SnubaAdmin/runtime_config/styles";
+ 
+function RuntimeConfig(props: { api: Client }) {
+  const { api } = props;
+ 
+  // Data from the API
+  const [data, setData] = useState<
+    | {
+        key: ConfigKey;
+        value: ConfigValue;
+        description: ConfigDescription;
+        type: ConfigType;
+      }[]
+    | null
+  >(null);
+ 
+  // All descriptions from API
+  const [allDescriptions, setDescriptions] = useState<ConfigDescriptions>({});
+ 
+  // Key of existing row being edited (if any)
+  const [currentlyEditing, setCurrentlyEditing] = useState<ConfigKey | null>(
+    null
+  );
+ 
+  // True if we are adding a brand new config, otherwise false
+  const [addingNew, setAddingNew] = useState(false);
+ 
+  // Unsaved state of the row currently being edited
+  const [currentRowData, setCurrentRowData] = useState<{
+    key: ConfigKey;
+    value: ConfigValue;
+    description: ConfigDescription;
+    type: ConfigType;
+  }>({ key: "", value: "", description: "", type: "string" });
+ 
+  function resetCurrentRowData() {
+    setCurrentRowData({ key: "", value: "", description: "", type: "string" });
+  }
+ 
+  // Load data if it was not previously loaded
+  Iif (data === null) {
+    fetchData();
+  }
+ 
+  function fetchData() {
+    api.getConfigs().then((res) => {
+      setData(res);
+    });
+  }
+ 
+  function fetchDescriptions() {
+    api.getDescriptions().then((res) => {
+      setDescriptions(res);
+    });
+  }
+ 
+  function addNewConfig() {
+    setCurrentlyEditing(null);
+    setAddingNew(true);
+    resetCurrentRowData();
+    fetchDescriptions();
+  }
+ 
+  function resetForm() {
+    setCurrentlyEditing(null);
+    setAddingNew(false);
+    resetCurrentRowData();
+  }
+ 
+  function enterEditMode(
+    key: ConfigKey,
+    value: ConfigValue,
+    description: ConfigDescription,
+    type: ConfigType
+  ) {
+    setCurrentRowData({ key, value, description, type });
+    setCurrentlyEditing(key);
+  }
+ 
+  function updateDescription(newDescription: string) {
+    setCurrentRowData((prev) => {
+      return { ...prev, description: newDescription };
+    });
+  }
+ 
+  if (data) {
+    const rowData: RowData[] = data.map((row) => {
+      const { key, value, description, type } = row;
+      const isEditing = key === currentlyEditing;
+      const showActions = currentlyEditing === null && addingNew === false;
+      return isEditing
+        ? getEditableRow(
+            currentRowData.key,
+            currentRowData.value,
+            currentRowData.description,
+            currentRowData.type,
+            (newValue) => {
+              setCurrentRowData((prev) => {
+                return { ...prev, value: newValue };
+              });
+            },
+            updateDescription,
+            () => {
+              Iif (
+                window.confirm(
+                  `Are you sure you want to update ${key} to ${currentRowData.value}?`
+                )
+              ) {
+                api
+                  .editConfig(
+                    key,
+                    currentRowData.value,
+                    currentRowData.description
+                  )
+                  .then((res) => {
+                    setData((prev) => {
+                      Iif (prev) {
+                        const row = prev.find(
+                          (config) => config.key === res.key
+                        );
+                        Iif (!row) {
+                          throw new Error("An error occurred");
+                        }
+                        row.value = res.value;
+                        row.description = res.description;
+                      }
+                      return prev;
+                    });
+                    resetForm();
+                  })
+                  .catch((err) => {
+                    window.alert(err);
+                  });
+              }
+            },
+            () => {
+              Iif (window.confirm(`Are you sure you want to delete ${key}?`)) {
+                api
+                  .deleteConfig(
+                    key,
+                    (
+                      document.getElementById(
+                        "keepDescription"
+                      ) as HTMLInputElement
+                    ).checked
+                  )
+                  .then(() => {
+                    setData((prev) => {
+                      Iif (prev) {
+                        return prev.filter((config) => config.key !== key);
+                      }
+ 
+                      return prev;
+                    });
+                    resetForm();
+                  });
+              }
+            },
+            () => setCurrentlyEditing(null)
+          )
+        : getReadonlyRow(key, value, description, type, showActions, () =>
+            enterEditMode(key, value, description, type)
+          );
+    });
+ 
+    Iif (addingNew) {
+      rowData.push(
+        getNewRow(
+          currentRowData.key,
+          currentRowData.value,
+          currentRowData.description,
+          (newKey) => {
+            setCurrentRowData((prev) => {
+              return { ...prev, key: newKey };
+            });
+            Iif (newKey in allDescriptions) {
+              updateDescription(allDescriptions[newKey]);
+            }
+          },
+          (newValue) =>
+            setCurrentRowData((prev) => {
+              return { ...prev, value: newValue };
+            }),
+          updateDescription,
+          resetForm,
+          () => {
+            api
+              .createNewConfig(
+                currentRowData.key,
+                currentRowData.value,
+                currentRowData.description
+              )
+              .then((res) => {
+                setData((prev) => {
+                  if (prev) {
+                    return [...prev, res];
+                  } else {
+                    return prev;
+                  }
+                });
+                resetForm();
+              })
+              .catch((err) => {
+                window.alert(err);
+              });
+          }
+        )
+      );
+    }
+ 
+    Iif (!data) {
+      return null;
+    }
+ 
+    return (
+      <div style={containerStyle}>
+        <p style={paragraphStyle}>These are the current configurations.</p>
+        <Table
+          headerData={["Key", "Value", "Description", "Type", "Actions"]}
+          rowData={rowData}
+          columnWidths={[3, 5, 5, 1, 2]}
+        />
+        {!addingNew && !currentlyEditing && (
+          <a onClick={addNewConfig} style={linkStyle}>
+            add new
+          </a>
+        )}
+      </div>
+    );
+  } else {
+    return null;
+  }
+}
+ 
+export default RuntimeConfig;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/runtime_config/row_data.tsx.html b/snuba/admin/coverage/lcov-report/static/runtime_config/row_data.tsx.html new file mode 100644 index 0000000000..b80e3a5bad --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/runtime_config/row_data.tsx.html @@ -0,0 +1,399 @@ + + + + + + Code coverage report for static/runtime_config/row_data.tsx + + + + + + + + + +
+
+

All files / static/runtime_config row_data.tsx

+
+ +
+ 41.17% + Statements + 7/17 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/9 +
+ + +
+ 33.33% + Lines + 5/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +1061x +  +1x +1x +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { ReactNode } from "react";
+ 
+import { linkStyle } from "SnubaAdmin/runtime_config/styles";
+import { EditableTableCell } from "SnubaAdmin/table";
+import {
+  ConfigKey,
+  ConfigValue,
+  ConfigType,
+  RowData,
+  ConfigDescription,
+} from "SnubaAdmin/runtime_config/types";
+ 
+const TYPES = ["string", "int", "float"];
+ 
+function Space(props: { margin?: number }) {
+  const margin = typeof props.margin !== "undefined" ? props.margin : 15;
+  return <span style={{ display: "block", margin: margin }}></span>;
+}
+ 
+function getReadonlyRow(
+  key: ConfigKey,
+  value: ConfigValue,
+  description: ConfigDescription,
+  type: ConfigType,
+  showActions: boolean,
+  edit: () => void
+): RowData {
+  return [
+    <code style={{ wordBreak: "break-all" }}>{key}</code>,
+    <code style={{ wordBreak: "break-all" }}>{value}</code>,
+    description,
+    type,
+    showActions && (
+      <a style={linkStyle} onClick={() => edit()}>
+        edit
+      </a>
+    ),
+  ];
+}
+ 
+function getEditableRow(
+  key: ConfigKey,
+  value: ConfigValue,
+  description: ConfigDescription,
+  type: ConfigType,
+  updateValue: (value: ConfigValue) => void,
+  updateDescription: (desc: ConfigDescription) => void,
+  save: () => void,
+  deleteRow: () => void,
+  cancel: () => void
+): RowData {
+  return [
+    <code style={{ wordBreak: "break-all" }}>{key}</code>,
+    <EditableTableCell value={value} onChange={updateValue} />,
+    <EditableTableCell value={description} onChange={updateDescription} />,
+    type,
+    <span>
+      <a style={linkStyle} onClick={() => save()}>
+        <strong>save changes</strong>
+      </a>
+      <Space />
+      <label style={{ ...linkStyle, textDecoration: "" }}>
+        <input type="checkbox" id="keepDescription" />
+        keep description
+      </label>
+      <Space margin={2} />
+      <a style={{ ...linkStyle, color: "red" }} onClick={() => deleteRow()}>
+        delete
+      </a>
+      <Space />
+      <a style={linkStyle} onClick={() => cancel()}>
+        cancel editing
+      </a>
+    </span>,
+  ];
+}
+ 
+function getNewRow(
+  key: ConfigKey,
+  value: ConfigValue,
+  description: ConfigDescription,
+  updateKey: (key: ConfigKey) => void,
+  updateValue: (value: ConfigValue) => void,
+  updateDescription: (desc: ConfigDescription) => void,
+  cancel: () => void,
+  save: () => void
+): [ReactNode, ReactNode, ReactNode, ReactNode, ReactNode] {
+  return [
+    <EditableTableCell value={key} onChange={updateKey} />,
+    <EditableTableCell value={value} onChange={updateValue} />,
+    <EditableTableCell value={description} onChange={updateDescription} />,
+    null,
+    <span>
+      <a style={linkStyle} onClick={save}>
+        <strong>save</strong>
+      </a>
+      <Space />
+      <a style={linkStyle} onClick={() => cancel()}>
+        cancel
+      </a>
+    </span>,
+  ];
+}
+ 
+export { getReadonlyRow, getEditableRow, getNewRow };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/runtime_config/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/runtime_config/styles.tsx.html new file mode 100644 index 0000000000..56b7790276 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/runtime_config/styles.tsx.html @@ -0,0 +1,144 @@ + + + + + + Code coverage report for static/runtime_config/styles.tsx + + + + + + + + + +
+
+

All files / static/runtime_config styles.tsx

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +211x +  +1x +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +1x + 
import { COLORS } from "SnubaAdmin/theme";
+ 
+const containerStyle = {
+  width: 1200,
+  maxWidth: "100%",
+};
+ 
+const linkStyle = {
+  cursor: "pointer",
+  fontSize: 13,
+  color: COLORS.TEXT_LIGHTER,
+  textDecoration: "underline",
+};
+ 
+const paragraphStyle = {
+  fontSize: 15,
+  color: COLORS.TEXT_LIGHTER,
+};
+ 
+export { containerStyle, linkStyle, paragraphStyle };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/select.tsx.html b/snuba/admin/coverage/lcov-report/static/select.tsx.html new file mode 100644 index 0000000000..a65eb47b08 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/select.tsx.html @@ -0,0 +1,255 @@ + + + + + + Code coverage report for static/select.tsx + + + + + + + + + +
+
+

All files / static select.tsx

+
+ +
+ 100% + Statements + 17/17 +
+ + +
+ 60% + Branches + 3/5 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 14/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +584x +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +7x +7x +  +  +4x +12x +  +  +  +  +  +  +  +  +  +  +4x +121x +  +5x +5x +  +5x +  +24x +24x +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import React, { forwardRef } from "react";
+import { Select, SelectItem, Group, Text } from '@mantine/core';
+ 
+type SelectProps = {
+  value: string;
+  name?: string;
+  disabled?: boolean;
+  onChange: (value: string) => void;
+  options: string[] | SelectItem[];
+}
+ 
+interface ItemProps extends React.ComponentPropsWithoutRef<'div'> {
+  image: string;
+  label: string;
+}
+ 
+export function getParamFromStorage(key: string) {
+  const item = localStorage.getItem(`select-${key}`);
+  return item ?? undefined;
+}
+ 
+const SelectItem = forwardRef<HTMLDivElement, ItemProps>(
+  ({ image, label, ...others }: ItemProps, ref) => (
+    <div data-testid={"select-option"} ref={ref} {...others}>
+      <Group noWrap>
+        <div>
+          <Text size="sm">{label}</Text>
+        </div>
+      </Group>
+    </div>
+  )
+);
+ 
+export function CustomSelect(props: SelectProps) {
+  const {value, onChange, options, name, disabled} = props;
+  function updateStorage(value: string) {
+    if (name) {
+      localStorage.setItem(`select-${name}`, value);
+    }
+    onChange(value);
+  }
+  options.sort();
+  return (
+      <Select
+      placeholder={`Select a ${name}`}
+      searchable
+      selectOnBlur
+      itemComponent={SelectItem}
+      disabled={disabled}
+      value={value}
+      nothingFound={`Could not find a matching ${name}`}
+      onChange={updateStorage}
+      data={options}
+      data-testid={"select"}
+      />
+  );
+}
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.html b/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.html new file mode 100644 index 0000000000..c1a33cce62 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.html @@ -0,0 +1,145 @@ + + + + + + Code coverage report for static/snql_to_sql + + + + + + + + + +
+
+

All files static/snql_to_sql

+
+ +
+ 42.55% + Statements + 20/47 +
+ + +
+ 0% + Branches + 0/6 +
+ + +
+ 0% + Functions + 0/14 +
+ + +
+ 48.71% + Lines + 19/39 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
28.12%9/320%0/60%0/1136%9/25
styles.tsx +
+
100%8/8100%0/0100%0/0100%8/8
utils.tsx +
+
42.85%3/7100%0/00%0/333.33%2/6
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.tsx.html b/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.tsx.html new file mode 100644 index 0000000000..5db2e61df1 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snql_to_sql/index.tsx.html @@ -0,0 +1,396 @@ + + + + + + Code coverage report for static/snql_to_sql/index.tsx + + + + + + + + + +
+
+

All files / static/snql_to_sql index.tsx

+
+ +
+ 28.12% + Statements + 9/32 +
+ + +
+ 0% + Branches + 0/6 +
+ + +
+ 0% + Functions + 0/11 +
+ + +
+ 36% + Lines + 9/25 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +1051x +  +1x +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+import { Table } from "SnubaAdmin/table";
+ 
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+import { executeActionsStyle } from "SnubaAdmin/snql_to_sql/styles";
+import { TextArea } from "SnubaAdmin/snql_to_sql/utils";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+import {
+  SnQLRequest,
+  SnQLResult,
+  SnubaDatasetName,
+  SnQLQueryState,
+} from "./types";
+ 
+const HISTORY_KEY = "snql_to_sql";
+function SnQLToSQL(props: { api: Client }) {
+  const [datasets, setDatasets] = useState<SnubaDatasetName[]>([]);
+  const [snql_query, setQuery] = useState<SnQLQueryState>({dataset: getParamFromStorage("dataset")});
+  const [queryResultHistory, setQueryResultHistory] = useState<SnQLResult[]>(
+    getRecentHistory(HISTORY_KEY)
+  );
+ 
+  useEffect(() => {
+    props.api.getSnubaDatasetNames().then((res) => {
+      setDatasets(res);
+    });
+  }, []);
+ 
+  function selectDataset(dataset: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        dataset,
+      };
+    });
+  }
+ 
+  function updateQuerySql(query: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        query,
+      };
+    });
+  }
+ 
+  function convertQuery() {
+    return props.api
+      .debugSnQLQuery(snql_query as SnQLRequest)
+      .then((result) => {
+        const query_result = {
+          input_query: snql_query.query,
+          sql: result.sql,
+        };
+        setRecentHistory(HISTORY_KEY, query_result);
+        setQueryResultHistory((prevHistory) => [query_result, ...prevHistory]);
+      });
+  }
+ 
+  return (
+    <div>
+      <form>
+        <h2>Construct a SnQL Query</h2>
+        <div>
+          <TextArea value={snql_query.query || ""} onChange={updateQuerySql} />
+        </div>
+        <div style={executeActionsStyle}>
+          <div>
+            <CustomSelect
+              value={snql_query.dataset || ""}
+              onChange={selectDataset}
+              options={datasets}
+              name="dataset"
+            />
+          </div>
+          <div>
+            <ExecuteButton
+              onClick={convertQuery}
+              disabled={
+                snql_query.dataset == undefined || snql_query.query == undefined
+              }
+              label="Convert Query"
+            />
+          </div>
+        </div>
+      </form>
+      <div>
+        <h2>Query results</h2>
+        <Table
+          headerData={["SnQL", "Generated SQL"]}
+          rowData={queryResultHistory.map((queryResult) => [
+            <span>{queryResult.input_query}</span>,
+            <span>{queryResult.sql}</span>,
+          ])}
+          columnWidths={[2, 5]}
+        />
+      </div>
+    </div>
+  );
+}
+ 
+export default SnQLToSQL;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snql_to_sql/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/snql_to_sql/styles.tsx.html new file mode 100644 index 0000000000..fcf6e62f0e --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snql_to_sql/styles.tsx.html @@ -0,0 +1,159 @@ + + + + + + Code coverage report for static/snql_to_sql/styles.tsx + + + + + + + + + +
+
+

All files / static/snql_to_sql styles.tsx

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 8/8 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +261x +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +1x +  +  +1x +1x +1x +1x +  + 
const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+let collapsibleStyle = { listStyleType: "none", fontFamily: "Monaco" };
+ 
+export {
+  executeActionsStyle,
+  executeButtonStyle,
+  selectStyle,
+  collapsibleStyle,
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snql_to_sql/utils.tsx.html b/snuba/admin/coverage/lcov-report/static/snql_to_sql/utils.tsx.html new file mode 100644 index 0000000000..0d5128dc48 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snql_to_sql/utils.tsx.html @@ -0,0 +1,153 @@ + + + + + + Code coverage report for static/snql_to_sql/utils.tsx + + + + + + + + + +
+
+

All files / static/snql_to_sql utils.tsx

+
+ +
+ 42.85% + Statements + 3/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 33.33% + Lines + 2/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +241x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React from "react";
+ 
+function TextArea(props: {
+  value: string;
+  onChange: (nextValue: string) => void;
+}) {
+  const { value, onChange } = props;
+  return (
+    <textarea
+      spellCheck={false}
+      value={value}
+      onChange={(evt) => onChange(evt.target.value)}
+      style={{ width: "100%", height: 100 }}
+      placeholder={"Write your query here"}
+    />
+  );
+}
+ 
+function copyText(text: string) {
+  window.navigator.clipboard.writeText(text);
+}
+ 
+export { TextArea, copyText };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snuba_explain/index.html b/snuba/admin/coverage/lcov-report/static/snuba_explain/index.html new file mode 100644 index 0000000000..482ec5de7a --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snuba_explain/index.html @@ -0,0 +1,145 @@ + + + + + + Code coverage report for static/snuba_explain + + + + + + + + + +
+
+

All files static/snuba_explain

+
+ +
+ 36.11% + Statements + 26/72 +
+ + +
+ 0% + Branches + 0/17 +
+ + +
+ 0% + Functions + 0/16 +
+ + +
+ 40% + Lines + 26/65 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
23.4%11/470%0/140%0/1427.5%11/40
step_render.tsx +
+
33.33%5/150%0/30%0/233.33%5/15
styles.tsx +
+
100%10/10100%0/0100%0/0100%10/10
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snuba_explain/index.tsx.html b/snuba/admin/coverage/lcov-report/static/snuba_explain/index.tsx.html new file mode 100644 index 0000000000..cb8040eec4 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snuba_explain/index.tsx.html @@ -0,0 +1,537 @@ + + + + + + Code coverage report for static/snuba_explain/index.tsx + + + + + + + + + +
+
+

All files / static/snuba_explain index.tsx

+
+ +
+ 23.4% + Statements + 11/47 +
+ + +
+ 0% + Branches + 0/14 +
+ + +
+ 0% + Functions + 0/14 +
+ + +
+ 27.5% + Lines + 11/40 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +1521x +1x +  +  +1x +1x +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import { Prism } from "@mantine/prism";
+ 
+import Client from "SnubaAdmin/api_client";
+import QueryEditor from "SnubaAdmin/query_editor";
+import { Collapse } from "SnubaAdmin/collapse";
+import {
+  SnQLRequest,
+  SnQLResult,
+  ExplainResult,
+  ExplainStep,
+} from "SnubaAdmin/snuba_explain/types";
+import { Step } from "SnubaAdmin/snuba_explain/step_render";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+import {
+  executeActionsStyle,
+  collapsibleStyle,
+} from "SnubaAdmin/snuba_explain/styles";
+import { SnubaDatasetName, SnQLQueryState } from "SnubaAdmin/snql_to_sql/types";
+ 
+const HISTORY_KEY = "snuba_explain";
+function SnubaExplain(props: { api: Client }) {
+  const [datasets, setDatasets] = useState<SnubaDatasetName[]>([]);
+  const [snql_query, setQuery] = useState<SnQLQueryState>({dataset: getParamFromStorage("dataset")});
+  const [queryResultHistory, setQueryResultHistory] = useState<SnQLResult[]>(
+    getRecentHistory(HISTORY_KEY)
+  );
+ 
+  useEffect(() => {
+    props.api.getSnubaDatasetNames().then((res) => {
+      setDatasets(res);
+    });
+  }, []);
+ 
+  function selectDataset(dataset: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        dataset,
+      };
+    });
+  }
+ 
+  function updateQuerySnQL(query: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        query,
+      };
+    });
+  }
+ 
+  function explainQuery() {
+    return props.api
+      .debugSnQLQuery(snql_query as SnQLRequest)
+      .then((result) => {
+        const query_result = {
+          input_query: snql_query.query,
+          sql: result.sql,
+          explain: result.explain as ExplainResult,
+        };
+        setRecentHistory(HISTORY_KEY, query_result);
+        setQueryResultHistory((prevHistory) => [query_result, ...prevHistory]);
+      });
+  }
+ 
+  let currentExplain, currentRow, groupedSteps;
+  Iif (queryResultHistory.length > 0) {
+    currentRow = queryResultHistory[0];
+    currentExplain = currentRow.explain;
+    Iif (currentExplain != null) {
+      // Group the steps by their category
+      groupedSteps = currentExplain.steps.reduce(
+        (acc: ExplainStep[][], step: ExplainStep) => {
+          if (acc.length == 0) {
+            acc.push([step]);
+          } else if (acc.slice(-1)[0].slice(-1)[0].category != step.category) {
+            acc.push([step]);
+          } else {
+            acc[acc.length - 1].push(step);
+          }
+          return acc;
+        },
+        []
+      );
+    }
+  }
+ 
+  return (
+    <div>
+      <h2>Construct a SnQL Query</h2>
+      <QueryEditor
+        onQueryUpdate={(sql) => {
+          updateQuerySnQL(sql);
+        }}
+      />
+      <div style={executeActionsStyle}>
+        <div>
+          <CustomSelect
+            value={snql_query.dataset || ""}
+            onChange={selectDataset}
+            options={datasets}
+            name="dataset"
+          />
+        </div>
+        <div style={executeActionsStyle}>
+          <div>
+            <ExecuteButton
+              onClick={explainQuery}
+              disabled={
+                snql_query.dataset == undefined || snql_query.query == undefined
+              }
+              label="Explain Query"
+            />
+          </div>
+        </div>
+      </div>
+      {currentExplain != null && currentRow != null && groupedSteps != null && (
+        <div>
+          <h2>SNUBSPLAIN</h2>
+          <Collapse key="orig_ast" text="Original AST">
+            <span>{currentExplain.original_ast}</span>
+          </Collapse>
+          <h3>Steps</h3>
+          <ol style={collapsibleStyle}>
+            {groupedSteps.map((steps, i) => (
+              <div>
+                <Collapse key={i} text={steps[0].category}>
+                  {steps.map((step, i) => (
+                    <li>
+                      <Step key={i} step={step} />
+                    </li>
+                  ))}
+                </Collapse>
+              </div>
+            ))}
+          </ol>
+          <Collapse key="final_sql" text="Final SQL">
+            <Prism withLineNumbers language="sql">
+              {currentRow.sql}
+            </Prism>
+          </Collapse>
+        </div>
+      )}
+    </div>
+  );
+}
+ 
+export default SnubaExplain;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snuba_explain/step_render.tsx.html b/snuba/admin/coverage/lcov-report/static/snuba_explain/step_render.tsx.html new file mode 100644 index 0000000000..70247c4304 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snuba_explain/step_render.tsx.html @@ -0,0 +1,207 @@ + + + + + + Code coverage report for static/snuba_explain/step_render.tsx + + + + + + + + + +
+
+

All files / static/snuba_explain step_render.tsx

+
+ +
+ 33.33% + Statements + 5/15 +
+ + +
+ 0% + Branches + 0/3 +
+ + +
+ 0% + Functions + 0/2 +
+ + +
+ 33.33% + Lines + 5/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +421x +  +1x +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { ReactNode } from "react";
+ 
+import { Prism } from "@mantine/prism";
+import { ExplainStep, QueryTransformData } from "SnubaAdmin/snuba_explain/types";
+import { nonCollapsibleStyle } from "SnubaAdmin/snuba_explain/styles";
+ 
+import { Collapse } from "../collapse";
+ 
+type StepProps = {
+  step: ExplainStep;
+};
+ 
+function QueryTransformStep(props: StepProps) {
+  const { step } = props;
+  const data = step.data as QueryTransformData;
+  Iif (data.original == data.transformed) {
+    return (
+      <div style={nonCollapsibleStyle}>
+        <span>{step.name} (no change)</span>
+      </div>
+    );
+  }
+  const code_diff = <Prism language="sql">{data.diff.join("\n")}</Prism>;
+ 
+  return (
+    <Collapse key={step.name} text={step.name}>
+      {code_diff}
+    </Collapse>
+  );
+}
+ 
+function Step(props: StepProps) {
+  const { step } = props;
+  if (step.type === "query_transform") {
+    return <QueryTransformStep step={step} />;
+  } else {
+    return <div />;
+  }
+}
+ 
+export { Step };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/snuba_explain/styles.tsx.html b/snuba/admin/coverage/lcov-report/static/snuba_explain/styles.tsx.html new file mode 100644 index 0000000000..3279a4c0ba --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/snuba_explain/styles.tsx.html @@ -0,0 +1,183 @@ + + + + + + Code coverage report for static/snuba_explain/styles.tsx + + + + + + + + + +
+
+

All files / static/snuba_explain styles.tsx

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +341x +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  + 
const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const executeButtonStyle = {
+  height: 30,
+  border: 0,
+  padding: "4px 20px",
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+ 
+let collapsibleStyle = { listStyleType: "none", fontFamily: "Monaco" };
+ 
+const nonCollapsibleStyle = {
+  fontSize: 16,
+  lineHeight: 1,
+  height: 20,
+  display: "flex",
+};
+ 
+export {
+  executeActionsStyle,
+  executeButtonStyle,
+  selectStyle,
+  collapsibleStyle,
+  nonCollapsibleStyle,
+};
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/table.tsx.html b/snuba/admin/coverage/lcov-report/static/table.tsx.html new file mode 100644 index 0000000000..aad2717f6a --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/table.tsx.html @@ -0,0 +1,534 @@ + + + + + + Code coverage report for static/table.tsx + + + + + + + + + +
+
+

All files / static table.tsx

+
+ +
+ 90.32% + Statements + 28/31 +
+ + +
+ 71.42% + Branches + 5/7 +
+ + +
+ 75% + Functions + 6/8 +
+ + +
+ 89.28% + Lines + 25/28 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +1515x +  +5x +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +14x +  +14x +  +  +  +  +  +  +  +  +  +  +62x +  +20x +20x +89x +20x +  +  +20x +  +  +  +20x +  +  +  +20x +  +  +  +20x +  +  +  +  +20x +  +  +  +83x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +33x +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +5x +  +  +  +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +5x + 
import React, { ReactNode, CSSProperties } from "react";
+ 
+import { COLORS } from "SnubaAdmin/theme";
+ 
+type CustomTableStyles = {
+  tableStyle?: CSSProperties;
+  headerStyle?: CSSProperties;
+  thStyle?: CSSProperties;
+  tdStyle?: CSSProperties;
+};
+ 
+const EMPTY_CUSTOM_STYLES = {
+  tableStyle: {},
+  headerStyle: {},
+  thStyle: {},
+  tdStyle: {},
+};
+ 
+function createCustomTableStyles(
+  Istyles: Partial<CustomTableStyles> = EMPTY_CUSTOM_STYLES
+): CustomTableStyles {
+  return { ...EMPTY_CUSTOM_STYLES, ...styles };
+}
+ 
+type TableProps = {
+  headerData: ReactNode[];
+  rowData: ReactNode[][];
+  columnWidths?: number[];
+  customStyles?: CustomTableStyles;
+};
+ 
+function Table(props: TableProps) {
+  const { headerData, rowData, columnWidths } = props;
+ 
+  const autoColumnWidths = Array(headerData.length).fill(1);
+  const notEmptyColumnWidths = columnWidths ?? autoColumnWidths;
+  const sumColumnWidths = notEmptyColumnWidths.reduce((acc, i) => acc + i, 0);
+  const customStyles = props.customStyles
+    ? props.customStyles
+    : EMPTY_CUSTOM_STYLES;
+  const thisTableStyle = {
+    ...tableStyle,
+    ...customStyles.tableStyle,
+  };
+  const thisHeaderStyle = {
+    ...headerStyle,
+    ...customStyles.headerStyle,
+  };
+  const thisThStyle = {
+    ...thStyle,
+    ...customStyles.thStyle,
+  };
+  const thisTdStyle = {
+    ...tdStyle,
+    ...customStyles.tdStyle,
+  };
+ 
+  return (
+    <table style={thisTableStyle}>
+      <thead style={thisHeaderStyle}>
+        <tr>
+          {headerData.map((col, idx) => (
+            <th
+              key={idx}
+              style={{
+                ...thisThStyle,
+                width: `${
+                  (notEmptyColumnWidths[idx] * 100) / sumColumnWidths
+                }%`,
+              }}
+            >
+              {col}
+            </th>
+          ))}
+        </tr>
+      </thead>
+      <tbody>
+        {rowData.map((row, rowIdx) => (
+          <tr key={rowIdx}>
+            {row.map((col, colIdx) => (
+              <td key={colIdx} style={thisTdStyle}>
+                {col}
+              </td>
+            ))}
+          </tr>
+        ))}
+      </tbody>
+    </table>
+  );
+}
+ 
+const border = {
+  border: `1px solid ${COLORS.TABLE_BORDER}`,
+};
+ 
+const tableStyle = {
+  ...border,
+  borderCollapse: "collapse" as const,
+  width: "100%",
+  fontSize: 16,
+  marginBottom: 20,
+};
+ 
+const headerStyle = {
+  backgroundColor: COLORS.SNUBA_BLUE,
+  color: "white",
+};
+ 
+const thStyle = {
+  ...border,
+  fontWeight: 600,
+  padding: 10,
+  textAlign: "left" as const,
+};
+ 
+const tdStyle = {
+  ...border,
+  padding: 10,
+  position: "relative" as const,
+  wordBreak: "break-all" as const,
+  "font-family": "monospace" as const,
+};
+ 
+function EditableTableCell(props: {
+  value: string | number;
+  onChange: (value: string) => void;
+}) {
+  const { value, onChange } = props;
+ 
+  return (
+    <textarea
+      value={value}
+      onChange={(evt) => onChange(evt.target.value)}
+      spellCheck={false}
+      style={textAreaStyle}
+    />
+  );
+}
+ 
+const textAreaStyle = {
+  position: "absolute" as const,
+  padding: 10,
+  left: 0,
+  right: 0,
+  top: 0,
+  bottom: 0,
+  width: "calc(100% - 24px)",
+};
+ 
+export { Table, EditableTableCell, createCustomTableStyles };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/tests/tracing/fixture.tsx.html b/snuba/admin/coverage/lcov-report/static/tests/tracing/fixture.tsx.html new file mode 100644 index 0000000000..3c5887f335 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/tests/tracing/fixture.tsx.html @@ -0,0 +1,111 @@ + + + + + + Code coverage report for static/tests/tracing/fixture.tsx + + + + + + + + + +
+
+

All files / static/tests/tracing fixture.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +101x +  +  +  +  +  +  +  +1x + 
const default_response = {
+  input_query:
+    "SELECT project_id, count()\nFROM errors_dist_ro\nWHERE project_id = 1\nAND timestamp > toDateTime('2023-04-01')\nAND timestamp <= toDateTime('2023-04-02')\nGROUP BY project_id",
+  timestamp: 1680716295,
+  trace_output:
+    "[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Debug> executeQuery: (from 10.4.37.19:60514, user: trace_readonly) SELECT project_id, count() FROM errors_dist_ro WHERE project_id = 1 AND timestamp > toDateTime('2023-04-01') AND timestamp <= toDateTime('2023-04-02') GROUP BY project_id\n[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Trace> ContextAccess (trace_readonly): Access granted: SELECT(project_id, timestamp) ON default.errors_dist_ro\n[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Trace> ContextAccess (trace_readonly): Access granted: SELECT(project_id, timestamp) ON default.errors_dist_ro\n[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Trace> InterpreterSelectQuery: WithMergeableState -> Complete\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> executeQuery: (from 192.168.208.229:18610, initial_query_id: 2ec961ca-d601-421d-b27a-b68947cb2e38) SELECT project_id, count() FROM default.errors_local WHERE (project_id = 1) AND (timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02')) GROUP BY project_id\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> executeQuery: (from 192.168.208.229:62956, initial_query_id: 2ec961ca-d601-421d-b27a-b68947cb2e38) SELECT project_id, count() FROM default.errors_local WHERE (project_id = 1) AND (timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02')) GROUP BY project_id\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> executeQuery: (from 192.168.208.229:21972, initial_query_id: 2ec961ca-d601-421d-b27a-b68947cb2e38) SELECT project_id, count() FROM default.errors_local WHERE (project_id = 1) AND (timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02')) GROUP BY project_id\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> executeQuery: (from 192.168.208.229:44798, initial_query_id: 2ec961ca-d601-421d-b27a-b68947cb2e38) SELECT project_id, count() FROM default.errors_local WHERE (project_id = 1) AND (timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02')) GROUP BY project_id\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> executeQuery: (from 192.168.208.229:15500, initial_query_id: 2ec961ca-d601-421d-b27a-b68947cb2e38) SELECT project_id, count() FROM default.errors_local WHERE (project_id = 1) AND (timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02')) GROUP BY project_id\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> InterpreterSelectQuery: MergeTreeWhereOptimizer: condition \"(timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02'))\" moved to PREWHERE\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> ContextAccess (default): Access granted: SELECT(project_id, timestamp) ON default.errors_local\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Key condition: (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, (column 0 in [1, 1]), and, (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): MinMax index condition: (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, unknown, and, (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 30-20230327_0_580433_1118 (25745 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 25744\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 25745\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 15 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 30-20230327_580434_582585_579 (6 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 5\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 6\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 30-20230327_582586_582888_61 (2 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 60-20230327_0_311185_750 (6559 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 6558\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 6559\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 13 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 60-20230327_311186_311190_2 (2 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_0_717394_284 (406232 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 368\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 439\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found continuous range in 38 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_717395_731753_493 (80 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 79\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 80\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_731754_756782_347 (160 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 159\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 160\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 8 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_756783_757617_213 (5 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 4\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 5\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_757619_757619_0 (2 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Running binary search on index range for part 90-20230327_757622_757622_0 (2 marks)\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> default.errors_local (4cfa084e-1cad-4cb2-8cfa-084e1cadfcb2) (SelectExecutor): Selected 11/155 parts by partition key, 1 parts by primary key, 71/438784 marks by primary key, 71 marks to read from 1 ranges\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> MergeTreeSelectProcessor: Reading 1 ranges from part 90-20230327_0_717394_284, approx. 91276 rows starting from 451461\n[ snuba-errors-tiger-mz-2-2 ] [ 536301 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> AggregatingTransform: Aggregating\n[ snuba-errors-tiger-mz-2-2 ] [ 536301 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> Aggregator: Aggregation method: key64\n[ snuba-errors-tiger-mz-2-2 ] [ 536301 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> AggregatingTransform: Aggregated. 52521 to 1 rows (from 410.32 KiB) in 0.00274176 sec. (19155943.627 rows/sec., 146.15 MiB/sec.)\n[ snuba-errors-tiger-mz-2-2 ] [ 536301 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Trace> Aggregator: Merging aggregated data\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Information> executeQuery: Read 91276 rows, 875.64 KiB in 0.123451811 sec., 739365 rows/sec., 6.93 MiB/sec.\n[ snuba-errors-tiger-mz-2-2 ] [ 347199 ] {2dfa098f-01e8-45a0-85ea-4980f682e723} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> InterpreterSelectQuery: MergeTreeWhereOptimizer: condition \"(timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02'))\" moved to PREWHERE\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> ContextAccess (default): Access granted: SELECT(project_id, timestamp) ON default.errors_local\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Key condition: (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, (column 0 in [1, 1]), and, (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): MinMax index condition: (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, unknown, and, (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 30-20230327_0_580447_1078 (25755 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 25754\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 25755\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 15 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 30-20230327_580448_582704_539 (6 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 5\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 6\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 30-20230327_582705_582974_54 (2 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 60-20230327_0_311725_1115 (6592 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 6591\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 6592\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 13 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 60-20230327_311726_311730_2 (2 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_0_717406_245 (406497 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 368\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 439\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found continuous range in 38 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_717407_737835_469 (103 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 102\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 103\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_737836_743997_322 (83 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 82\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 83\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_743998_749100_300 (32 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 31\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 32\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 5 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_749101_752845_228 (19 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 18\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 19\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 5 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_752846_755516_148 (13 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 12\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 13\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 4 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_755517_757473_168 (8 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 7\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 8\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Running binary search on index range for part 90-20230327_757474_757506_8 (2 marks)\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> default.errors_local (3423620e-1706-4889-b423-620e17062889) (SelectExecutor): Selected 13/143 parts by partition key, 1 parts by primary key, 71/439101 marks by primary key, 71 marks to read from 1 ranges\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> MergeTreeSelectProcessor: Reading 1 ranges from part 90-20230327_0_717406_245, approx. 91315 rows starting from 451344\n[ snuba-errors-tiger-mz-1-4 ] [ 485136 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> AggregatingTransform: Aggregating\n[ snuba-errors-tiger-mz-1-4 ] [ 485136 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> Aggregator: Aggregation method: key64\n[ snuba-errors-tiger-mz-1-4 ] [ 485136 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> AggregatingTransform: Aggregated. 53410 to 1 rows (from 417.27 KiB) in 0.002204068 sec. (24232464.697 rows/sec., 184.88 MiB/sec.)\n[ snuba-errors-tiger-mz-1-4 ] [ 485136 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Trace> Aggregator: Merging aggregated data\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Information> executeQuery: Read 91315 rows, 875.16 KiB in 0.159223806 sec., 573500 rows/sec., 5.37 MiB/sec.\n[ snuba-errors-tiger-mz-1-4 ] [ 3981575 ] {5c94fb33-089f-4ec8-a920-85e26eb6fe86} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> InterpreterSelectQuery: MergeTreeWhereOptimizer: condition \"(timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02'))\" moved to PREWHERE\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> ContextAccess (default): Access granted: SELECT(project_id, timestamp) ON default.errors_local\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Key condition: (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, (column 0 in [1, 1]), and, (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): MinMax index condition: (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, unknown, and, (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 30-20230327_0_580373_1116 (25688 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 25687\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 25688\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 15 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 30-20230327_580374_582548_545 (6 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 5\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 6\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 30-20230327_582549_582829_57 (2 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 60-20230327_0_311183_710 (6598 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 6597\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 6598\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 13 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 60-20230327_311184_311192_4 (2 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_0_717361_327 (406221 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 367\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 438\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found continuous range in 38 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_717362_731745_436 (79 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 78\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 79\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_731746_752592_370 (138 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 137\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 138\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 8 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_752593_755288_318 (13 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 12\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 13\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 4 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_755289_757384_269 (8 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 7\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 8\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Running binary search on index range for part 90-20230327_757385_757635_50 (2 marks)\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> default.errors_local (7005f8e5-8058-4612-b005-f8e580582612) (SelectExecutor): Selected 11/129 parts by partition key, 1 parts by primary key, 71/438746 marks by primary key, 71 marks to read from 1 ranges\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> MergeTreeSelectProcessor: Reading 1 ranges from part 90-20230327_0_717361_327, approx. 90802 rows starting from 450827\n[ snuba-errors-tiger-mz-4-5 ] [ 3881946 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> AggregatingTransform: Aggregating\n[ snuba-errors-tiger-mz-4-5 ] [ 3881946 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> Aggregator: Aggregation method: key64\n[ snuba-errors-tiger-mz-4-5 ] [ 3881946 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> AggregatingTransform: Aggregated. 53088 to 1 rows (from 414.75 KiB) in 0.00271261 sec. (19570819.248 rows/sec., 149.31 MiB/sec.)\n[ snuba-errors-tiger-mz-4-5 ] [ 3881946 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Trace> Aggregator: Merging aggregated data\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> InterpreterSelectQuery: MergeTreeWhereOptimizer: condition \"(timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02'))\" moved to PREWHERE\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> ContextAccess (default): Access granted: SELECT(project_id, timestamp) ON default.errors_local\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Key condition: (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, (column 0 in [1, 1]), and, (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): MinMax index condition: (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, unknown, and, (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 30-20230327_0_580406_1143 (25797 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 25796\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 25797\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 15 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 30-20230327_580407_582685_525 (6 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 5\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 6\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 30-20230327_582686_582960_56 (2 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 60-20230327_0_311318_578 (6605 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 6604\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 6605\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 13 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 60-20230327_311319_311323_2 (2 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_0_717317_293 (406447 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 368\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 439\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found continuous range in 38 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_717318_737867_437 (102 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 101\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 102\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_737868_746063_306 (90 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 89\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 90\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 7 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_746064_755010_242 (41 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 40\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 41\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 6 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_755011_757216_281 (8 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 7\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 8\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_757217_757530_60 (2 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Running binary search on index range for part 90-20230327_757533_757533_0 (2 marks)\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> default.errors_local (fdfead27-4c2f-4e66-bdfe-ad274c2f3e66) (SelectExecutor): Selected 12/142 parts by partition key, 1 parts by primary key, 71/439092 marks by primary key, 71 marks to read from 1 ranges\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> MergeTreeSelectProcessor: Reading 1 ranges from part 90-20230327_0_717317_293, approx. 91028 rows starting from 452184\n[ snuba-errors-tiger-mz-5-3 ] [ 93855 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> AggregatingTransform: Aggregating\n[ snuba-errors-tiger-mz-5-3 ] [ 93855 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> Aggregator: Aggregation method: key64\n[ snuba-errors-tiger-mz-5-3 ] [ 93855 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> AggregatingTransform: Aggregated. 52810 to 1 rows (from 412.58 KiB) in 0.002250112 sec. (23469942.830 rows/sec., 179.06 MiB/sec.)\n[ snuba-errors-tiger-mz-5-3 ] [ 93855 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Trace> Aggregator: Merging aggregated data\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Information> executeQuery: Read 91028 rows, 876.59 KiB in 0.145993653 sec., 623506 rows/sec., 5.86 MiB/sec.\n[ snuba-errors-tiger-mz-5-3 ] [ 3265587 ] {9930f656-01cb-46aa-8cba-4abdfbf80537} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Information> executeQuery: Read 90802 rows, 881.95 KiB in 0.131141675 sec., 692396 rows/sec., 6.57 MiB/sec.\n[ snuba-errors-tiger-mz-4-5 ] [ 4008857 ] {e964b13d-74b8-4675-859b-b735ff1a0b3b} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> InterpreterSelectQuery: MergeTreeWhereOptimizer: condition \"(timestamp > toDateTime('2023-04-01')) AND (timestamp <= toDateTime('2023-04-02'))\" moved to PREWHERE\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> ContextAccess (default): Access granted: SELECT(project_id, timestamp) ON default.errors_local\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Key condition: (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, (column 0 in [1, 1]), and, (column 1 in [1680307200, +inf)), (column 1 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): MinMax index condition: (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, unknown, and, (column 0 in [1680307201, +inf)), (column 0 in (-inf, 1680393600]), and, and\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 30-20230327_0_580400_1128 (25761 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 25760\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 25761\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 15 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 30-20230327_580401_582569_530 (6 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 5\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 6\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 30-20230327_582570_582960_79 (2 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 60-20230327_0_311289_916 (6570 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 6569\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 6570\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 13 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 60-20230327_311290_311292_1 (2 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 60-20230327_311294_311294_0 (2 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_0_717438_258 (406437 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 370\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 441\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found continuous range in 38 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_717439_754085_469 (218 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 217\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 218\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 8 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_754086_755574_283 (9 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 8\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 9\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 4 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_755575_757215_326 (7 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 6\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 7\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 3 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_757216_757634_85 (2 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Running binary search on index range for part 90-20230327_757636_757636_0 (2 marks)\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (LEFT) boundary mark: 1\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found (RIGHT) boundary mark: 2\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Found empty range in 1 steps\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> default.errors_local (f304114c-568a-42bc-b304-114c568ad2bc) (SelectExecutor): Selected 12/140 parts by partition key, 1 parts by primary key, 71/439006 marks by primary key, 71 marks to read from 1 ranges\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> MergeTreeSelectProcessor: Reading 1 ranges from part 90-20230327_0_717438_258, approx. 92120 rows starting from 454140\n[ snuba-errors-tiger-mz-3-2 ] [ 46834 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> AggregatingTransform: Aggregating\n[ snuba-errors-tiger-mz-3-2 ] [ 46834 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> Aggregator: Aggregation method: key64\n[ snuba-errors-tiger-mz-3-2 ] [ 46834 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> AggregatingTransform: Aggregated. 52755 to 1 rows (from 412.15 KiB) in 0.003141842 sec. (16791105.345 rows/sec., 128.11 MiB/sec.)\n[ snuba-errors-tiger-mz-3-2 ] [ 46834 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Trace> Aggregator: Merging aggregated data\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Information> executeQuery: Read 92120 rows, 873.79 KiB in 0.140018138 sec., 657914 rows/sec., 6.09 MiB/sec.\n[ snuba-errors-tiger-mz-3-2 ] [ 4034925 ] {bf516dfa-a2f6-4b32-8885-7b6ba0e6ac94} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n[ snuba-query-tiger-1-1 ] [ 13613 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Trace> Aggregator: Merging partially aggregated blocks (bucket = -1).\n[ snuba-query-tiger-1-1 ] [ 13613 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Debug> Aggregator: Merged partially aggregated blocks. 1 rows, 16.00 B. in 1.8184e-05 sec. (54993.401 rows/sec., 859.27 KiB/sec.)\n[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Information> executeQuery: Read 456541 rows, 4.28 MiB in 0.289192603 sec., 1578674 rows/sec., 14.80 MiB/sec.\n[ snuba-query-tiger-1-1 ] [ 22203 ] {2ec961ca-d601-421d-b27a-b68947cb2e38} <Debug> MemoryTracker: Peak memory usage (for query): 0.00 B.\n",
+};
+ 
+export default default_response;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/tests/tracing/index.html b/snuba/admin/coverage/lcov-report/static/tests/tracing/index.html new file mode 100644 index 0000000000..c9f48910a6 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/tests/tracing/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/tests/tracing + + + + + + + + + +
+
+

All files static/tests/tracing

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
fixture.tsx +
+
100%2/2100%0/0100%0/0100%2/2
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/theme.tsx.html b/snuba/admin/coverage/lcov-report/static/theme.tsx.html new file mode 100644 index 0000000000..34be4b3ba2 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/theme.tsx.html @@ -0,0 +1,126 @@ + + + + + + Code coverage report for static/theme.tsx + + + + + + + + + +
+
+

All files / static theme.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +155x +  +  +  +  +  +  +  +  +  +  +  +  +5x + 
const COLORS = {
+  HEADER_BG: "#303030",
+  HEADER_TEXT: "white",
+  NAV_BORDER: "#CBCBCB",
+  TABLE_BORDER: "#CBCBCB",
+  SNUBA_BLUE: "#4681e0",
+  TEXT_DEFAULT: "black",
+  TEXT_LIGHTER: "#464646",
+  TEXT_INACTIVE: "#858585",
+  BG_LIGHT: "#E3E3E3",
+  RED: "#c42e2b",
+};
+ 
+export { COLORS };
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/tracing/index.html b/snuba/admin/coverage/lcov-report/static/tracing/index.html new file mode 100644 index 0000000000..f447d667bd --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/tracing/index.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for static/tracing + + + + + + + + + +
+
+

All files static/tracing

+
+ +
+ 32.82% + Statements + 43/131 +
+ + +
+ 8.77% + Branches + 5/57 +
+ + +
+ 21.42% + Functions + 9/42 +
+ + +
+ 31.48% + Lines + 34/108 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
13.79%12/873.92%2/518%2/2516.21%12/74
query_display.tsx +
+
70.45%31/4450%3/641.17%7/1764.7%22/34
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/tracing/index.tsx.html b/snuba/admin/coverage/lcov-report/static/tracing/index.tsx.html new file mode 100644 index 0000000000..15797f8ed0 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/tracing/index.tsx.html @@ -0,0 +1,1002 @@ + + + + + + Code coverage report for static/tracing/index.tsx + + + + + + + + + +
+
+

All files / static/tracing index.tsx

+
+ +
+ 13.79% + Statements + 12/87 +
+ + +
+ 3.92% + Branches + 2/51 +
+ + +
+ 8% + Functions + 2/25 +
+ + +
+ 16.21% + Lines + 12/74 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +3072x +2x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +2x + 
import React, { useState } from "react";
+import { Accordion, Stack, Title, Text, Group } from "@mantine/core";
+ 
+import Client from "SnubaAdmin/api_client";
+import QueryDisplay from "SnubaAdmin/tracing/query_display";
+import {
+  LogLine,
+  TracingResult,
+  TracingSummary,
+  QuerySummary,
+  ExecuteSummary,
+  SelectSummary,
+  IndexSummary,
+  StreamSummary,
+  AggregationSummary,
+  SortingSummary,
+} from "SnubaAdmin/tracing/types";
+ 
+type ProfileEventValue = {
+  column_names: string[];
+  rows: string[];
+};
+ 
+type ProfileEvent = {
+  [host_name: string]: ProfileEventValue;
+};
+ 
+enum MessageCategory {
+  housekeeping,
+  select_execution,
+  aggregation,
+  memory_tracker,
+  unknown,
+}
+ 
+let collapsibleStyle = {
+  listStyleType: "none",
+  fontFamily: "Monaco",
+  width: "fit-content",
+};
+ 
+function getMessageCategory(logLine: LogLine): MessageCategory {
+  const component = logLine.component;
+  if (
+    component.match(/^ContextAccess|AccessRightsContext|^executeQuery/) &&
+    !logLine.message.startsWith("Read")
+  ) {
+    return MessageCategory.housekeeping;
+  } else if (component.match(/\(SelectExecutor\)|MergeTreeSelectProcessor/)) {
+    return MessageCategory.select_execution;
+  } else if (
+    component.match(/^InterpreterSelectQuery|AggregatingTransform|Aggregator/)
+  ) {
+    return MessageCategory.aggregation;
+  } else if (
+    component.match(/MemoryTracker/) ||
+    (component.match(/^executeQuery/) && logLine.message.startsWith("Read"))
+  ) {
+    return MessageCategory.memory_tracker;
+  } else {
+    return MessageCategory.unknown;
+  }
+}
+ 
+function TracingQueries(props: { api: Client }) {
+  function tablePopulator(queryResult: TracingResult, showFormatted: boolean) {
+    var elements = {};
+    if (queryResult.error) {
+      elements = { Error: [queryResult.error, 200] };
+    } else {
+      elements = { Trace: [queryResult, 400] };
+    }
+    return tracingOutput(elements, showFormatted);
+  }
+ 
+  function tracingOutput(elements: Object, showFormatted: boolean) {
+    return (
+      <>
+        <br />
+        <br />
+        {Object.entries(elements).map(([title, [value, height]]) => {
+          if (title === "Error") {
+            return (
+              <div key={value}>
+                {title}
+                <textarea
+                  spellCheck={false}
+                  value={value}
+                  style={{ width: "100%", height: height }}
+                  disabled
+                />
+              </div>
+            );
+          } else Iif (title === "Trace") {
+            if (showFormatted) {
+              return (
+                <div>
+                  <br />
+                  <b>Number of rows in result set:</b> {value.num_rows_result}
+                  <br />
+                  {summarizedTraceDisplay(value.summarized_trace_output)}
+                </div>
+              );
+            } else {
+              return (
+                <div>
+                  <br />
+                  <b>Number of rows in result set:</b> {value.num_rows_result}
+                  <br />
+                  {rawTraceDisplay(title, value.trace_output, value.profile_events_results)}
+                </div>
+              );
+            }
+          }
+        })}
+      </>
+    );
+  }
+ 
+  function rawTraceDisplay(title: string, value: any, profileEventResults: ProfileEvent): JSX.Element | undefined {
+    const parsedLines: Array<string> = value.split(/\n/);
+ 
+    const profileEventRows: Array<string> = [];
+    for (const [k, v] of Object.entries(profileEventResults)) {
+      profileEventRows.push(k + '=>' + v.rows[0]);
+    }
+ 
+    return (
+      <ol style={collapsibleStyle} key={title + "-root"}>
+        <Title order={4}>Profile Events Output</Title>
+        {profileEventRows.map((line, index) => {
+          const node_name = line.split("=>")[0];
+          const row = line.split("=>")[1];
+          return (
+            <li key={title + index}>
+              <Text>[ {node_name} ] {row}</Text>
+            </li>
+          );
+        })}
+        <br/>
+        <Title order={4}>Trace Output</Title>
+        {parsedLines.map((line, index) => {
+          return (
+            <li key={title + index}>
+              <Text>{line}</Text>
+            </li>
+          );
+        })}
+      </ol>
+    );
+  }
+ 
+  function indexSummary(value: IndexSummary): JSX.Element {
+    return (
+      <Group>
+        <Text fw={600}>{value.table_name}: </Text>
+        <Text>
+          Index `{value.index_name}` has dropped {value.dropped_granules}/
+          {value.total_granules} granules.
+        </Text>
+      </Group>
+    );
+  }
+ 
+  function selectSummary(value: SelectSummary): JSX.Element {
+    return (
+      <Stack>
+        <Group>
+          <Text fw={600}>{value.table_name}:</Text>
+          <Text>
+            Selected {value.parts_selected_by_partition_key}/{value.total_parts}{" "}
+            parts by partition key
+          </Text>
+        </Group>
+        <Group>
+          <Text fw={600}>{value.table_name}:</Text>
+          <Text>
+            Primary Key selected {value.parts_selected_by_primary_key} parts,{" "}
+            {value.marks_selected_by_primary_key}/{value.total_marks} marks,{" "}
+            {value.marks_to_read_from_ranges} total marks to process
+          </Text>
+        </Group>
+      </Stack>
+    );
+  }
+ 
+  function streamSummary(value: StreamSummary): JSX.Element {
+    return (
+      <Group>
+        <Text fw={600}>{value.table_name}:</Text>
+        <Text>Processing granules using {value.streams} threads</Text>
+      </Group>
+    );
+  }
+ 
+  function aggregationSummary(value: AggregationSummary): JSX.Element {
+    return (
+      <Text>
+        Aggregated {value.before_row_count} to {value.after_row_count} rows
+        (from {value.memory_size}) in {value.seconds} sec.
+      </Text>
+    );
+  }
+ 
+  function sortingSummary(value: SortingSummary): JSX.Element {
+    return (
+      <Text>
+        Merge sorted {value.sorted_blocks} blocks, {value.rows} rows in{" "}
+        {value.seconds} sec.
+      </Text>
+    );
+  }
+ 
+  function executeSummary(value: ExecuteSummary): JSX.Element {
+    return (
+      <Text>
+        Read {value.rows_read} rows, {value.memory_size} in {value.seconds}{" "}
+        sec., {value.rows_per_second} rows/sec., {value.bytes_per_second}/sec.
+      </Text>
+    );
+  }
+ 
+  function querySummary(value: QuerySummary): JSX.Element {
+    const execute = value.execute_summaries ?
+      value.execute_summaries[0] : null;
+    const dist = value.is_distributed ? " (Distributed)" : "";
+    const index_summaries = value.index_summaries
+      ? value.index_summaries.map((s) => indexSummary(s))
+      : null;
+    const select_summaries = value.select_summaries
+      ? value.select_summaries.map((s) => selectSummary(s))
+      : null;
+    const stream_summaries = value.stream_summaries
+      ? value.stream_summaries.map((s) => streamSummary(s))
+      : null;
+    const show_filtering =
+      index_summaries || select_summaries || stream_summaries;
+    const aggregation_summaries = value.aggregation_summaries
+      ? value.aggregation_summaries.map((s) => aggregationSummary(s))
+      : null;
+    const sorting_summaries = value.sorting_summaries
+      ? value.sorting_summaries.map((s) => sortingSummary(s))
+      : null;
+    const show_aggregating = aggregation_summaries || sorting_summaries;
+    return (
+      <Accordion.Item key={value.node_name} value={value.node_name}>
+        <Accordion.Control>
+          <Title order={4}>
+            {value.node_name} {dist}: {execute ? execute.seconds : "N/A"} sec.
+          </Title>
+        </Accordion.Control>
+        <Accordion.Panel>
+          <Stack>
+            {show_filtering ? <Title order={4}>Filtering</Title> : null}
+            {index_summaries}
+            {select_summaries}
+            {stream_summaries}
+            {show_aggregating ? <Title order={4}>Aggregating</Title> : null}
+            {aggregation_summaries}
+            {sorting_summaries}
+            <Title order={4}>Total</Title>
+            {value.execute_summaries && value.execute_summaries.map((e) => executeSummary(e))}
+          </Stack>
+        </Accordion.Panel>
+      </Accordion.Item>
+    );
+  }
+ 
+  function summarizedTraceDisplay(
+    value: TracingSummary
+  ): JSX.Element | undefined {
+    let dist_node;
+    let nodes = [];
+    for (const [host, summary] of Object.entries(value.query_summaries)) {
+      if (summary.is_distributed) {
+        dist_node = summary;
+      } else {
+        nodes.push(summary);
+      }
+    }
+    return (
+      <Stack>
+        <Accordion chevronPosition="left">
+          {querySummary(dist_node as QuerySummary)}
+        </Accordion>
+        <Accordion chevronPosition="left">
+          {nodes
+            .filter((q: QuerySummary) => !q.is_distributed)
+            .map((q: QuerySummary) => querySummary(q))}
+        </Accordion>
+      </Stack>
+    );
+  }
+ 
+  return (
+    <div>
+      {QueryDisplay({
+        api: props.api,
+        resultDataPopulator: tablePopulator,
+        predefinedQueryOptions: [],
+      })}
+    </div>
+  );
+}
+ 
+export default TracingQueries;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/tracing/query_display.tsx.html b/snuba/admin/coverage/lcov-report/static/tracing/query_display.tsx.html new file mode 100644 index 0000000000..a657f8e926 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/tracing/query_display.tsx.html @@ -0,0 +1,597 @@ + + + + + + Code coverage report for static/tracing/query_display.tsx + + + + + + + + + +
+
+

All files / static/tracing query_display.tsx

+
+ +
+ 70.45% + Statements + 31/44 +
+ + +
+ 50% + Branches + 3/6 +
+ + +
+ 41.17% + Functions + 7/17 +
+ + +
+ 64.7% + Lines + 22/34 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +1722x +2x +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +  +  +  +  +2x +  +  +  +  +  +  +  +  +6x +6x +  +  +6x +  +  +6x +  +6x +1x +1x +  +  +  +  +4x +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +2x +  +  +  +2x + 
import React, { useEffect, useState } from "react";
+import {
+  Accordion,
+  Switch,
+  Code,
+  Stack,
+  Title,
+  Group,
+  Button,
+} from "@mantine/core";
+import Client from "SnubaAdmin/api_client";
+import QueryEditor from "SnubaAdmin/query_editor";
+import { Table } from "SnubaAdmin/table";
+import ExecuteButton from "SnubaAdmin/utils/execute_button";
+import { getRecentHistory, setRecentHistory } from "SnubaAdmin/query_history";
+import { CustomSelect, getParamFromStorage } from "SnubaAdmin/select";
+import { TracingRequest, TracingResult, PredefinedQuery } from "./types";
+ 
+type QueryState = Partial<TracingRequest>;
+ 
+const HISTORY_KEY = "tracing_queries";
+function QueryDisplay(props: {
+  api: Client;
+  resultDataPopulator: (
+    queryResult: TracingResult,
+    showFormatted: boolean
+  ) => JSX.Element;
+  predefinedQueryOptions: Array<PredefinedQuery>;
+}) {
+  const [storages, setStorages] = useState<string[]>([]);
+  const [query, setQuery] = useState<QueryState>({
+    storage: getParamFromStorage("storage"),
+  });
+  const [queryResultHistory, setQueryResultHistory] = useState<TracingResult[]>(
+    getRecentHistory(HISTORY_KEY)
+  );
+  const [showFormatted, setShowFormatted] = useState<boolean>(true);
+ 
+  useEffect(() => {
+    props.api.getClickhouseNodes().then((res) => {
+      setStorages(res.map((n) => n.storage_name));
+    });
+  }, []);
+ 
+  function updateQuerySql(sql: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        sql,
+      };
+    });
+  }
+ 
+  function executeQuery() {
+    return props.api
+      .executeTracingQuery(query as TracingRequest)
+      .then((result) => {
+        const tracing_result = {
+          input_query: `${query.sql}`,
+          timestamp: result.timestamp,
+          num_rows_result: result.num_rows_result,
+          cols: result.cols,
+          trace_output: result.trace_output,
+          summarized_trace_output: result.summarized_trace_output,
+          profile_events_results: result.profile_events_results,
+          profile_events_meta: result.profile_events_meta,
+          profile_events_profile: result.profile_events_profile,
+          error: result.error,
+        };
+        setRecentHistory(HISTORY_KEY, tracing_result);
+        setQueryResultHistory((prevHistory) => [
+          tracing_result,
+          ...prevHistory,
+        ]);
+      });
+  }
+ 
+  function selectStorage(storage: string) {
+    setQuery((prevQuery) => {
+      return {
+        ...prevQuery,
+        storage: storage,
+      };
+    });
+    console.log(query);
+  }
+ 
+  function copyText(text: string) {
+    window.navigator.clipboard.writeText(text);
+  }
+ 
+  return (
+    <div>
+      <h2>Construct a ClickHouse Query</h2>
+      <QueryEditor
+        onQueryUpdate={(sql) => {
+          updateQuerySql(sql);
+        }}
+      />
+      <div style={executeActionsStyle}>
+        <div>
+          <CustomSelect
+            value={query.storage || ""}
+            onChange={selectStorage}
+            name="storage"
+            options={storages}
+          />
+        </div>
+        <ExecuteButton
+          onClick={executeQuery}
+          disabled={!query.storage || !query.sql}
+        />
+      </div>
+      <div>
+        <h2>Query results</h2>
+        <Switch
+          checked={showFormatted}
+          onChange={(evt: React.ChangeEvent<HTMLInputElement>) =>
+            setShowFormatted(evt.currentTarget.checked)
+          }
+          onLabel="FORMATTED"
+          offLabel="RAW"
+          size="xl"
+        />
+        <br />
+        <Table
+          headerData={["Response"]}
+          rowData={queryResultHistory.map((queryResult) => [
+            <Stack>
+              <Group>
+                <Button
+                  onClick={() => copyText(queryResult.trace_output || "")}
+                >
+                  Copy to clipboard (Raw)
+                </Button>
+                <Button onClick={() => copyText(JSON.stringify(queryResult))}>
+                  Copy to clipboard (JSON)
+                </Button>
+              </Group>
+              <Title order={3}>Tracing Data</Title>
+              {props.resultDataPopulator(queryResult, showFormatted)}
+              <Accordion chevronPosition="left">
+                <Accordion.Item value="input-query" key="input-query">
+                  <Accordion.Control>
+                    <Title order={3}>Input Query</Title>
+                  </Accordion.Control>
+                  <Accordion.Panel>
+                    <Code block>{queryResult.input_query}</Code>
+                  </Accordion.Panel>
+                </Accordion.Item>
+              </Accordion>
+            </Stack>,
+          ])}
+          columnWidths={[1, 5]}
+        />
+      </div>
+    </div>
+  );
+}
+ 
+const executeActionsStyle = {
+  display: "flex",
+  justifyContent: "space-between",
+  marginTop: 8,
+};
+ 
+const selectStyle = {
+  marginRight: 8,
+  height: 30,
+};
+export default QueryDisplay;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/utils/execute_button.tsx.html b/snuba/admin/coverage/lcov-report/static/utils/execute_button.tsx.html new file mode 100644 index 0000000000..b52d77d1c2 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/utils/execute_button.tsx.html @@ -0,0 +1,237 @@ + + + + + + Code coverage report for static/utils/execute_button.tsx + + + + + + + + + +
+
+

All files / static/utils execute_button.tsx

+
+ +
+ 80% + Statements + 16/20 +
+ + +
+ 85.71% + Branches + 6/7 +
+ + +
+ 66.66% + Functions + 4/6 +
+ + +
+ 77.77% + Lines + 14/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +523x +3x +  +  +  +  +  +  +  +11x +  +11x +  +11x +  +  +  +11x +  +  +2x +  +  +2x +2x +  +  +  +  +  +1x +  +  +  +11x +  +  +  +2x +2x +  +  +  +  +  +  +  +  +  +  +3x + 
import React, { useState } from "react";
+import { Button } from "@mantine/core";
+ 
+function ExecuteButton(props: {
+  disabled: boolean;
+  onClick: () => Promise<any>;
+  onError?: (error: any) => any;
+  label?: string;
+}) {
+  const [isExecuting, setIsExecuting] = useState<boolean>(false);
+ 
+  let label = props.label || "Execute Query";
+ 
+  const defaultError = (err: any) => {
+    console.log("ERROR", err);
+    window.alert("An error occurred: " + err);
+  };
+  let errorCallback = props.onError || defaultError;
+ 
+  function executeQuery() {
+    Iif (isExecuting) {
+      window.alert("A query is already running");
+    }
+    setIsExecuting(true);
+    props
+      .onClick()
+      .catch((err: any) => {
+        errorCallback(err);
+      })
+      .finally(() => {
+        setIsExecuting(false);
+      });
+  }
+ 
+  return (
+    <div>
+      <Button
+        onClick={(evt: any) => {
+          evt.preventDefault();
+          executeQuery();
+        }}
+        loading={isExecuting}
+        disabled={isExecuting || props.disabled}
+      >
+        {label}
+      </Button>
+    </div>
+  );
+}
+ 
+export default ExecuteButton;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/utils/index.html b/snuba/admin/coverage/lcov-report/static/utils/index.html new file mode 100644 index 0000000000..0b4ac31e1d --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/utils/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/utils + + + + + + + + + +
+
+

All files static/utils

+
+ +
+ 80% + Statements + 16/20 +
+ + +
+ 85.71% + Branches + 6/7 +
+ + +
+ 66.66% + Functions + 4/6 +
+ + +
+ 77.77% + Lines + 14/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
execute_button.tsx +
+
80%16/2085.71%6/766.66%4/677.77%14/18
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/welcome/index.html b/snuba/admin/coverage/lcov-report/static/welcome/index.html new file mode 100644 index 0000000000..35ce6bf532 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/welcome/index.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for static/welcome + + + + + + + + + +
+
+

All files static/welcome

+
+ +
+ 18.18% + Statements + 2/11 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 22.22% + Lines + 2/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
18.18%2/11100%0/00%0/522.22%2/9
+
+
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov-report/static/welcome/index.tsx.html b/snuba/admin/coverage/lcov-report/static/welcome/index.tsx.html new file mode 100644 index 0000000000..5bd1813af1 --- /dev/null +++ b/snuba/admin/coverage/lcov-report/static/welcome/index.tsx.html @@ -0,0 +1,207 @@ + + + + + + Code coverage report for static/welcome/index.tsx + + + + + + + + + +
+
+

All files / static/welcome index.tsx

+
+ +
+ 18.18% + Statements + 2/11 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 22.22% + Lines + 2/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +421x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
import React, { useEffect, useState } from "react";
+import Client from "SnubaAdmin/api_client";
+ 
+function Welcome(props: { api: Client }) {
+  const [adminRegions, setAdminRegions] = useState<string[]>([]);
+ 
+  useEffect(() => {
+    props.api.getAdminRegions().then((res) => {
+      setAdminRegions(res);
+    });
+  }, []);
+ 
+  function urls() {
+    return (
+      <div>
+        <p>Available regions:</p>
+        <ul>
+          <li>
+            <a href="https://snuba-admin.getsentry.net/" target="_blank">
+              SaaS
+            </a>
+          </li>
+          {adminRegions.map((region) => (
+            <li>
+              <a
+                href={"https://snuba-admin." + region + ".getsentry.net/"}
+                target="_blank"
+              >
+                {region}
+              </a>
+            </li>
+          ))}
+        </ul>
+      </div>
+    );
+  }
+ 
+  return <div>{urls()}</div>;
+}
+ 
+export default Welcome;
+ 
+ +
+
+ + + + + + + diff --git a/snuba/admin/coverage/lcov.info b/snuba/admin/coverage/lcov.info new file mode 100644 index 0000000000..d361d52465 --- /dev/null +++ b/snuba/admin/coverage/lcov.info @@ -0,0 +1,3580 @@ +TN: +SF:static/api_client.tsx +FN:111,Client +FN:115,(anonymous_1) +FN:117,(anonymous_2) +FN:119,(anonymous_3) +FN:121,(anonymous_4) +FN:123,(anonymous_5) +FN:127,(anonymous_6) +FN:129,(anonymous_7) +FN:141,(anonymous_8) +FN:145,(anonymous_9) +FN:152,(anonymous_10) +FN:161,(anonymous_11) +FN:169,(anonymous_12) +FN:179,(anonymous_13) +FN:187,(anonymous_14) +FN:189,(anonymous_15) +FN:191,(anonymous_16) +FN:193,(anonymous_17) +FN:195,(anonymous_18) +FN:198,(anonymous_19) +FN:199,(anonymous_20) +FN:201,(anonymous_21) +FN:209,(anonymous_22) +FN:211,(anonymous_23) +FN:214,(anonymous_24) +FN:216,(anonymous_25) +FN:219,(anonymous_26) +FN:221,(anonymous_27) +FN:224,(anonymous_28) +FN:230,(anonymous_29) +FN:234,(anonymous_30) +FN:242,(anonymous_31) +FN:248,(anonymous_32) +FN:252,(anonymous_33) +FN:260,(anonymous_34) +FN:267,(anonymous_35) +FN:271,(anonymous_36) +FN:279,(anonymous_37) +FN:281,(anonymous_38) +FN:283,(anonymous_39) +FN:289,(anonymous_40) +FN:297,(anonymous_41) +FN:303,(anonymous_42) +FN:311,(anonymous_43) +FN:315,(anonymous_44) +FN:318,(anonymous_45) +FN:320,(anonymous_46) +FN:322,(anonymous_47) +FN:326,(anonymous_48) +FN:334,(anonymous_49) +FN:340,(anonymous_50) +FN:348,(anonymous_51) +FN:350,(anonymous_52) +FN:352,(anonymous_53) +FN:358,(anonymous_54) +FN:366,(anonymous_55) +FN:370,(anonymous_56) +FN:373,(anonymous_57) +FN:384,(anonymous_58) +FN:393,(anonymous_59) +FN:397,(anonymous_60) +FN:400,(anonymous_61) +FN:404,(anonymous_62) +FN:406,(anonymous_63) +FN:411,(anonymous_64) +FN:413,(anonymous_65) +FN:425,(anonymous_66) +FN:429,(anonymous_67) +FN:436,(anonymous_68) +FN:447,(anonymous_69) +FN:451,(anonymous_70) +FN:458,(anonymous_71) +FN:462,(anonymous_72) +FN:464,(anonymous_73) +FN:468,(anonymous_74) +FN:470,(anonymous_75) +FN:483,(anonymous_76) +FN:487,(anonymous_77) +FN:494,(anonymous_78) +FN:499,(anonymous_79) +FN:501,(anonymous_80) +FNF:81 +FNH:1 +FNDA:6,Client +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,(anonymous_43) +FNDA:0,(anonymous_44) +FNDA:0,(anonymous_45) +FNDA:0,(anonymous_46) +FNDA:0,(anonymous_47) +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +FNDA:0,(anonymous_54) +FNDA:0,(anonymous_55) +FNDA:0,(anonymous_56) +FNDA:0,(anonymous_57) +FNDA:0,(anonymous_58) +FNDA:0,(anonymous_59) +FNDA:0,(anonymous_60) +FNDA:0,(anonymous_61) +FNDA:0,(anonymous_62) +FNDA:0,(anonymous_63) +FNDA:0,(anonymous_64) +FNDA:0,(anonymous_65) +FNDA:0,(anonymous_66) +FNDA:0,(anonymous_67) +FNDA:0,(anonymous_68) +FNDA:0,(anonymous_69) +FNDA:0,(anonymous_70) +FNDA:0,(anonymous_71) +FNDA:0,(anonymous_72) +FNDA:0,(anonymous_73) +FNDA:0,(anonymous_74) +FNDA:0,(anonymous_75) +FNDA:0,(anonymous_76) +FNDA:0,(anonymous_77) +FNDA:0,(anonymous_78) +FNDA:0,(anonymous_79) +FNDA:0,(anonymous_80) +DA:112,6 +DA:114,6 +DA:116,0 +DA:117,0 +DA:120,0 +DA:121,0 +DA:124,0 +DA:125,0 +DA:127,0 +DA:134,0 +DA:135,0 +DA:137,0 +DA:142,0 +DA:143,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:154,0 +DA:158,0 +DA:162,0 +DA:163,0 +DA:165,0 +DA:174,0 +DA:175,0 +DA:180,0 +DA:181,0 +DA:183,0 +DA:188,0 +DA:189,0 +DA:192,0 +DA:193,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:200,0 +DA:202,0 +DA:210,0 +DA:211,0 +DA:215,0 +DA:216,0 +DA:220,0 +DA:221,0 +DA:225,0 +DA:226,0 +DA:231,0 +DA:232,0 +DA:234,0 +DA:235,0 +DA:236,0 +DA:243,0 +DA:244,0 +DA:249,0 +DA:250,0 +DA:252,0 +DA:253,0 +DA:254,0 +DA:261,0 +DA:262,0 +DA:263,0 +DA:268,0 +DA:269,0 +DA:271,0 +DA:272,0 +DA:273,0 +DA:280,0 +DA:281,0 +DA:284,0 +DA:285,0 +DA:290,0 +DA:291,0 +DA:293,0 +DA:298,0 +DA:299,0 +DA:304,0 +DA:305,0 +DA:307,0 +DA:312,0 +DA:313,0 +DA:315,0 +DA:319,0 +DA:320,0 +DA:323,0 +DA:324,0 +DA:327,0 +DA:328,0 +DA:330,0 +DA:335,0 +DA:336,0 +DA:341,0 +DA:342,0 +DA:344,0 +DA:349,0 +DA:350,0 +DA:353,0 +DA:354,0 +DA:359,0 +DA:360,0 +DA:362,0 +DA:367,0 +DA:368,0 +DA:370,0 +DA:374,0 +DA:379,0 +DA:380,0 +DA:385,0 +DA:386,0 +DA:388,0 +DA:394,0 +DA:395,0 +DA:397,0 +DA:401,0 +DA:402,0 +DA:404,0 +DA:408,0 +DA:409,0 +DA:411,0 +DA:420,0 +DA:421,0 +DA:426,0 +DA:427,0 +DA:429,0 +DA:430,0 +DA:431,0 +DA:442,0 +DA:443,0 +DA:448,0 +DA:449,0 +DA:451,0 +DA:452,0 +DA:453,0 +DA:459,0 +DA:460,0 +DA:462,0 +DA:465,0 +DA:466,0 +DA:468,0 +DA:471,0 +DA:472,0 +DA:484,0 +DA:485,0 +DA:487,0 +DA:488,0 +DA:489,0 +DA:495,0 +DA:496,0 +DA:499,0 +DA:502,0 +DA:503,0 +DA:517,5 +LF:149 +LH:3 +BRDA:142,0,0,0 +BRDA:142,0,1,0 +BRDA:146,1,0,0 +BRDA:146,1,1,0 +BRDA:146,2,0,0 +BRDA:146,2,1,0 +BRDA:146,3,0,0 +BRDA:146,3,1,0 +BRDA:157,4,0,0 +BRDA:157,4,1,0 +BRDA:162,5,0,0 +BRDA:162,5,1,0 +BRDA:180,6,0,0 +BRDA:180,6,1,0 +BRDA:202,7,0,0 +BRDA:202,7,1,0 +BRDA:202,7,2,0 +BRDA:231,8,0,0 +BRDA:231,8,1,0 +BRDA:235,9,0,0 +BRDA:235,9,1,0 +BRDA:235,10,0,0 +BRDA:235,10,1,0 +BRDA:235,11,0,0 +BRDA:235,11,1,0 +BRDA:249,12,0,0 +BRDA:249,12,1,0 +BRDA:253,13,0,0 +BRDA:253,13,1,0 +BRDA:253,14,0,0 +BRDA:253,14,1,0 +BRDA:253,15,0,0 +BRDA:253,15,1,0 +BRDA:268,16,0,0 +BRDA:268,16,1,0 +BRDA:272,17,0,0 +BRDA:272,17,1,0 +BRDA:272,18,0,0 +BRDA:272,18,1,0 +BRDA:272,19,0,0 +BRDA:272,19,1,0 +BRDA:290,20,0,0 +BRDA:290,20,1,0 +BRDA:304,21,0,0 +BRDA:304,21,1,0 +BRDA:327,22,0,0 +BRDA:327,22,1,0 +BRDA:341,23,0,0 +BRDA:341,23,1,0 +BRDA:359,24,0,0 +BRDA:359,24,1,0 +BRDA:375,25,0,0 +BRDA:375,25,1,0 +BRDA:376,26,0,0 +BRDA:376,26,1,0 +BRDA:377,27,0,0 +BRDA:377,27,1,0 +BRDA:385,28,0,0 +BRDA:385,28,1,0 +BRDA:426,29,0,0 +BRDA:426,29,1,0 +BRDA:430,30,0,0 +BRDA:430,30,1,0 +BRDA:430,31,0,0 +BRDA:430,31,1,0 +BRDA:430,32,0,0 +BRDA:430,32,1,0 +BRDA:448,33,0,0 +BRDA:448,33,1,0 +BRDA:452,34,0,0 +BRDA:452,34,1,0 +BRDA:452,35,0,0 +BRDA:452,35,1,0 +BRDA:452,36,0,0 +BRDA:452,36,1,0 +BRDA:484,37,0,0 +BRDA:484,37,1,0 +BRDA:488,38,0,0 +BRDA:488,38,1,0 +BRDA:488,39,0,0 +BRDA:488,39,1,0 +BRDA:488,40,0,0 +BRDA:488,40,1,0 +BRF:83 +BRH:0 +end_of_record +TN: +SF:static/collapse.tsx +FN:4,Collapse +FN:13,(anonymous_9) +FN:13,(anonymous_10) +FNF:3 +FNH:0 +FNDA:0,Collapse +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +DA:1,1 +DA:2,1 +DA:5,0 +DA:6,0 +DA:7,0 +DA:13,0 +DA:23,1 +DA:30,1 +DA:34,1 +DA:38,1 +DA:46,1 +DA:51,1 +DA:56,1 +DA:60,1 +LF:14 +LH:10 +BRDA:10,0,0,0 +BRDA:10,0,1,0 +BRDA:12,1,0,0 +BRDA:12,1,1,0 +BRDA:18,2,0,0 +BRDA:18,2,1,0 +BRF:6 +BRH:0 +end_of_record +TN: +SF:static/data.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:19,1 +DA:99,1 +LF:19 +LH:19 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/nav.tsx +FN:12,Nav +FN:22,fetchData +FN:23,(anonymous_8) +FN:31,(anonymous_9) +FN:44,(anonymous_10) +FNF:5 +FNH:4 +FNDA:4,Nav +FNDA:2,fetchData +FNDA:2,(anonymous_8) +FNDA:68,(anonymous_9) +FNDA:0,(anonymous_10) +DA:1,1 +DA:2,1 +DA:3,1 +DA:13,12 +DA:15,4 +DA:18,4 +DA:19,2 +DA:23,2 +DA:24,2 +DA:28,4 +DA:32,68 +DA:44,0 +DA:59,1 +DA:64,1 +DA:70,1 +DA:76,1 +LF:16 +LH:15 +BRDA:18,0,0,2 +BRDA:32,1,0,18 +BRDA:32,1,1,50 +BRDA:32,2,0,68 +BRDA:32,2,1,66 +BRDA:32,3,0,34 +BRDA:32,3,1,34 +BRDA:32,4,0,68 +BRDA:32,4,1,34 +BRDA:32,5,0,34 +BRDA:32,5,1,32 +BRDA:32,6,0,66 +BRDA:32,6,1,32 +BRDA:33,7,0,0 +BRDA:33,7,1,18 +BRF:15 +BRH:14 +end_of_record +TN: +SF:static/query_editor.tsx +FN:19,generateQuery +FN:24,(anonymous_9) +FN:33,mergeQueryParamValues +FN:38,(anonymous_11) +FN:47,QueryEditor +FN:69,(anonymous_13) +FN:75,(anonymous_14) +FN:80,(anonymous_15) +FN:86,updateQueryParameter +FN:87,(anonymous_17) +FN:90,renderPredefinedQueriesSelectors +FN:97,(anonymous_19) +FN:99,(anonymous_20) +FN:108,(anonymous_21) +FN:118,renderParameterSetters +FN:120,(anonymous_23) +FN:129,(anonymous_24) +FN:154,(anonymous_25) +FNF:18 +FNH:15 +FNDA:28,generateQuery +FNDA:14,(anonymous_9) +FNDA:16,mergeQueryParamValues +FNDA:9,(anonymous_11) +FNDA:38,QueryEditor +FNDA:15,(anonymous_13) +FNDA:15,(anonymous_14) +FNDA:26,(anonymous_15) +FNDA:0,updateQueryParameter +FNDA:0,(anonymous_17) +FNDA:21,renderPredefinedQueriesSelectors +FNDA:4,(anonymous_19) +FNDA:6,(anonymous_20) +FNDA:42,(anonymous_21) +FNDA:38,renderParameterSetters +FNDA:16,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:6,(anonymous_25) +DA:1,3 +DA:3,3 +DA:4,3 +DA:5,3 +DA:6,3 +DA:19,3 +DA:23,28 +DA:24,28 +DA:25,14 +DA:26,3 +DA:29,28 +DA:33,3 +DA:37,16 +DA:38,9 +DA:51,38 +DA:52,38 +DA:55,38 +DA:60,38 +DA:63,38 +DA:67,38 +DA:69,38 +DA:70,15 +DA:75,15 +DA:76,15 +DA:80,38 +DA:81,26 +DA:82,26 +DA:83,26 +DA:87,0 +DA:91,21 +DA:98,4 +DA:99,6 +DA:101,4 +DA:102,4 +DA:108,42 +DA:119,38 +DA:120,38 +DA:121,16 +DA:130,0 +DA:140,38 +DA:143,38 +DA:155,6 +DA:156,6 +DA:166,3 +DA:170,3 +LF:45 +LH:43 +BRDA:25,0,0,3 +BRDA:41,1,0,4 +BRDA:41,1,1,5 +BRDA:96,2,0,12 +BRDA:96,2,1,9 +BRDA:96,3,0,21 +BRDA:96,3,1,21 +BRDA:96,4,0,9 +BRDA:96,4,1,12 +BRDA:96,5,0,21 +BRDA:96,5,1,21 +BRDA:98,6,0,0 +BRDA:98,6,1,4 +BRDA:98,7,0,4 +BRDA:98,7,1,4 +BRDA:98,8,0,0 +BRDA:98,8,1,4 +BRDA:98,9,0,4 +BRDA:98,9,1,4 +BRDA:102,10,0,4 +BRDA:102,10,1,0 +BRDA:102,11,0,4 +BRDA:102,11,1,4 +BRDA:102,12,0,0 +BRDA:102,12,1,4 +BRDA:102,13,0,4 +BRDA:102,13,1,4 +BRDA:106,14,0,21 +BRDA:106,14,1,0 +BRDA:125,15,0,0 +BRDA:125,15,1,16 +BRDA:125,16,0,16 +BRDA:125,16,1,16 +BRDA:145,17,0,38 +BRDA:145,17,1,21 +BRDA:147,18,0,12 +BRDA:147,18,1,26 +BRDA:147,19,0,26 +BRDA:147,19,1,12 +BRDA:147,20,0,38 +BRDA:147,20,1,38 +BRDA:148,21,0,0 +BRDA:148,21,1,12 +BRDA:148,22,0,12 +BRDA:148,22,1,12 +BRF:45 +BRH:38 +end_of_record +TN: +SF:static/query_history.tsx +FN:4,setRecentHistory +FN:28,getRecentHistory +FNF:2 +FNH:2 +FNDA:10,setRecentHistory +FNDA:10,getRecentHistory +DA:2,3 +DA:4,3 +DA:5,10 +DA:6,10 +DA:7,10 +DA:8,0 +DA:10,10 +DA:11,10 +DA:12,10 +DA:13,6 +DA:15,10 +DA:16,10 +DA:18,10 +DA:19,1 +DA:21,10 +DA:24,0 +DA:28,3 +DA:29,10 +DA:30,10 +DA:31,10 +DA:32,3 +DA:33,3 +DA:35,0 +DA:38,7 +LF:24 +LH:21 +BRDA:7,0,0,0 +BRDA:12,1,0,6 +BRDA:15,2,0,10 +BRDA:18,3,0,1 +BRDA:31,4,0,3 +BRDA:31,4,1,7 +BRF:6 +BRH:5 +end_of_record +TN: +SF:static/select.tsx +FN:17,getParamFromStorage +FN:23,(anonymous_10) +FN:34,CustomSelect +FN:36,updateStorage +FNF:4 +FNH:4 +FNDA:7,getParamFromStorage +FNDA:12,(anonymous_10) +FNDA:25,CustomSelect +FNDA:5,updateStorage +DA:1,4 +DA:2,4 +DA:17,4 +DA:18,7 +DA:19,7 +DA:22,4 +DA:23,12 +DA:34,4 +DA:35,121 +DA:37,5 +DA:38,5 +DA:40,5 +DA:42,24 +DA:43,24 +LF:14 +LH:14 +BRDA:19,0,0,0 +BRDA:19,0,1,7 +BRDA:19,1,0,7 +BRDA:19,1,1,0 +BRDA:37,2,0,5 +BRF:5 +BRH:3 +end_of_record +TN: +SF:static/table.tsx +FN:19,createCustomTableStyles +FN:32,Table +FN:37,(anonymous_5) +FN:62,(anonymous_6) +FN:78,(anonymous_7) +FN:80,(anonymous_8) +FN:124,EditableTableCell +FN:133,(anonymous_10) +FNF:8 +FNH:6 +FNDA:14,createCustomTableStyles +FNDA:22,Table +FNDA:89,(anonymous_5) +FNDA:83,(anonymous_6) +FNDA:6,(anonymous_7) +FNDA:33,(anonymous_8) +FNDA:0,EditableTableCell +FNDA:0,(anonymous_10) +DA:1,5 +DA:3,5 +DA:12,5 +DA:20,14 +DA:22,14 +DA:33,62 +DA:35,20 +DA:36,20 +DA:37,89 +DA:38,20 +DA:41,20 +DA:45,20 +DA:49,20 +DA:53,20 +DA:58,20 +DA:62,83 +DA:78,6 +DA:80,33 +DA:92,5 +DA:96,5 +DA:104,5 +DA:109,5 +DA:116,5 +DA:128,0 +DA:130,0 +DA:133,0 +DA:140,5 +DA:150,5 +LF:28 +LH:25 +BRDA:20,0,0,0 +BRDA:36,1,0,20 +BRDA:36,1,1,0 +BRDA:36,2,0,20 +BRDA:36,2,1,20 +BRDA:38,3,0,14 +BRDA:38,3,1,6 +BRF:7 +BRH:5 +end_of_record +TN: +SF:static/theme.tsx +FNF:0 +FNH:0 +DA:1,5 +DA:14,5 +LF:2 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/auto_replacements_bypass_projects/index.tsx +FN:7,AutoReplacementsBypassProjects +FN:12,(anonymous_7) +FN:13,(anonymous_8) +FN:22,(anonymous_9) +FNF:4 +FNH:0 +FNDA:0,AutoReplacementsBypassProjects +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +DA:1,1 +DA:5,1 +DA:8,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:18,0 +DA:19,0 +DA:22,0 +DA:23,0 +DA:26,0 +DA:38,1 +LF:12 +LH:3 +BRDA:18,0,0,0 +BRF:1 +BRH:0 +end_of_record +TN: +SF:static/capacity_management/add_config_modal.tsx +FN:11,AddConfigModal +FN:35,selectConfigDefinition +FN:36,(anonymous_11) +FN:50,saveChanges +FN:56,updateParam +FN:57,(anonymous_14) +FN:62,setValue +FN:63,(anonymous_16) +FN:68,cancelAdding +FN:73,inputType +FN:87,(anonymous_19) +FN:92,(anonymous_20) +FN:106,(anonymous_21) +FN:114,(anonymous_22) +FN:125,(anonymous_23) +FNF:15 +FNH:15 +FNDA:14,AddConfigModal +FNDA:1,selectConfigDefinition +FNDA:2,(anonymous_11) +FNDA:1,saveChanges +FNDA:2,updateParam +FNDA:2,(anonymous_14) +FNDA:1,setValue +FNDA:1,(anonymous_16) +FNDA:1,cancelAdding +FNDA:12,inputType +FNDA:1,(anonymous_19) +FNDA:17,(anonymous_20) +FNDA:8,(anonymous_21) +FNDA:2,(anonymous_22) +FNDA:1,(anonymous_23) +DA:1,5 +DA:2,5 +DA:3,5 +DA:4,5 +DA:9,5 +DA:22,56 +DA:24,14 +DA:25,14 +DA:27,14 +DA:36,1 +DA:37,2 +DA:38,1 +DA:39,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:57,2 +DA:58,2 +DA:63,1 +DA:64,1 +DA:69,1 +DA:70,1 +DA:74,12 +DA:77,14 +DA:87,1 +DA:92,17 +DA:106,8 +DA:114,2 +DA:125,1 +DA:155,5 +LF:30 +LH:30 +BRDA:37,0,0,1 +BRDA:74,1,0,8 +BRDA:74,1,1,4 +BRDA:74,2,0,12 +BRDA:74,2,1,4 +BRDA:100,3,0,4 +BRDA:100,3,1,10 +BRDA:140,4,0,14 +BRDA:140,4,1,4 +BRDA:140,4,2,4 +BRDA:140,4,3,2 +BRDA:140,4,4,2 +BRF:12 +BRH:12 +end_of_record +TN: +SF:static/capacity_management/allocation_policy.tsx +FN:12,getTableColor +FN:15,(anonymous_9) +FN:40,AllocationPolicyConfigs +FN:49,(anonymous_11) +FN:64,enterEditMode +FN:69,deleteConfig +FN:77,(anonymous_14) +FN:78,(anonymous_15) +FN:80,(anonymous_16) +FN:84,(anonymous_17) +FN:89,saveConfig +FN:98,(anonymous_19) +FN:103,addConfig +FN:105,(anonymous_21) +FN:135,(anonymous_22) +FN:136,(anonymous_23) +FN:137,(anonymous_24) +FN:139,(anonymous_25) +FN:164,(anonymous_26) +FN:165,(anonymous_27) +FN:166,(anonymous_28) +FN:168,(anonymous_29) +FN:182,(anonymous_30) +FNF:23 +FNH:12 +FNDA:17,getTableColor +FNDA:32,(anonymous_9) +FNDA:9,AllocationPolicyConfigs +FNDA:3,(anonymous_11) +FNDA:1,enterEditMode +FNDA:0,deleteConfig +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,saveConfig +FNDA:0,(anonymous_19) +FNDA:0,addConfig +FNDA:0,(anonymous_21) +FNDA:6,(anonymous_22) +FNDA:3,(anonymous_23) +FNDA:1,(anonymous_24) +FNDA:3,(anonymous_25) +FNDA:6,(anonymous_26) +FNDA:3,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:3,(anonymous_29) +FNDA:0,(anonymous_30) +DA:1,4 +DA:3,4 +DA:4,4 +DA:7,4 +DA:8,4 +DA:9,4 +DA:10,4 +DA:13,17 +DA:14,17 +DA:15,17 +DA:16,32 +DA:17,3 +DA:18,2 +DA:20,1 +DA:23,32 +DA:24,3 +DA:25,2 +DA:27,1 +DA:31,17 +DA:32,1 +DA:33,16 +DA:34,1 +DA:36,15 +DA:45,23 +DA:47,7 +DA:49,7 +DA:50,3 +DA:51,3 +DA:54,7 +DA:55,7 +DA:62,7 +DA:65,1 +DA:66,1 +DA:70,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:85,0 +DA:90,0 +DA:99,0 +DA:104,0 +DA:105,0 +DA:108,7 +DA:135,6 +DA:137,3 +DA:139,3 +DA:164,6 +DA:166,3 +DA:168,3 +DA:182,0 +DA:192,4 +LF:51 +LH:41 +BRDA:16,0,0,3 +BRDA:17,1,0,2 +BRDA:17,1,1,1 +BRDA:23,2,0,3 +BRDA:24,3,0,2 +BRDA:24,3,1,1 +BRDA:31,4,0,1 +BRDA:31,4,1,16 +BRDA:31,5,0,17 +BRDA:31,5,1,2 +BRDA:33,6,0,1 +BRDA:33,6,1,15 +BRDA:33,7,0,16 +BRDA:33,7,1,1 +BRDA:79,8,0,0 +BRDA:79,8,1,0 +BRDA:181,9,0,7 +BRDA:181,9,1,7 +BRDA:181,9,2,3 +BRF:19 +BRH:17 +end_of_record +TN: +SF:static/capacity_management/edit_config_modal.tsx +FN:7,EditConfigModal +FN:24,saveChanges +FN:30,confirmDeleteConfig +FN:43,deleteOrReset +FN:47,inputType +FN:52,(anonymous_12) +FN:66,(anonymous_13) +FN:72,(anonymous_14) +FNF:8 +FNH:7 +FNDA:9,EditConfigModal +FNDA:1,saveChanges +FNDA:1,confirmDeleteConfig +FNDA:19,deleteOrReset +FNDA:9,inputType +FNDA:0,(anonymous_12) +FNDA:1,(anonymous_13) +FNDA:1,(anonymous_14) +DA:1,5 +DA:2,5 +DA:3,5 +DA:4,5 +DA:20,45 +DA:22,9 +DA:25,1 +DA:26,1 +DA:27,1 +DA:31,1 +DA:38,1 +DA:40,1 +DA:44,19 +DA:48,9 +DA:51,9 +DA:52,0 +DA:66,1 +DA:72,1 +DA:89,5 +LF:19 +LH:18 +BRDA:31,0,0,1 +BRDA:44,1,0,0 +BRDA:44,1,1,19 +BRDA:48,2,0,3 +BRDA:48,2,1,6 +BRDA:48,3,0,9 +BRDA:48,3,1,6 +BRDA:76,4,0,9 +BRDA:76,4,1,0 +BRF:9 +BRH:7 +end_of_record +TN: +SF:static/capacity_management/index.tsx +FN:7,CapacityManagement +FN:16,(anonymous_7) +FN:17,(anonymous_8) +FN:26,selectStorage +FN:31,loadAllocationPolicies +FN:34,(anonymous_11) +FN:37,(anonymous_12) +FN:55,(anonymous_13) +FNF:8 +FNH:7 +FNDA:5,CapacityManagement +FNDA:1,(anonymous_7) +FNDA:1,(anonymous_8) +FNDA:1,selectStorage +FNDA:1,loadAllocationPolicies +FNDA:1,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:2,(anonymous_13) +DA:1,2 +DA:3,2 +DA:5,2 +DA:8,5 +DA:10,4 +DA:11,4 +DA:12,4 +DA:16,4 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,0 +DA:27,1 +DA:28,1 +DA:32,1 +DA:35,1 +DA:38,0 +DA:42,4 +DA:55,2 +DA:70,2 +LF:21 +LH:19 +BRDA:20,0,0,0 +BRDA:47,1,0,4 +BRDA:47,1,1,2 +BRDA:54,2,0,2 +BRDA:54,2,1,2 +BRDA:54,3,0,4 +BRDA:54,3,1,2 +BRF:7 +BRH:6 +end_of_record +TN: +SF:static/capacity_management/row_data.tsx +FN:5,getReadonlyRow +FN:42,(anonymous_2) +FNF:2 +FNH:2 +FNDA:6,getReadonlyRow +FNDA:1,(anonymous_2) +DA:1,4 +DA:3,4 +DA:9,6 +DA:42,1 +DA:51,4 +LF:5 +LH:5 +BRDA:17,0,0,3 +BRDA:17,0,1,3 +BRF:2 +BRH:2 +end_of_record +TN: +SF:static/capacity_management/styles.tsx +FNF:0 +FNH:0 +DA:1,4 +DA:3,4 +DA:9,4 +DA:14,4 +DA:21,4 +DA:26,4 +LF:6 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/cardinality_analyzer/CSV.ts +FN:1,(anonymous_0) +FN:2,(anonymous_2) +FN:6,(anonymous_3) +FN:10,(anonymous_4) +FNF:4 +FNH:4 +FNDA:2,(anonymous_0) +FNDA:4,(anonymous_2) +FNDA:8,(anonymous_3) +FNDA:16,(anonymous_4) +DA:1,2 +DA:2,2 +DA:3,4 +DA:6,2 +DA:7,8 +DA:10,2 +DA:11,16 +DA:13,16 +DA:14,15 +DA:15,15 +DA:17,15 +DA:18,2 +DA:21,13 +DA:24,1 +DA:26,2 +LF:15 +LH:15 +BRDA:11,0,0,0 +BRDA:13,1,0,15 +BRDA:17,2,0,2 +BRF:3 +BRH:2 +end_of_record +TN: +SF:static/cardinality_analyzer/index.tsx +FN:7,CardinalityQueries +FN:12,(anonymous_8) +FN:13,(anonymous_9) +FN:15,(anonymous_10) +FN:21,tablePopulator +FN:31,formatSQL +FN:34,(anonymous_13) +FNF:7 +FNH:0 +FNDA:0,CardinalityQueries +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,tablePopulator +FNDA:0,formatSQL +FNDA:0,(anonymous_13) +DA:1,1 +DA:3,1 +DA:4,1 +DA:8,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:17,0 +DA:22,0 +DA:32,0 +DA:34,0 +DA:36,0 +DA:39,0 +DA:50,1 +DA:55,1 +DA:60,1 +LF:17 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/cardinality_analyzer/query_display.tsx +FN:15,(anonymous_10) +FN:22,QueryDisplay +FN:32,updateQuerySql +FN:33,(anonymous_13) +FN:41,convertResultsToCSV +FN:45,copyText +FN:49,(anonymous_16) +FN:63,executeQuery +FN:66,(anonymous_18) +FN:69,(anonymous_19) +FN:80,(anonymous_20) +FN:90,(anonymous_21) +FN:98,(anonymous_22) +FN:106,(anonymous_23) +FN:120,(anonymous_24) +FN:126,(anonymous_25) +FNF:16 +FNH:1 +FNDA:1,(anonymous_10) +FNDA:0,QueryDisplay +FNDA:0,updateQuerySql +FNDA:0,(anonymous_13) +FNDA:0,convertResultsToCSV +FNDA:0,copyText +FNDA:0,(anonymous_16) +FNDA:0,executeQuery +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +DA:1,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:21,1 +DA:27,0 +DA:28,0 +DA:33,0 +DA:34,0 +DA:42,0 +DA:49,0 +DA:50,0 +DA:52,0 +DA:53,0 +DA:56,0 +DA:57,0 +DA:60,0 +DA:64,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:76,0 +DA:81,0 +DA:91,0 +DA:92,0 +DA:98,0 +DA:106,0 +DA:116,0 +DA:120,0 +DA:126,0 +DA:139,1 +DA:145,1 +DA:152,1 +LF:38 +LH:13 +BRDA:15,0,0,1 +BRDA:15,0,1,1 +BRDA:52,1,0,0 +BRDA:56,2,0,0 +BRDA:67,3,0,0 +BRDA:67,3,1,0 +BRDA:91,4,0,0 +BRF:7 +BRH:2 +end_of_record +TN: +SF:static/clickhouse_migrations/index.tsx +FN:13,ClickhouseMigrations +FN:29,(anonymous_7) +FN:30,(anonymous_8) +FN:33,(anonymous_9) +FN:39,clearBtnState +FN:40,(anonymous_11) +FN:41,(anonymous_12) +FN:42,(anonymous_13) +FN:45,selectGroup +FN:47,(anonymous_15) +FN:49,(anonymous_16) +FN:50,(anonymous_17) +FN:54,selectMigration +FN:55,(anonymous_19) +FN:57,(anonymous_20) +FN:60,selectForwards +FN:61,(anonymous_22) +FN:62,(anonymous_23) +FN:65,selectBackwards +FN:66,(anonymous_25) +FN:67,(anonymous_26) +FN:70,execute +FN:73,(anonymous_28) +FN:103,executeRun +FN:114,(anonymous_30) +FN:122,(anonymous_31) +FN:127,(anonymous_32) +FN:129,(anonymous_33) +FN:136,executeDryRun +FN:138,(anonymous_35) +FN:140,(anonymous_36) +FN:143,executeRealRun +FN:146,(anonymous_38) +FN:147,(anonymous_39) +FN:165,refreshStatus +FN:166,(anonymous_41) +FN:169,(anonymous_42) +FN:176,rowData +FN:179,(anonymous_44) +FN:191,renderMigrationIds +FN:200,(anonymous_46) +FN:210,renderActions +FN:215,(anonymous_48) +FN:227,(anonymous_49) +FN:237,(anonymous_50) +FN:271,(anonymous_51) +FN:281,(anonymous_52) +FN:288,(anonymous_53) +FNF:48 +FNH:0 +FNDA:0,ClickhouseMigrations +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,clearBtnState +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,selectGroup +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,selectMigration +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,selectForwards +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,selectBackwards +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,execute +FNDA:0,(anonymous_28) +FNDA:0,executeRun +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,executeDryRun +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,executeRealRun +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,refreshStatus +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,rowData +FNDA:0,(anonymous_44) +FNDA:0,renderMigrationIds +FNDA:0,(anonymous_46) +FNDA:0,renderActions +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +DA:1,1 +DA:3,1 +DA:4,1 +DA:11,1 +DA:14,0 +DA:15,0 +DA:16,0 +DA:17,0 +DA:18,0 +DA:20,0 +DA:21,0 +DA:23,0 +DA:24,0 +DA:26,0 +DA:27,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:35,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:61,0 +DA:62,0 +DA:66,0 +DA:67,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:75,0 +DA:76,0 +DA:78,0 +DA:80,0 +DA:82,0 +DA:83,0 +DA:88,0 +DA:91,0 +DA:92,0 +DA:97,0 +DA:100,0 +DA:105,0 +DA:112,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:119,0 +DA:120,0 +DA:122,0 +DA:123,0 +DA:124,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:140,0 +DA:144,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:149,0 +DA:151,0 +DA:154,0 +DA:155,0 +DA:159,0 +DA:160,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:169,0 +DA:171,0 +DA:172,0 +DA:177,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:186,0 +DA:188,0 +DA:192,0 +DA:200,0 +DA:211,0 +DA:212,0 +DA:214,0 +DA:215,0 +DA:218,0 +DA:227,0 +DA:237,0 +DA:258,0 +DA:271,0 +DA:281,0 +DA:288,0 +DA:323,1 +DA:325,1 +DA:330,1 +DA:334,1 +DA:340,1 +DA:345,1 +DA:351,1 +DA:355,1 +DA:361,1 +LF:114 +LH:13 +BRDA:72,0,0,0 +BRDA:72,0,1,0 +BRDA:72,1,0,0 +BRDA:72,1,1,0 +BRDA:75,2,0,0 +BRDA:75,3,0,0 +BRDA:75,3,1,0 +BRDA:78,4,0,0 +BRDA:78,5,0,0 +BRDA:78,5,1,0 +BRDA:82,6,0,0 +BRDA:82,7,0,0 +BRDA:82,7,1,0 +BRDA:82,8,0,0 +BRDA:82,8,1,0 +BRDA:83,9,0,0 +BRDA:91,10,0,0 +BRDA:91,11,0,0 +BRDA:91,11,1,0 +BRDA:91,12,0,0 +BRDA:91,12,1,0 +BRDA:91,13,0,0 +BRDA:91,13,1,0 +BRDA:92,14,0,0 +BRDA:94,15,0,0 +BRDA:94,15,1,0 +BRDA:94,16,0,0 +BRDA:94,16,1,0 +BRDA:108,17,0,0 +BRDA:108,17,1,0 +BRDA:108,18,0,0 +BRDA:108,18,1,0 +BRDA:116,19,0,0 +BRDA:116,20,0,0 +BRDA:116,20,1,0 +BRDA:119,21,0,0 +BRDA:119,22,0,0 +BRDA:119,22,1,0 +BRDA:123,23,0,0 +BRDA:130,24,0,0 +BRDA:148,25,0,0 +BRDA:148,25,1,0 +BRDA:152,26,0,0 +BRDA:152,26,1,0 +BRDA:154,27,0,0 +BRDA:159,28,0,0 +BRDA:177,29,0,0 +BRDA:195,30,0,0 +BRDA:195,30,1,0 +BRDA:199,31,0,0 +BRDA:199,31,1,0 +BRDA:211,32,0,0 +BRDA:211,33,0,0 +BRDA:211,33,1,0 +BRDA:211,34,0,0 +BRDA:211,34,1,0 +BRDA:214,35,0,0 +BRDA:214,35,1,0 +BRDA:214,36,0,0 +BRDA:214,36,1,0 +BRDA:220,37,0,0 +BRDA:220,37,1,0 +BRDA:223,38,0,0 +BRDA:223,38,1,0 +BRDA:223,39,0,0 +BRDA:223,39,1,0 +BRDA:224,40,0,0 +BRDA:224,40,1,0 +BRDA:224,41,0,0 +BRDA:224,41,1,0 +BRDA:224,42,0,0 +BRDA:224,42,1,0 +BRDA:224,43,0,0 +BRDA:224,43,1,0 +BRDA:224,44,0,0 +BRDA:224,44,1,0 +BRDA:230,45,0,0 +BRDA:230,45,1,0 +BRDA:233,46,0,0 +BRDA:233,46,1,0 +BRDA:233,47,0,0 +BRDA:233,47,1,0 +BRDA:234,48,0,0 +BRDA:234,48,1,0 +BRDA:234,49,0,0 +BRDA:234,49,1,0 +BRDA:234,50,0,0 +BRDA:234,50,1,0 +BRDA:234,51,0,0 +BRDA:234,51,1,0 +BRDA:234,52,0,0 +BRDA:234,52,1,0 +BRDA:241,53,0,0 +BRDA:241,53,1,0 +BRDA:241,53,2,0 +BRDA:241,53,3,0 +BRDA:241,54,0,0 +BRDA:241,54,1,0 +BRDA:241,55,0,0 +BRDA:241,55,1,0 +BRDA:241,56,0,0 +BRDA:241,56,1,0 +BRDA:241,57,0,0 +BRDA:241,57,1,0 +BRDA:244,58,0,0 +BRDA:244,58,1,0 +BRDA:244,59,0,0 +BRDA:244,59,1,0 +BRDA:247,60,0,0 +BRDA:247,60,1,0 +BRDA:247,60,2,0 +BRDA:247,60,3,0 +BRDA:247,61,0,0 +BRDA:247,61,1,0 +BRDA:247,62,0,0 +BRDA:247,62,1,0 +BRDA:247,63,0,0 +BRDA:247,63,1,0 +BRDA:247,64,0,0 +BRDA:247,64,1,0 +BRDA:250,65,0,0 +BRDA:250,65,1,0 +BRDA:250,66,0,0 +BRDA:250,66,1,0 +BRDA:268,67,0,0 +BRDA:268,67,1,0 +BRDA:268,68,0,0 +BRDA:268,68,1,0 +BRDA:268,69,0,0 +BRDA:268,69,1,0 +BRDA:277,70,0,0 +BRDA:277,70,1,0 +BRDA:277,70,2,0 +BRDA:282,71,0,0 +BRDA:282,71,1,0 +BRDA:289,72,0,0 +BRDA:289,72,1,0 +BRDA:300,73,0,0 +BRDA:300,73,1,0 +BRDA:300,73,2,0 +BRDA:300,73,3,0 +BRDA:311,74,0,0 +BRDA:311,74,1,0 +BRF:143 +BRH:0 +end_of_record +TN: +SF:static/clickhouse_migrations/types.tsx +FN:20,(anonymous_0) +FNF:1 +FNH:1 +FNDA:1,(anonymous_0) +DA:20,1 +DA:21,1 +DA:22,1 +LF:3 +LH:3 +BRDA:20,0,0,1 +BRDA:20,0,1,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:static/clickhouse_queries/index.tsx +FN:7,ClickhouseQueries +FN:12,(anonymous_8) +FN:13,(anonymous_9) +FN:15,(anonymous_10) +FN:21,tablePopulator +FN:32,formatSQL +FN:35,(anonymous_13) +FNF:7 +FNH:0 +FNDA:0,ClickhouseQueries +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,tablePopulator +FNDA:0,formatSQL +FNDA:0,(anonymous_13) +DA:1,1 +DA:3,1 +DA:4,1 +DA:8,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:17,0 +DA:22,0 +DA:33,0 +DA:35,0 +DA:37,0 +DA:40,0 +DA:51,1 +DA:56,1 +DA:61,1 +LF:17 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/clickhouse_queries/query_display.tsx +FN:27,QueryDisplay +FN:40,(anonymous_11) +FN:41,(anonymous_12) +FN:46,selectStorage +FN:47,(anonymous_14) +FN:59,setSudo +FN:60,(anonymous_16) +FN:68,selectHost +FN:71,(anonymous_18) +FN:80,updateQuerySql +FN:81,(anonymous_20) +FN:89,executeQuery +FN:92,(anonymous_22) +FN:95,(anonymous_23) +FN:99,copyText +FN:103,getHosts +FN:104,(anonymous_26) +FN:107,(anonymous_27) +FN:112,(anonymous_28) +FN:113,(anonymous_29) +FN:137,(anonymous_30) +FN:146,(anonymous_31) +FN:157,(anonymous_32) +FN:181,(anonymous_33) +FN:189,(anonymous_34) +FN:203,(anonymous_35) +FN:239,TextArea +FN:251,(anonymous_37) +FN:253,(anonymous_38) +FN:259,(anonymous_39) +FNF:30 +FNH:0 +FNDA:0,QueryDisplay +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,selectStorage +FNDA:0,(anonymous_14) +FNDA:0,setSudo +FNDA:0,(anonymous_16) +FNDA:0,selectHost +FNDA:0,(anonymous_18) +FNDA:0,updateQuerySql +FNDA:0,(anonymous_20) +FNDA:0,executeQuery +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,copyText +FNDA:0,getHosts +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,TextArea +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +DA:1,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:26,1 +DA:32,0 +DA:33,0 +DA:36,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:47,0 +DA:49,0 +DA:50,0 +DA:52,0 +DA:60,0 +DA:61,0 +DA:69,0 +DA:71,0 +DA:72,0 +DA:81,0 +DA:82,0 +DA:90,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:100,0 +DA:104,0 +DA:106,0 +DA:107,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:125,0 +DA:127,0 +DA:130,0 +DA:138,0 +DA:147,0 +DA:157,0 +DA:182,0 +DA:183,0 +DA:189,0 +DA:199,0 +DA:203,0 +DA:216,1 +DA:220,1 +DA:222,1 +DA:228,1 +DA:234,1 +DA:243,0 +DA:244,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:259,0 +DA:260,0 +DA:263,0 +DA:275,1 +DA:282,1 +LF:72 +LH:21 +BRDA:106,0,0,0 +BRDA:119,1,0,0 +BRDA:132,2,0,0 +BRDA:132,2,1,0 +BRDA:154,3,0,0 +BRDA:154,3,1,0 +BRDA:162,4,0,0 +BRDA:162,4,1,0 +BRDA:162,5,0,0 +BRDA:162,5,1,0 +BRDA:173,6,0,0 +BRDA:173,6,1,0 +BRDA:173,6,2,0 +BRDA:173,6,3,0 +BRDA:182,7,0,0 +BRDA:269,8,0,0 +BRDA:269,8,1,0 +BRF:17 +BRH:0 +end_of_record +TN: +SF:static/common/components/sql_editor.tsx +FN:14,SQLEditor +FN:18,(anonymous_7) +FN:19,(anonymous_8) +FN:26,(anonymous_9) +FN:40,(anonymous_10) +FN:53,(anonymous_11) +FNF:6 +FNH:0 +FNDA:0,SQLEditor +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:6,1 +DA:7,1 +DA:14,1 +DA:15,0 +DA:16,0 +DA:18,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:26,0 +DA:27,0 +DA:30,0 +DA:40,0 +DA:41,0 +DA:43,0 +DA:47,0 +DA:53,0 +DA:54,0 +DA:56,0 +DA:58,0 +DA:59,0 +DA:68,0 +LF:26 +LH:7 +BRDA:20,0,0,0 +BRDA:41,1,0,0 +BRDA:54,2,0,0 +BRDA:58,3,0,0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:static/common/components/theme.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:5,1 +DA:11,1 +LF:5 +LH:5 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/dead_letter_queue/index.tsx +FN:6,DeadLetterQueue +FN:17,(anonymous_9) +FN:18,(anonymous_10) +FN:21,(anonymous_11) +FN:26,clearInstruction +FN:27,(anonymous_13) +FN:32,replayDlq +FN:42,(anonymous_15) +FN:67,(anonymous_16) +FN:97,(anonymous_17) +FN:111,(anonymous_18) +FN:127,(anonymous_19) +FN:152,(anonymous_20) +FN:175,(anonymous_21) +FNF:14 +FNH:0 +FNDA:0,DeadLetterQueue +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,clearInstruction +FNDA:0,(anonymous_13) +FNDA:0,replayDlq +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +DA:1,1 +DA:3,1 +DA:8,0 +DA:11,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:17,0 +DA:18,0 +DA:19,0 +DA:21,0 +DA:22,0 +DA:27,0 +DA:28,0 +DA:33,0 +DA:34,0 +DA:37,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:51,0 +DA:52,0 +DA:55,0 +DA:68,0 +DA:98,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:105,0 +DA:111,0 +DA:128,0 +DA:129,0 +DA:153,0 +DA:154,0 +DA:155,0 +DA:176,0 +DA:188,1 +DA:195,1 +DA:200,1 +DA:206,1 +DA:210,1 +DA:215,1 +DA:222,1 +DA:226,1 +LF:48 +LH:10 +BRDA:33,0,0,0 +BRDA:33,1,0,0 +BRDA:33,1,1,0 +BRDA:51,2,0,0 +BRDA:60,3,0,0 +BRDA:60,3,1,0 +BRDA:63,4,0,0 +BRDA:63,4,1,0 +BRDA:75,5,0,0 +BRDA:75,5,1,0 +BRDA:78,6,0,0 +BRDA:78,6,1,0 +BRDA:86,7,0,0 +BRDA:86,7,1,0 +BRDA:95,8,0,0 +BRDA:95,8,1,0 +BRDA:99,9,0,0 +BRDA:128,10,0,0 +BRDA:128,10,1,0 +BRDA:154,11,0,0 +BRDA:154,12,0,0 +BRDA:154,12,1,0 +BRDA:165,13,0,0 +BRDA:165,13,1,0 +BRF:24 +BRH:0 +end_of_record +TN: +SF:static/delete_tool/index.tsx +FN:4,DeleteTool +FN:11,getHelpMessage +FN:30,submitRequest +FN:39,(anonymous_9) +FN:42,(anonymous_10) +FN:46,(anonymous_11) +FN:49,(anonymous_12) +FN:50,(anonymous_13) +FN:50,(anonymous_14) +FN:65,(anonymous_15) +FN:68,(anonymous_16) +FN:69,(anonymous_17) +FN:70,(anonymous_18) +FNF:13 +FNH:0 +FNDA:0,DeleteTool +FNDA:0,getHelpMessage +FNDA:0,submitRequest +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +DA:2,1 +DA:5,0 +DA:6,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:12,0 +DA:13,0 +DA:26,0 +DA:32,0 +DA:33,0 +DA:35,0 +DA:36,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:44,0 +DA:46,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:54,0 +DA:58,0 +DA:59,0 +DA:62,0 +DA:65,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:77,1 +LF:33 +LH:2 +BRDA:12,0,0,0 +BRDA:12,0,1,0 +BRDA:41,1,0,0 +BRDA:41,1,1,0 +BRDA:51,2,0,0 +BRDA:51,3,0,0 +BRDA:51,3,1,0 +BRDA:58,4,0,0 +BRF:8 +BRH:0 +end_of_record +TN: +SF:static/kafka/index.tsx +FN:6,TopicData +FN:9,(anonymous_7) +FN:10,(anonymous_8) +FNF:3 +FNH:3 +FNDA:2,TopicData +FNDA:1,(anonymous_7) +FNDA:1,(anonymous_8) +DA:1,2 +DA:7,2 +DA:9,2 +DA:10,1 +DA:11,1 +DA:15,2 +DA:18,2 +LF:7 +LH:7 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/mql_queries/index.tsx +FN:53,MQLQueries +FN:62,(anonymous_12) +FN:63,(anonymous_13) +FN:68,updateMQLQuery +FN:69,(anonymous_15) +FN:77,executeQuery +FN:89,(anonymous_17) +FN:91,(anonymous_18) +FN:97,(anonymous_19) +FN:99,(anonymous_20) +FN:105,(anonymous_21) +FN:120,(anonymous_22) +FN:131,(anonymous_23) +FN:164,(anonymous_24) +FN:174,(anonymous_25) +FN:200,(anonymous_26) +FN:223,ProjectsList +FN:241,MQLExample +FN:260,renderThrottleStatus +FN:267,(anonymous_30) +FN:280,renderPolicyDetails +FN:284,(anonymous_32) +FN:299,QueryResultQuotaAllowance +FN:303,(anonymous_34) +FN:309,(anonymous_35) +FN:335,QueryResultHistoryItem +FN:345,(anonymous_37) +FN:355,(anonymous_38) +FNF:28 +FNH:0 +FNDA:0,MQLQueries +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,updateMQLQuery +FNDA:0,(anonymous_15) +FNDA:0,executeQuery +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,ProjectsList +FNDA:0,MQLExample +FNDA:0,renderThrottleStatus +FNDA:0,(anonymous_30) +FNDA:0,renderPolicyDetails +FNDA:0,(anonymous_32) +FNDA:0,QueryResultQuotaAllowance +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,QueryResultHistoryItem +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +DA:1,1 +DA:3,1 +DA:4,1 +DA:10,1 +DA:11,1 +DA:24,1 +DA:25,1 +DA:27,1 +DA:29,1 +DA:54,0 +DA:55,0 +DA:56,0 +DA:59,0 +DA:60,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:69,0 +DA:70,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:83,0 +DA:84,0 +DA:85,0 +DA:89,0 +DA:90,0 +DA:91,0 +DA:93,0 +DA:98,0 +DA:99,0 +DA:105,0 +DA:109,0 +DA:120,0 +DA:131,0 +DA:165,0 +DA:175,0 +DA:201,0 +DA:224,0 +DA:226,0 +DA:242,0 +DA:244,0 +DA:261,0 +DA:267,0 +DA:281,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:301,0 +DA:303,0 +DA:306,0 +DA:307,0 +DA:308,0 +DA:310,0 +DA:311,0 +DA:312,0 +DA:323,0 +DA:336,0 +DA:346,0 +DA:356,0 +DA:373,1 +LF:63 +LH:10 +BRDA:83,0,0,0 +BRDA:119,1,0,0 +BRDA:119,1,1,0 +BRDA:130,2,0,0 +BRDA:130,2,1,0 +BRDA:144,3,0,0 +BRDA:144,3,1,0 +BRDA:151,4,0,0 +BRDA:151,4,1,0 +BRDA:196,5,0,0 +BRDA:196,5,1,0 +BRDA:230,6,0,0 +BRDA:230,6,1,0 +BRDA:247,7,0,0 +BRDA:247,7,1,0 +BRDA:261,8,0,0 +BRDA:261,8,1,0 +BRDA:283,9,0,0 +BRDA:283,9,1,0 +BRDA:301,10,0,0 +BRDA:301,10,1,0 +BRDA:301,10,2,0 +BRDA:307,11,0,0 +BRDA:308,12,0,0 +BRDA:308,12,1,0 +BRDA:311,13,0,0 +BRDA:311,14,0,0 +BRDA:311,14,1,0 +BRF:28 +BRH:0 +end_of_record +TN: +SF:static/mql_queries/styles.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:7,1 +DA:11,1 +DA:17,1 +DA:22,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +LF:10 +LH:10 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/production_queries/index.tsx +FN:27,ProductionQueries +FN:37,(anonymous_12) +FN:38,(anonymous_13) +FN:43,(anonymous_14) +FN:44,(anonymous_15) +FN:49,selectDataset +FN:50,(anonymous_17) +FN:58,updateQuerySql +FN:59,(anonymous_19) +FN:67,executeQuery +FN:70,(anonymous_21) +FN:72,(anonymous_22) +FN:77,(anonymous_23) +FN:79,(anonymous_24) +FN:86,(anonymous_25) +FN:98,(anonymous_26) +FN:139,(anonymous_27) +FN:149,(anonymous_28) +FN:175,(anonymous_29) +FN:197,ProjectsList +FN:215,renderThrottleStatus +FN:222,(anonymous_32) +FN:235,renderPolicyDetails +FN:239,(anonymous_34) +FN:254,QueryResultQuotaAllowance +FN:258,(anonymous_36) +FN:264,(anonymous_37) +FN:290,QueryResultHistoryItem +FN:300,(anonymous_39) +FN:310,(anonymous_40) +FNF:30 +FNH:0 +FNDA:0,ProductionQueries +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,selectDataset +FNDA:0,(anonymous_17) +FNDA:0,updateQuerySql +FNDA:0,(anonymous_19) +FNDA:0,executeQuery +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,ProjectsList +FNDA:0,renderThrottleStatus +FNDA:0,(anonymous_32) +FNDA:0,renderPolicyDetails +FNDA:0,(anonymous_34) +FNDA:0,QueryResultQuotaAllowance +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,QueryResultHistoryItem +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +DA:1,1 +DA:3,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:26,1 +DA:28,0 +DA:29,0 +DA:30,0 +DA:33,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:50,0 +DA:51,0 +DA:59,0 +DA:60,0 +DA:68,0 +DA:71,0 +DA:72,0 +DA:74,0 +DA:78,0 +DA:79,0 +DA:85,0 +DA:86,0 +DA:90,0 +DA:98,0 +DA:140,0 +DA:150,0 +DA:176,0 +DA:198,0 +DA:200,0 +DA:216,0 +DA:222,0 +DA:236,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:256,0 +DA:258,0 +DA:261,0 +DA:262,0 +DA:263,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:278,0 +DA:291,0 +DA:301,0 +DA:311,0 +DA:328,1 +LF:59 +LH:11 +BRDA:97,0,0,0 +BRDA:97,0,1,0 +BRDA:109,1,0,0 +BRDA:109,1,1,0 +BRDA:119,2,0,0 +BRDA:119,2,1,0 +BRDA:126,3,0,0 +BRDA:126,3,1,0 +BRDA:171,4,0,0 +BRDA:171,4,1,0 +BRDA:204,5,0,0 +BRDA:204,5,1,0 +BRDA:216,6,0,0 +BRDA:216,6,1,0 +BRDA:238,7,0,0 +BRDA:238,7,1,0 +BRDA:256,8,0,0 +BRDA:256,8,1,0 +BRDA:256,8,2,0 +BRDA:262,9,0,0 +BRDA:263,10,0,0 +BRDA:263,10,1,0 +BRDA:266,11,0,0 +BRDA:266,12,0,0 +BRDA:266,12,1,0 +BRF:25 +BRH:0 +end_of_record +TN: +SF:static/production_queries/styles.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:7,1 +DA:13,1 +DA:18,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +LF:8 +LH:8 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/querylog/index.tsx +FN:7,QuerylogQueries +FN:12,(anonymous_8) +FN:13,(anonymous_9) +FN:15,(anonymous_10) +FN:21,tablePopulator +FN:32,formatSQL +FN:35,(anonymous_13) +FNF:7 +FNH:0 +FNDA:0,QuerylogQueries +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,tablePopulator +FNDA:0,formatSQL +FNDA:0,(anonymous_13) +DA:1,1 +DA:3,1 +DA:4,1 +DA:8,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:17,0 +DA:22,0 +DA:33,0 +DA:35,0 +DA:37,0 +DA:40,0 +DA:51,1 +DA:56,1 +DA:61,1 +LF:17 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/querylog/query_display.tsx +FN:14,QueryDisplay +FN:24,updateQuerySql +FN:25,(anonymous_12) +FN:33,executeQuery +FN:36,(anonymous_14) +FN:39,(anonymous_15) +FN:43,getQuerylogSchema +FN:46,(anonymous_17) +FN:48,(anonymous_18) +FN:50,(anonymous_19) +FN:56,convertResultsToCSV +FN:59,(anonymous_21) +FN:67,copyText +FN:76,(anonymous_23) +FN:85,(anonymous_24) +FN:96,(anonymous_25) +FN:104,(anonymous_26) +FN:112,(anonymous_27) +FN:126,(anonymous_28) +FN:132,(anonymous_29) +FN:163,TextArea +FN:172,(anonymous_31) +FNF:22 +FNH:0 +FNDA:0,QueryDisplay +FNDA:0,updateQuerySql +FNDA:0,(anonymous_12) +FNDA:0,executeQuery +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,getQuerylogSchema +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,convertResultsToCSV +FNDA:0,(anonymous_21) +FNDA:0,copyText +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,TextArea +FNDA:0,(anonymous_31) +DA:1,1 +DA:2,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:9,1 +DA:12,1 +DA:19,0 +DA:20,0 +DA:25,0 +DA:26,0 +DA:34,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:44,0 +DA:47,0 +DA:48,0 +DA:51,0 +DA:52,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:62,0 +DA:64,0 +DA:68,0 +DA:69,0 +DA:72,0 +DA:77,0 +DA:86,0 +DA:87,0 +DA:97,0 +DA:98,0 +DA:104,0 +DA:112,0 +DA:122,0 +DA:126,0 +DA:132,0 +DA:145,1 +DA:151,1 +DA:158,1 +DA:167,0 +DA:168,0 +DA:172,0 +DA:179,1 +DA:185,1 +LF:47 +LH:12 +BRDA:37,0,0,0 +BRDA:37,0,1,0 +BRDA:60,1,0,0 +BRDA:60,1,1,0 +BRDA:60,2,0,0 +BRDA:60,2,1,0 +BRDA:68,3,0,0 +BRDA:68,3,1,0 +BRDA:97,4,0,0 +BRF:9 +BRH:0 +end_of_record +TN: +SF:static/runtime_config/auditlog.tsx +FN:8,AuditLog +FN:12,fetchData +FN:13,(anonymous_8) +FN:27,(anonymous_9) +FN:67,getFormattedValue +FN:86,getActionDetail +FNF:6 +FNH:0 +FNDA:0,AuditLog +FNDA:0,fetchData +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,getFormattedValue +FNDA:0,getActionDetail +DA:1,1 +DA:4,1 +DA:5,1 +DA:9,0 +DA:10,0 +DA:13,0 +DA:14,0 +DA:18,0 +DA:19,0 +DA:22,0 +DA:23,0 +DA:26,0 +DA:27,0 +DA:28,0 +DA:41,0 +DA:50,0 +DA:52,0 +DA:71,0 +DA:72,0 +DA:75,0 +DA:76,0 +DA:79,0 +DA:80,0 +DA:83,0 +DA:92,0 +DA:93,0 +DA:95,0 +DA:96,0 +DA:98,0 +DA:101,0 +DA:108,0 +DA:110,0 +DA:117,0 +DA:127,1 +LF:34 +LH:4 +BRDA:18,0,0,0 +BRDA:22,1,0,0 +BRDA:71,2,0,0 +BRDA:71,3,0,0 +BRDA:71,3,1,0 +BRDA:75,4,0,0 +BRDA:79,5,0,0 +BRDA:79,6,0,0 +BRDA:79,6,1,0 +BRDA:79,6,2,0 +BRDA:95,7,0,0 +BRDA:95,7,1,0 +BRDA:95,8,0,0 +BRDA:95,8,1,0 +BRDA:96,9,0,0 +BRDA:96,9,1,0 +BRDA:108,10,0,0 +BRDA:108,10,1,0 +BRF:18 +BRH:0 +end_of_record +TN: +SF:static/runtime_config/index.tsx +FN:16,RuntimeConfig +FN:49,resetCurrentRowData +FN:58,fetchData +FN:59,(anonymous_12) +FN:64,fetchDescriptions +FN:65,(anonymous_14) +FN:70,addNewConfig +FN:77,resetForm +FN:83,enterEditMode +FN:93,updateDescription +FN:94,(anonymous_19) +FN:100,(anonymous_20) +FN:110,(anonymous_21) +FN:111,(anonymous_22) +FN:116,(anonymous_23) +FN:128,(anonymous_24) +FN:129,(anonymous_25) +FN:132,(anonymous_26) +FN:144,(anonymous_27) +FN:149,(anonymous_28) +FN:160,(anonymous_29) +FN:161,(anonymous_30) +FN:163,(anonymous_31) +FN:172,(anonymous_32) +FN:174,(anonymous_33) +FN:185,(anonymous_34) +FN:186,(anonymous_35) +FN:193,(anonymous_36) +FN:194,(anonymous_37) +FN:199,(anonymous_38) +FN:206,(anonymous_39) +FN:207,(anonymous_40) +FN:216,(anonymous_41) +FNF:33 +FNH:0 +FNDA:0,RuntimeConfig +FNDA:0,resetCurrentRowData +FNDA:0,fetchData +FNDA:0,(anonymous_12) +FNDA:0,fetchDescriptions +FNDA:0,(anonymous_14) +FNDA:0,addNewConfig +FNDA:0,resetForm +FNDA:0,enterEditMode +FNDA:0,updateDescription +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +DA:1,1 +DA:3,1 +DA:13,1 +DA:14,1 +DA:17,0 +DA:20,0 +DA:31,0 +DA:34,0 +DA:39,0 +DA:42,0 +DA:50,0 +DA:54,0 +DA:55,0 +DA:59,0 +DA:60,0 +DA:65,0 +DA:66,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:74,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:89,0 +DA:90,0 +DA:94,0 +DA:95,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:111,0 +DA:112,0 +DA:117,0 +DA:122,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:132,0 +DA:134,0 +DA:135,0 +DA:137,0 +DA:138,0 +DA:140,0 +DA:142,0 +DA:145,0 +DA:150,0 +DA:151,0 +DA:161,0 +DA:162,0 +DA:163,0 +DA:166,0 +DA:168,0 +DA:172,0 +DA:175,0 +DA:179,0 +DA:180,0 +DA:186,0 +DA:187,0 +DA:189,0 +DA:190,0 +DA:194,0 +DA:195,0 +DA:200,0 +DA:207,0 +DA:208,0 +DA:209,0 +DA:211,0 +DA:214,0 +DA:217,0 +DA:224,0 +DA:225,0 +DA:228,0 +DA:244,0 +DA:248,1 +LF:78 +LH:5 +BRDA:54,0,0,0 +BRDA:99,1,0,0 +BRDA:99,1,1,0 +BRDA:103,2,0,0 +BRDA:103,2,1,0 +BRDA:104,3,0,0 +BRDA:104,3,1,0 +BRDA:117,4,0,0 +BRDA:130,5,0,0 +BRDA:134,6,0,0 +BRDA:150,7,0,0 +BRDA:162,8,0,0 +BRDA:179,9,0,0 +BRDA:189,10,0,0 +BRDA:208,11,0,0 +BRDA:208,11,1,0 +BRDA:224,12,0,0 +BRDA:236,13,0,0 +BRDA:236,13,1,0 +BRDA:236,13,2,0 +BRF:20 +BRH:0 +end_of_record +TN: +SF:static/runtime_config/row_data.tsx +FN:15,Space +FN:20,getReadonlyRow +FN:34,(anonymous_5) +FN:41,getEditableRow +FN:58,(anonymous_7) +FN:67,(anonymous_8) +FN:71,(anonymous_9) +FN:78,getNewRow +FN:98,(anonymous_11) +FNF:9 +FNH:0 +FNDA:0,Space +FNDA:0,getReadonlyRow +FNDA:0,(anonymous_5) +FNDA:0,getEditableRow +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,getNewRow +FNDA:0,(anonymous_11) +DA:1,1 +DA:3,1 +DA:4,1 +DA:13,1 +DA:16,0 +DA:17,0 +DA:28,0 +DA:34,0 +DA:52,0 +DA:58,0 +DA:67,0 +DA:71,0 +DA:88,0 +DA:98,0 +DA:105,1 +LF:15 +LH:5 +BRDA:16,0,0,0 +BRDA:16,0,1,0 +BRDA:33,1,0,0 +BRDA:33,1,1,0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:static/runtime_config/styles.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:3,1 +DA:8,1 +DA:15,1 +DA:20,1 +LF:5 +LH:5 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/snql_to_sql/index.tsx +FN:18,SnQLToSQL +FN:25,(anonymous_11) +FN:26,(anonymous_12) +FN:31,selectDataset +FN:32,(anonymous_14) +FN:40,updateQuerySql +FN:41,(anonymous_16) +FN:49,convertQuery +FN:52,(anonymous_18) +FN:58,(anonymous_19) +FN:93,(anonymous_20) +FNF:11 +FNH:0 +FNDA:0,SnQLToSQL +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,selectDataset +FNDA:0,(anonymous_14) +FNDA:0,updateQuerySql +FNDA:0,(anonymous_16) +FNDA:0,convertQuery +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +DA:1,1 +DA:3,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:17,1 +DA:19,0 +DA:20,0 +DA:21,0 +DA:25,0 +DA:26,0 +DA:27,0 +DA:32,0 +DA:33,0 +DA:41,0 +DA:42,0 +DA:50,0 +DA:53,0 +DA:57,0 +DA:58,0 +DA:62,0 +DA:93,0 +DA:104,1 +LF:25 +LH:9 +BRDA:67,0,0,0 +BRDA:67,0,1,0 +BRDA:72,1,0,0 +BRDA:72,1,1,0 +BRDA:82,2,0,0 +BRDA:82,2,1,0 +BRF:6 +BRH:0 +end_of_record +TN: +SF:static/snql_to_sql/styles.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:7,1 +DA:13,1 +DA:18,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +LF:8 +LH:8 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/snql_to_sql/utils.tsx +FN:3,TextArea +FN:12,(anonymous_2) +FN:19,copyText +FNF:3 +FNH:0 +FNDA:0,TextArea +FNDA:0,(anonymous_2) +FNDA:0,copyText +DA:1,1 +DA:7,0 +DA:8,0 +DA:12,0 +DA:20,0 +DA:23,1 +LF:6 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/snuba_explain/index.tsx +FN:24,SnubaExplain +FN:31,(anonymous_11) +FN:32,(anonymous_12) +FN:37,selectDataset +FN:38,(anonymous_14) +FN:46,updateQuerySnQL +FN:47,(anonymous_16) +FN:55,explainQuery +FN:58,(anonymous_18) +FN:65,(anonymous_19) +FN:76,(anonymous_20) +FN:95,(anonymous_21) +FN:128,(anonymous_22) +FN:131,(anonymous_23) +FNF:14 +FNH:0 +FNDA:0,SnubaExplain +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,selectDataset +FNDA:0,(anonymous_14) +FNDA:0,updateQuerySnQL +FNDA:0,(anonymous_16) +FNDA:0,explainQuery +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +DA:1,1 +DA:2,1 +DA:5,1 +DA:6,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:23,1 +DA:25,0 +DA:26,0 +DA:27,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:38,0 +DA:39,0 +DA:47,0 +DA:48,0 +DA:56,0 +DA:59,0 +DA:64,0 +DA:65,0 +DA:70,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:75,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:82,0 +DA:84,0 +DA:91,0 +DA:96,0 +DA:128,0 +DA:131,0 +DA:151,1 +LF:40 +LH:11 +BRDA:70,0,0,0 +BRDA:73,1,0,0 +BRDA:77,2,0,0 +BRDA:77,2,1,0 +BRDA:79,3,0,0 +BRDA:79,3,1,0 +BRDA:102,4,0,0 +BRDA:102,4,1,0 +BRDA:113,5,0,0 +BRDA:113,5,1,0 +BRDA:120,6,0,0 +BRDA:120,6,1,0 +BRDA:120,6,2,0 +BRDA:120,6,3,0 +BRF:14 +BRH:0 +end_of_record +TN: +SF:static/snuba_explain/step_render.tsx +FN:13,QueryTransformStep +FN:32,Step +FNF:2 +FNH:0 +FNDA:0,QueryTransformStep +FNDA:0,Step +DA:1,1 +DA:3,1 +DA:5,1 +DA:7,1 +DA:14,0 +DA:15,0 +DA:16,0 +DA:17,0 +DA:23,0 +DA:25,0 +DA:33,0 +DA:34,0 +DA:35,0 +DA:37,0 +DA:41,1 +LF:15 +LH:5 +BRDA:16,0,0,0 +BRDA:34,1,0,0 +BRDA:34,1,1,0 +BRF:3 +BRH:0 +end_of_record +TN: +SF:static/snuba_explain/styles.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:7,1 +DA:13,1 +DA:18,1 +DA:20,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +LF:10 +LH:10 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/tests/tracing/fixture.tsx +FNF:0 +FNH:0 +DA:1,1 +DA:9,1 +LF:2 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:static/tracing/index.tsx +FN:28,(anonymous_1) +FN:42,getMessageCategory +FN:65,TracingQueries +FN:66,tablePopulator +FN:76,tracingOutput +FN:81,(anonymous_6) +FN:120,rawTraceDisplay +FN:131,(anonymous_8) +FN:142,(anonymous_9) +FN:153,indexSummary +FN:165,selectSummary +FN:187,streamSummary +FN:196,aggregationSummary +FN:205,sortingSummary +FN:214,executeSummary +FN:223,querySummary +FN:228,(anonymous_17) +FN:231,(anonymous_18) +FN:234,(anonymous_19) +FN:239,(anonymous_20) +FN:242,(anonymous_21) +FN:262,(anonymous_22) +FN:269,summarizedTraceDisplay +FN:288,(anonymous_24) +FN:289,(anonymous_25) +FNF:25 +FNH:2 +FNDA:2,(anonymous_1) +FNDA:0,getMessageCategory +FNDA:6,TracingQueries +FNDA:0,tablePopulator +FNDA:0,tracingOutput +FNDA:0,(anonymous_6) +FNDA:0,rawTraceDisplay +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,indexSummary +FNDA:0,selectSummary +FNDA:0,streamSummary +FNDA:0,aggregationSummary +FNDA:0,sortingSummary +FNDA:0,executeSummary +FNDA:0,querySummary +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,summarizedTraceDisplay +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +DA:1,2 +DA:2,2 +DA:5,2 +DA:28,2 +DA:29,2 +DA:30,2 +DA:31,2 +DA:32,2 +DA:33,2 +DA:36,2 +DA:43,0 +DA:44,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:54,0 +DA:55,0 +DA:59,0 +DA:61,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:71,0 +DA:73,0 +DA:77,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:105,0 +DA:121,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:128,0 +DA:132,0 +DA:133,0 +DA:134,0 +DA:143,0 +DA:154,0 +DA:166,0 +DA:188,0 +DA:197,0 +DA:206,0 +DA:215,0 +DA:224,0 +DA:226,0 +DA:227,0 +DA:228,0 +DA:230,0 +DA:231,0 +DA:233,0 +DA:234,0 +DA:237,0 +DA:238,0 +DA:239,0 +DA:241,0 +DA:242,0 +DA:244,0 +DA:245,0 +DA:262,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:276,0 +DA:278,0 +DA:281,0 +DA:288,0 +DA:289,0 +DA:295,6 +DA:306,2 +LF:74 +LH:12 +BRDA:28,0,0,2 +BRDA:28,0,1,2 +BRDA:44,1,0,0 +BRDA:44,1,1,0 +BRDA:45,2,0,0 +BRDA:45,2,1,0 +BRDA:49,3,0,0 +BRDA:49,3,1,0 +BRDA:51,4,0,0 +BRDA:51,4,1,0 +BRDA:55,5,0,0 +BRDA:55,5,1,0 +BRDA:56,6,0,0 +BRDA:56,6,1,0 +BRDA:56,6,2,0 +BRDA:68,7,0,0 +BRDA:68,7,1,0 +BRDA:82,8,0,0 +BRDA:82,8,1,0 +BRDA:94,9,0,0 +BRDA:95,10,0,0 +BRDA:95,10,1,0 +BRDA:224,11,0,0 +BRDA:224,11,1,0 +BRDA:226,12,0,0 +BRDA:226,12,1,0 +BRDA:227,13,0,0 +BRDA:227,13,1,0 +BRDA:230,14,0,0 +BRDA:230,14,1,0 +BRDA:233,15,0,0 +BRDA:233,15,1,0 +BRDA:237,16,0,0 +BRDA:237,16,1,0 +BRDA:237,16,2,0 +BRDA:238,17,0,0 +BRDA:238,17,1,0 +BRDA:241,18,0,0 +BRDA:241,18,1,0 +BRDA:244,19,0,0 +BRDA:244,19,1,0 +BRDA:249,20,0,0 +BRDA:249,20,1,0 +BRDA:254,21,0,0 +BRDA:254,21,1,0 +BRDA:258,22,0,0 +BRDA:258,22,1,0 +BRDA:262,23,0,0 +BRDA:262,23,1,0 +BRDA:275,24,0,0 +BRDA:275,24,1,0 +BRF:51 +BRH:2 +end_of_record +TN: +SF:static/tracing/query_display.tsx +FN:22,QueryDisplay +FN:39,(anonymous_11) +FN:40,(anonymous_12) +FN:41,(anonymous_13) +FN:45,updateQuerySql +FN:46,(anonymous_15) +FN:54,executeQuery +FN:57,(anonymous_17) +FN:71,(anonymous_18) +FN:78,selectStorage +FN:79,(anonymous_20) +FN:88,copyText +FN:96,(anonymous_22) +FN:118,(anonymous_23) +FN:128,(anonymous_24) +FN:132,(anonymous_25) +FN:136,(anonymous_26) +FNF:17 +FNH:7 +FNDA:6,QueryDisplay +FNDA:1,(anonymous_11) +FNDA:1,(anonymous_12) +FNDA:1,(anonymous_13) +FNDA:4,updateQuerySql +FNDA:4,(anonymous_15) +FNDA:0,executeQuery +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,selectStorage +FNDA:0,(anonymous_20) +FNDA:0,copyText +FNDA:4,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +DA:1,2 +DA:2,2 +DA:12,2 +DA:13,2 +DA:14,2 +DA:15,2 +DA:16,2 +DA:21,2 +DA:30,6 +DA:31,6 +DA:34,6 +DA:37,6 +DA:39,6 +DA:40,1 +DA:41,1 +DA:46,4 +DA:47,4 +DA:55,0 +DA:58,0 +DA:70,0 +DA:71,0 +DA:79,0 +DA:80,0 +DA:85,0 +DA:89,0 +DA:92,6 +DA:97,4 +DA:119,0 +DA:128,0 +DA:132,0 +DA:136,0 +DA:161,2 +DA:167,2 +DA:171,2 +LF:34 +LH:22 +BRDA:103,0,0,6 +BRDA:103,0,1,6 +BRDA:111,1,0,6 +BRDA:111,1,1,0 +BRDA:132,2,0,0 +BRDA:132,2,1,0 +BRF:6 +BRH:3 +end_of_record +TN: +SF:static/utils/execute_button.tsx +FN:4,ExecuteButton +FN:14,(anonymous_7) +FN:20,executeQuery +FN:27,(anonymous_9) +FN:30,(anonymous_10) +FN:38,(anonymous_11) +FNF:6 +FNH:4 +FNDA:11,ExecuteButton +FNDA:0,(anonymous_7) +FNDA:2,executeQuery +FNDA:0,(anonymous_9) +FNDA:1,(anonymous_10) +FNDA:2,(anonymous_11) +DA:1,3 +DA:2,3 +DA:10,11 +DA:12,11 +DA:14,11 +DA:15,0 +DA:16,0 +DA:18,11 +DA:21,2 +DA:22,0 +DA:24,2 +DA:25,2 +DA:28,0 +DA:31,1 +DA:35,11 +DA:39,2 +DA:40,2 +DA:51,3 +LF:18 +LH:14 +BRDA:12,0,0,11 +BRDA:12,0,1,11 +BRDA:18,1,0,11 +BRDA:18,1,1,11 +BRDA:21,2,0,0 +BRDA:43,3,0,11 +BRDA:43,3,1,9 +BRF:7 +BRH:6 +end_of_record +TN: +SF:static/welcome/index.tsx +FN:4,Welcome +FN:7,(anonymous_7) +FN:8,(anonymous_8) +FN:13,urls +FN:23,(anonymous_10) +FNF:5 +FNH:0 +FNDA:0,Welcome +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,urls +FNDA:0,(anonymous_10) +DA:1,1 +DA:5,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:14,0 +DA:23,0 +DA:38,0 +DA:41,1 +LF:9 +LH:2 +BRF:0 +BRH:0 +end_of_record diff --git a/snuba/cli/jobs.py b/snuba/cli/jobs.py index 5ae0e824aa..f88538cf1f 100644 --- a/snuba/cli/jobs.py +++ b/snuba/cli/jobs.py @@ -1,8 +1,12 @@ -from typing import Tuple +from typing import Any, MutableMapping, Tuple import click +from snuba.manual_jobs import JobSpec from snuba.manual_jobs.job_loader import JobLoader +from snuba.manual_jobs.manifest_reader import _ManifestReader + +JOB_SPECIFICATION_ERROR_MSG = "Missing job type and/or job id" @click.group() @@ -11,18 +15,41 @@ def jobs() -> None: @jobs.command() -@click.argument("job_name") +@click.option("--json_manifest", required=True) +@click.option("--job_id") @click.option( "--dry_run", default=True, ) -@click.argument("pairs", nargs=-1) -def run(*, job_name: str, dry_run: bool, pairs: Tuple[str, ...]) -> None: +def run_from_manifest(*, json_manifest: str, job_id: str, dry_run: bool) -> None: + job_specs = _ManifestReader.read(json_manifest) + if job_id not in job_specs.keys(): + raise click.ClickException("Provide a valid job id") + + job_to_run = JobLoader.get_job_instance(job_specs[job_id], dry_run) + job_to_run.execute() - kwargs = {} + +def _parse_params(pairs: Tuple[str, ...]) -> MutableMapping[Any, Any]: + params = {} for pair in pairs: k, v = pair.split("=") - kwargs[k] = v + params[k] = v + return params + + +@jobs.command() +@click.option("--job_type") +@click.option("--job_id") +@click.option( + "--dry_run", + default=True, +) +@click.argument("pairs", nargs=-1) +def run(*, job_type: str, job_id: str, dry_run: bool, pairs: Tuple[str, ...]) -> None: + if not job_type or not job_id: + raise click.ClickException(JOB_SPECIFICATION_ERROR_MSG) + job_spec = JobSpec(job_id=job_id, job_type=job_type, params=_parse_params(pairs)) - job_to_run = JobLoader.get_job_instance(job_name, dry_run, **kwargs) + job_to_run = JobLoader.get_job_instance(job_spec, dry_run) job_to_run.execute() diff --git a/snuba/manual_jobs/__init__.py b/snuba/manual_jobs/__init__.py index d7b9e6e34e..fe82969d7b 100644 --- a/snuba/manual_jobs/__init__.py +++ b/snuba/manual_jobs/__init__.py @@ -1,15 +1,25 @@ import os from abc import ABC, abstractmethod -from typing import Any, cast +from dataclasses import dataclass +from typing import Any, MutableMapping, Optional, cast from snuba.utils.registered_class import RegisteredClass, import_submodules_in_directory +@dataclass +class JobSpec: + job_id: str + job_type: str + params: Optional[MutableMapping[Any, Any]] + + class Job(ABC, metaclass=RegisteredClass): - def __init__(self, dry_run: bool, **kwargs: Any) -> None: + def __init__(self, job_spec: JobSpec, dry_run: bool) -> None: + self.job_spec = job_spec self.dry_run = dry_run - for k, v in kwargs.items(): - setattr(self, k, v) + if job_spec.params: + for k, v in job_spec.params.items(): + setattr(self, k, v) @abstractmethod def execute(self) -> None: diff --git a/snuba/manual_jobs/job_loader.py b/snuba/manual_jobs/job_loader.py index cce933f89f..3b712dd5ff 100644 --- a/snuba/manual_jobs/job_loader.py +++ b/snuba/manual_jobs/job_loader.py @@ -1,15 +1,15 @@ -from typing import Any, cast +from typing import cast -from snuba.manual_jobs import Job +from snuba.manual_jobs import Job, JobSpec class JobLoader: @staticmethod - def get_job_instance(class_name: str, dry_run: bool, **kwargs: Any) -> "Job": - job_type_class = Job.class_from_name(class_name) + def get_job_instance(job_spec: JobSpec, dry_run: bool) -> "Job": + job_type_class = Job.class_from_name(job_spec.job_type) if job_type_class is None: raise Exception( - f"Job does not exist. Did you make a file {class_name}.py yet?" + f"Job does not exist. Did you make a file {job_spec.job_type}.py yet?" ) - return cast("Job", job_type_class(dry_run=dry_run, **kwargs)) + return cast("Job", job_type_class(job_spec, dry_run=dry_run)) diff --git a/snuba/manual_jobs/manifest_reader.py b/snuba/manual_jobs/manifest_reader.py index ace21e548b..60d93a6aee 100644 --- a/snuba/manual_jobs/manifest_reader.py +++ b/snuba/manual_jobs/manifest_reader.py @@ -1,18 +1,34 @@ import os -from typing import Any, Sequence +from typing import Mapping import simplejson +from snuba.manual_jobs import JobSpec + class _ManifestReader: @staticmethod - def read(filename: str) -> Sequence[Any]: + def read(filename: str) -> Mapping[str, JobSpec]: local_root = os.path.dirname(__file__) + with open(os.path.join(local_root, filename)) as stream: contents = simplejson.loads(stream.read()) - assert isinstance(contents, Sequence) - return contents + + job_specs = {} + for content in contents: + job_id = content["id"] + assert isinstance(job_id, str) + job_type = content["job_type"] + assert isinstance(job_type, str) + + job_spec = JobSpec( + job_id=job_id, + job_type=job_type, + params=content.get("params"), + ) + job_specs[job_id] = job_spec + return job_specs -def read_jobs_manifest() -> Sequence[Any]: +def read_jobs_manifest() -> Mapping[str, JobSpec]: return _ManifestReader.read("job_manifest.json") diff --git a/snuba/manual_jobs/toy_job.py b/snuba/manual_jobs/toy_job.py index e48733c678..a44a217cce 100644 --- a/snuba/manual_jobs/toy_job.py +++ b/snuba/manual_jobs/toy_job.py @@ -1,13 +1,14 @@ -from typing import Any - -import click - -from snuba.manual_jobs import Job +from snuba.cli import logger +from snuba.manual_jobs import Job, JobSpec class ToyJob(Job): - def __init__(self, dry_run: bool, **kwargs: Any): - super().__init__(dry_run, **kwargs) + def __init__( + self, + job_spec: JobSpec, + dry_run: bool, + ): + super().__init__(job_spec, dry_run) def _build_query(self) -> str: if self.dry_run: @@ -16,4 +17,10 @@ def _build_query(self) -> str: return "not dry run query" def execute(self) -> None: - click.echo("executing query `" + self._build_query() + "`") + logger.info( + "executing job " + + self.job_spec.job_id + + " with query `" + + self._build_query() + + "`" + ) diff --git a/tests/cli/test_jobs.py b/tests/cli/test_jobs.py index dc7d9f0ffa..25f48e479e 100644 --- a/tests/cli/test_jobs.py +++ b/tests/cli/test_jobs.py @@ -1,17 +1,71 @@ from click.testing import CliRunner -from snuba.cli.jobs import run +from snuba.cli.jobs import JOB_SPECIFICATION_ERROR_MSG, run, run_from_manifest -def test_valid_job() -> None: +def test_cmd_line_valid() -> None: runner = CliRunner() - result = runner.invoke(run, ["ToyJob", "--dry_run", "True", "k1=v1", "k2=v2"]) + result = runner.invoke( + run, + ["--job_type", "ToyJob", "--job_id", "0001"], + ) + assert result.exit_code == 0 -def test_invalid_job() -> None: +def test_invalid_job_errors() -> None: + runner = CliRunner() + result = runner.invoke( + run, + [ + "--job_type", + "NonexistentJob", + "--job_id", + "0001", + "--dry_run", + "True", + "k1=v1", + "k2=v2", + ], + ) + + assert result.exit_code == 1 + + +def test_cmd_line_no_job_specification_errors() -> None: + runner = CliRunner() + result = runner.invoke(run, ["--dry_run", "True", "k1=v1", "k2=v2"]) + assert result.exit_code == 1 + assert result.output == "Error: " + JOB_SPECIFICATION_ERROR_MSG + "\n" + + +def test_cmd_line_no_job_id_errors() -> None: + runner = CliRunner() + result = runner.invoke( + run, ["--job_type", "ToyJob", "--dry_run", "True", "k1=v1", "k2=v2"] + ) + assert result.exit_code == 1 + assert result.output == "Error: " + JOB_SPECIFICATION_ERROR_MSG + "\n" + + +def test_cmd_line_no_job_type_errors() -> None: runner = CliRunner() result = runner.invoke( - run, ["SomeJobThatDoesntExist", "--dry_run", "True", "k1=v1", "k2=v2"] + run, ["--job_id", "0001", "--dry_run", "True", "k1=v1", "k2=v2"] ) assert result.exit_code == 1 + assert result.output == "Error: " + JOB_SPECIFICATION_ERROR_MSG + "\n" + + +def test_json_valid() -> None: + runner = CliRunner() + result = runner.invoke( + run_from_manifest, + [ + "--json_manifest", + "run_manifest.json", + "--job_id", + "abc1234", + ], + ) + assert result.exit_code == 0