| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 	"net/http" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 	"github.com/getsentry/sentry-go" | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/frontendlogging" | 
					
						
							| 
									
										
										
										
											2021-01-15 21:43:20 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/response" | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/log" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/web" | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var frontendLogger = log.New("frontend") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | type frontendLogMessageHandler func(c *models.ReqContext) response.Response | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | func NewFrontendLogMessageHandler(store *frontendlogging.SourceMapStore) frontendLogMessageHandler { | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 	return func(c *models.ReqContext) response.Response { | 
					
						
							|  |  |  | 		event := frontendlogging.FrontendSentryEvent{} | 
					
						
							|  |  |  | 		if err := web.Bind(c.Req, &event); err != nil { | 
					
						
							|  |  |  | 			return response.Error(http.StatusBadRequest, "bad request data", err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		var msg = "unknown" | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		if len(event.Message) > 0 { | 
					
						
							|  |  |  | 			msg = event.Message | 
					
						
							|  |  |  | 		} else if event.Exception != nil && len(event.Exception.Values) > 0 { | 
					
						
							|  |  |  | 			msg = event.Exception.Values[0].FmtMessage() | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		var ctx = event.ToLogContext(store) | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		switch event.Level { | 
					
						
							|  |  |  | 		case sentry.LevelError: | 
					
						
							| 
									
										
										
										
											2022-01-06 22:28:05 +08:00
										 |  |  | 			frontendLogger.Error(msg, ctx...) | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		case sentry.LevelWarning: | 
					
						
							| 
									
										
										
										
											2022-01-06 22:28:05 +08:00
										 |  |  | 			frontendLogger.Warn(msg, ctx...) | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		case sentry.LevelDebug: | 
					
						
							| 
									
										
										
										
											2022-01-06 22:28:05 +08:00
										 |  |  | 			frontendLogger.Debug(msg, ctx...) | 
					
						
							| 
									
										
										
										
											2020-12-10 17:50:37 +08:00
										 |  |  | 		default: | 
					
						
							| 
									
										
										
										
											2022-01-06 22:28:05 +08:00
										 |  |  | 			frontendLogger.Info(msg, ctx...) | 
					
						
							| 
									
										
										
										
											2020-12-10 17:50:37 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 14:37:28 +08:00
										 |  |  | 		return response.Success("ok") | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |