4545 */
4646package com .teragrep .cfe_16 .rest ;
4747
48+ import com .teragrep .cfe_16 .MultiValueMapRequest ;
49+ import com .teragrep .cfe_16 .bo .HeaderInfo ;
50+ import com .teragrep .cfe_16 .response .ExceptionEvent ;
51+ import com .teragrep .cfe_16 .response .ExceptionEventContext ;
52+ import com .teragrep .cfe_16 .response .ExceptionJsonResponse ;
53+ import com .teragrep .cfe_16 .response .JsonResponse ;
54+ import java .util .UUID ;
55+ import tools .jackson .core .JacksonException ;
4856import tools .jackson .databind .JsonNode ;
4957import tools .jackson .databind .ObjectMapper ;
50- import com .teragrep .cfe_16 .RequestBodyCleaner ;
5158import com .teragrep .cfe_16 .config .Configuration ;
5259import com .teragrep .cfe_16 .response .Response ;
5360import com .teragrep .cfe_16 .service .HECService ;
@@ -69,37 +76,52 @@ public class HECRestController {
6976 @ Autowired
7077 private HECService service ;
7178
72- @ Autowired
73- private RequestBodyCleaner requestBodyCleaner ;
74-
7579 @ Autowired
7680 private Configuration configuration ;
7781
78- @ SuppressWarnings ("rawtypes" )
7982 @ RequestMapping (
8083 value = "services/collector" ,
8184 method = RequestMethod .POST ,
8285 consumes = MediaType .APPLICATION_FORM_URLENCODED_VALUE ,
8386 produces = MediaType .APPLICATION_JSON_VALUE
8487 )
8588 public ResponseEntity <JsonNode > sendEvents (
86- HttpServletRequest request ,
87- @ RequestBody MultiValueMap body ,
88- @ RequestParam (required = false ) String channel
89+ final HttpServletRequest request ,
90+ @ RequestBody final MultiValueMap < String , String > body ,
91+ @ RequestParam (required = false ) final String channel
8992 ) {
90- // TODO: Try to think an alternative way to implement getting the body of the
91- // call
92- final String eventInJson = requestBodyCleaner .cleanAckRequestBody (body .toString (), channel );
93-
94- long t1 = System .nanoTime ();
95- final Response response = service .sendEvents (request , channel , eventInJson );
96- long t2 = System .nanoTime ();
97- long dt = t2 - t1 ;
98- double us = (double ) dt / 1000.0 ;
99- if (this .configuration .getPrintTimes ()) {
100- LOGGER .info ("sendEvents took <{}> nanoseconds, that is <{}> microseconds" , dt , us );
93+ ResponseEntity <JsonNode > responseEntity ;
94+ try {
95+ final MultiValueMapRequest eventInJson = new MultiValueMapRequest (body );
96+ final long t1 = System .nanoTime ();
97+ final Response response = service .sendEvents (request , channel , eventInJson .asCleanedJsonString ());
98+ final long t2 = System .nanoTime ();
99+ final long dt = t2 - t1 ;
100+ final double us = (double ) dt / 1000.0 ;
101+ if (this .configuration .getPrintTimes ()) {
102+ LOGGER .info ("sendEvents took <{}> nanoseconds, that is <{}> microseconds" , dt , us );
103+ }
104+ responseEntity = response .asJsonNodeResponseEntity ();
101105 }
102- return response .asJsonNodeResponseEntity ();
106+ catch (final IllegalStateException illegalStateException ) {
107+ final HeaderInfo headerInfo = new HeaderInfo (request );
108+ final ExceptionEventContext exceptionEventContext = new ExceptionEventContext (
109+ headerInfo ,
110+ request .getHeader ("user-agent" ),
111+ request .getRequestURI (),
112+ request .getRemoteHost ()
113+ );
114+ final ExceptionEvent event = new ExceptionEvent (
115+ exceptionEventContext ,
116+ UUID .randomUUID (),
117+ illegalStateException
118+ );
119+ event .logException ();
120+ final Response response = new ExceptionJsonResponse (event );
121+ responseEntity = response .asJsonNodeResponseEntity ();
122+ }
123+
124+ return responseEntity ;
103125 }
104126
105127 @ RequestMapping (
@@ -132,79 +154,84 @@ public ResponseEntity<JsonNode> sendEvents(
132154 },
133155 consumes = MediaType .APPLICATION_JSON_VALUE
134156 )
135- public JsonNode getAcksWithPostMethod (
157+ public ResponseEntity < JsonNode > getAcksWithPostMethod (
136158 @ RequestBody JsonNode requestedAcksInJson ,
137159 HttpServletRequest request ,
138160 @ RequestParam (required = false ) String channel
139161 ) {
140162
141163 long t1 = System .nanoTime ();
142- JsonNode response = service .getAcks (request , channel , requestedAcksInJson );
164+ final Response response = service .getAcks (request , channel , requestedAcksInJson );
143165 long t2 = System .nanoTime ();
144166 long dt = t2 - t1 ;
145167 double us = (double ) dt / 1000.0 ;
146168 if (this .configuration .getPrintTimes ()) {
147169 LOGGER .info ("getAcks took <{}> nanoseconds, that is <{}> microseconds" , dt , us );
148170 }
149- return response ;
171+ return response . asJsonNodeResponseEntity () ;
150172 }
151173
152- // @LogAnnotation(type = LogType.METRIC_DURATION)
153- @ SuppressWarnings ("rawtypes" )
154174 @ RequestMapping (
155175 value = "services/collector/ack" ,
156176 method = {
157177 RequestMethod .POST , RequestMethod .GET
158178 },
159179 consumes = MediaType .APPLICATION_FORM_URLENCODED_VALUE
160180 )
161- public @ ResponseBody JsonNode getAcks (
162- @ RequestBody MultiValueMap body ,
163- HttpServletRequest request ,
164- @ RequestParam (required = false ) String channel
181+ public ResponseEntity < JsonNode > getAcks (
182+ @ RequestBody final MultiValueMap < String , String > body ,
183+ final HttpServletRequest request ,
184+ @ RequestParam (required = false ) final String channel
165185 ) {
166- // TODO: Try to think an alternative way to implement getting the body of the
167- // call
168- String bodyString = requestBodyCleaner .cleanAckRequestBody (body .toString (), channel );
186+ ResponseEntity <JsonNode > responseEntity ;
169187
170- JsonNode requestedAcksInJson = null ;
171188 try {
172- requestedAcksInJson = objectMapper .readValue (bodyString , JsonNode .class );
189+ final MultiValueMapRequest multiValueMapRequest = new MultiValueMapRequest (body );
190+
191+ final JsonNode requestedAcksInJson = objectMapper
192+ .readValue (multiValueMapRequest .asCleanedJsonString (), JsonNode .class );
193+
194+ final long t1 = System .nanoTime ();
195+ final Response response = service .getAcks (request , channel , requestedAcksInJson );
196+ final long t2 = System .nanoTime ();
197+ final long dt = t2 - t1 ;
198+ final double us = (double ) dt / 1000.0 ;
199+ if (this .configuration .getPrintTimes ()) {
200+ LOGGER .info ("getAcks took <{}> nanoseconds, that is <{}> microseconds" , dt , us );
201+ }
202+ responseEntity = new JsonResponse (response .toString ()).asJsonNodeResponseEntity ();
173203 }
174- catch (Exception e ) {
175- // TODO: handle the error in a proper way
176- LOGGER .warn ("Failed to handle response: " , e );
204+ catch (final IllegalStateException | JacksonException exception ) {
205+ final HeaderInfo headerInfo = new HeaderInfo (request );
206+ final ExceptionEventContext exceptionEventContext = new ExceptionEventContext (
207+ headerInfo ,
208+ request .getHeader ("user-agent" ),
209+ request .getRequestURI (),
210+ request .getRemoteHost ()
211+ );
212+ final ExceptionEvent event = new ExceptionEvent (exceptionEventContext , UUID .randomUUID (), exception );
213+ event .logException ();
214+ final Response response = new ExceptionJsonResponse (event );
215+ responseEntity = response .asJsonNodeResponseEntity ();
177216 }
178217
179- long t1 = System .nanoTime ();
180- JsonNode response = service .getAcks (request , channel , requestedAcksInJson );
181- long t2 = System .nanoTime ();
182- long dt = t2 - t1 ;
183- double us = (double ) dt / 1000.0 ;
184- if (this .configuration .getPrintTimes ()) {
185- LOGGER .info ("getAcks took <{}> nanoseconds, that is <{}> microseconds" , dt , us );
186- }
187- return response ;
218+ return responseEntity ;
188219 }
189220
190- @ SuppressWarnings ("rawtypes" )
191221 @ RequestMapping (
192222 value = "services/collector/event" ,
193223 method = RequestMethod .POST ,
194224 consumes = MediaType .APPLICATION_FORM_URLENCODED_VALUE
195225 )
196226 public ResponseEntity <JsonNode > sendEventsWithFormatOption (
197- HttpServletRequest request ,
198- @ RequestBody MultiValueMap body ,
199- @ RequestParam (required = false ) String channel
227+ final HttpServletRequest request ,
228+ @ RequestBody final MultiValueMap < String , String > body ,
229+ @ RequestParam (required = false ) final String channel
200230 ) {
201-
202- // TODO: Try to think an alternative way to implement getting the body of the
203- // call
204- String eventInJson = requestBodyCleaner .cleanAckRequestBody (body .toString (), channel );
231+ final MultiValueMapRequest multiValueMapRequest = new MultiValueMapRequest (body );
205232
206233 long t1 = System .nanoTime ();
207- final Response response = service .sendEvents (request , channel , eventInJson );
234+ final Response response = service .sendEvents (request , channel , multiValueMapRequest . asCleanedJsonString () );
208235 long t2 = System .nanoTime ();
209236 long dt = t2 - t1 ;
210237 double us = (double ) dt / 1000.0 ;
0 commit comments