package Ġpl . sz y me ker . csv warehouse . controller Ċ Ċ import Ġorg . springframework . format . annotation . DateTime Format Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestParam Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġpl . sz y me ker . csv warehouse . dimension . Group Dimension Ċ import Ġpl . sz y me ker . csv warehouse . query . Query Engine Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ RestController Ċ class ĠQuery Data Controller ( private Ġval Ġquery Engine : ĠQuery Engine ) Ġ{ ĊĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ query "], Ġproduces Ġ= Ġ[" application / json "]) ĊĠĠĠ Ġfun Ġquery ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" metrics ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmetrics : ĠSet < String > ?, ĊĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" filters ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġfilters : ĠList < String > ?, ĊĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" start DateTime ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ@ DateTime Format ( iso Ġ= ĠDateTime Format . ISO . DATE _ TIME ) ĊĠĠĠĠĠĠĠ Ġstart DateTime : ĠLocalDateTime ?, ĊĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" end DateTime ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ@ DateTime Format ( iso Ġ= ĠDateTime Format . ISO . DATE _ TIME ) ĊĠĠĠĠĠĠĠ Ġend DateTime : ĠLocalDateTime ?, ĊĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" group Columns ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġgroups : ĠSet < String > ?, ĊĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" groupBy Time ", Ġrequired Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġgroup By Time : ĠBoolean ? ĊĠĠĠ Ġ): ĠIterable < Query Engine . Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Dimensions Ġ= Ġgroups ?. map Ġ{ ĠGroup Dimension ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfilter Dimensions Ġ= Ġparse Filters ( filters ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquery Engine . query ( start DateTime , Ġend DateTime , Ġgroup By Time , Ġgroup Dimensions , Ġfilter Dimensions , Ġmetrics ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Filters ( filters : ĠList < String >? ): ĠMap < Group Dimension , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfilters ?. associate Ġ{ Ġfilter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Params Ġ= Ġfilter . split (" =") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Dimension ( filter Params [ 0 ]) Ġto Ġfilter Params [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }