77 "errors"
88 "fmt"
99 "net/http"
10+ "reflect"
11+ "strconv"
1012 "strings"
1113 "time"
1214
@@ -79,7 +81,6 @@ func (s *SumoLogicAppender) Start() {
7981
8082 if time .Since (Buffer .timerIdlebuffer ).Seconds () >= 10 && Buffer .logEventsInCurrentBuffer > 0 {
8183 logging .Info .Println ("Sending current batch of logs after timer exceeded limit" )
82- //wg.Add(1)
8384 go s .SendToSumo (Buffer .logStringToSend .String ())
8485 Buffer = newBuffer ()
8586 Buffer .timerIdlebuffer = time .Now ()
@@ -147,6 +148,30 @@ func WantedEvent(event string, includeOnlyMatchingFilter string, excludeAlwaysMa
147148 }
148149 return true
149150
151+ }
152+ func FormatTimestamp (event * events.Event , timestamp string ) {
153+ defer func () {
154+ if r := recover (); r != nil {
155+ fmt .Println ("Recovered in f" , r )
156+ }
157+ }()
158+
159+ if reflect .TypeOf (event .Fields [timestamp ]).Kind () != reflect .Int64 {
160+ if reflect .TypeOf (event .Fields [timestamp ]).Kind () == reflect .String {
161+ event .Fields [timestamp ] = event .Fields [timestamp ].(string )
162+ } else {
163+ event .Fields [timestamp ] = ""
164+ }
165+
166+ }
167+ if reflect .TypeOf (event .Fields [timestamp ]).Kind () == reflect .Int64 {
168+ if len (strconv .FormatInt (event .Fields [timestamp ].(int64 ), 10 )) == 19 {
169+ event .Fields [timestamp ] = time .Unix (0 , event .Fields [timestamp ].(int64 )* int64 (time .Nanosecond )).String ()
170+ } else if len (strconv .FormatInt (event .Fields [timestamp ].(int64 ), 10 )) < 13 {
171+ event .Fields [timestamp ] = ""
172+ }
173+ }
174+
150175}
151176
152177func StringBuilder (event * events.Event , verboseLogMessages bool , includeOnlyMatchingFilter string , excludeAlwaysMatchingFilter string , customMetadata string ) string {
@@ -160,31 +185,26 @@ func StringBuilder(event *events.Event, verboseLogMessages bool, includeOnlyMatc
160185 var msg []byte
161186 switch eventType {
162187 case "HttpStart" :
163- timestamp := time .Unix (0 , event .Fields ["timestamp" ].(int64 )* int64 (time .Nanosecond )).String ()
164- event .Fields ["timestamp" ] = timestamp
188+ FormatTimestamp (event , "timestamp" )
165189 message , err := json .Marshal (event )
166190 if err == nil {
167191 msg = message
168192 }
169193 case "HttpStop" :
170- timestamp := time .Unix (0 , event .Fields ["timestamp" ].(int64 )* int64 (time .Nanosecond )).String ()
171- event .Fields ["timestamp" ] = timestamp
194+ FormatTimestamp (event , "timestamp" )
172195 message , err := json .Marshal (event )
173196 if err == nil {
174197 msg = message
175198 }
176199 case "HttpStartStop" :
177- start_timestamp := time .Unix (0 , event .Fields ["start_timestamp" ].(int64 )* int64 (time .Nanosecond )).String ()
178- event .Fields ["start_timestamp" ] = start_timestamp
179- stop_timestamp := time .Unix (0 , event .Fields ["stop_timestamp" ].(int64 )* int64 (time .Nanosecond )).String ()
180- event .Fields ["stop_timestamp" ] = stop_timestamp
200+ FormatTimestamp (event , "start_timestamp" )
201+ FormatTimestamp (event , "stop_timestamp" )
181202 message , err := json .Marshal (event )
182203 if err == nil {
183204 msg = message
184205 }
185206 case "LogMessage" :
186- timestamp := time .Unix (0 , event .Fields ["timestamp" ].(int64 )* int64 (time .Nanosecond )).String ()
187- event .Fields ["timestamp" ] = timestamp
207+ FormatTimestamp (event , "timestamp" )
188208 if verboseLogMessages == true {
189209 message , err := json .Marshal (event )
190210 if err == nil {
@@ -279,7 +299,6 @@ func (s *SumoLogicAppender) SendToSumo(logStringToSend string) {
279299 if s .sumoCategory != "" {
280300 request .Header .Add ("X-Sumo-Category" , s .sumoCategory )
281301 }
282- /*REMOVE*/ fmt .Println (time .Since (s .timerBetweenPost ))
283302 //checking the timer before first POST intent
284303 for time .Since (s .timerBetweenPost ) < s .sumoPostMinimumDelay {
285304 logging .Trace .Println ("Delaying Post because minimum post timer not expired" )
@@ -310,7 +329,6 @@ func (s *SumoLogicAppender) SendToSumo(logStringToSend string) {
310329 if s .sumoCategory != "" {
311330 request .Header .Add ("X-Sumo-Category" , s .sumoCategory )
312331 }
313-
314332 //checking the timer before POST (retry intent)
315333 for time .Since (s .timerBetweenPost ) < s .sumoPostMinimumDelay {
316334 logging .Trace .Println ("Delaying Post because minimum post timer not expired" )
@@ -329,7 +347,7 @@ func (s *SumoLogicAppender) SendToSumo(logStringToSend string) {
329347 time .Sleep (300 * time .Millisecond )
330348 return attempt < 5 , errRetry
331349 } else if response .StatusCode == 200 {
332- logging .Info . /* Trace.*/ Println ("Post of logs successful after retry..." )
350+ logging .Trace .Println ("Post of logs successful after retry..." )
333351 s .timerBetweenPost = time .Now ()
334352 statusCode = response .StatusCode
335353 return true , err
@@ -344,7 +362,7 @@ func (s *SumoLogicAppender) SendToSumo(logStringToSend string) {
344362 logging .Error .Printf ("Not able to post after retry, with status code: %d" , statusCode )
345363 }
346364 } else if response .StatusCode == 200 {
347- logging .Info . /* Trace.*/ Println ("Post of logs successful" )
365+ logging .Trace .Println ("Post of logs successful" )
348366 s .timerBetweenPost = time .Now ()
349367 }
350368
0 commit comments