mirror of
https://github.com/ddworken/hishtory.git
synced 2025-06-24 05:51:38 +02:00
Make errors from updateUsageData(...) crash when running in non-prod to ensure they're detected/handled before deployment
This commit is contained in:
parent
60406916e9
commit
04a0fc40cd
@ -186,4 +186,3 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO(optimization): Maybe optimize the endpoints a bit to reduce the number of round trips required?
|
// TODO(optimization): Maybe optimize the endpoints a bit to reduce the number of round trips required?
|
||||||
// TODO: Add error checking for the calls to updateUsageData(...) that logs it/triggers an alert in prod, but is an error in test
|
|
||||||
|
@ -32,9 +32,7 @@ func (s *Server) apiSubmitHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
version := getHishtoryVersion(r)
|
version := getHishtoryVersion(r)
|
||||||
remoteIPAddr := getRemoteAddr(r)
|
remoteIPAddr := getRemoteAddr(r)
|
||||||
|
|
||||||
if err := s.updateUsageData(r.Context(), version, remoteIPAddr, entries[0].UserId, entries[0].DeviceId, len(entries), false); err != nil {
|
s.handleNonCriticalError(s.updateUsageData(r.Context(), version, remoteIPAddr, entries[0].UserId, entries[0].DeviceId, len(entries), false))
|
||||||
fmt.Printf("updateUsageData: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
devices, err := s.db.DevicesForUser(r.Context(), entries[0].UserId)
|
devices, err := s.db.DevicesForUser(r.Context(), entries[0].UserId)
|
||||||
checkGormError(err)
|
checkGormError(err)
|
||||||
@ -64,9 +62,7 @@ func (s *Server) apiBootstrapHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
version := getHishtoryVersion(r)
|
version := getHishtoryVersion(r)
|
||||||
remoteIPAddr := getRemoteAddr(r)
|
remoteIPAddr := getRemoteAddr(r)
|
||||||
|
|
||||||
if err := s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, false); err != nil {
|
s.handleNonCriticalError(s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, false))
|
||||||
fmt.Printf("updateUsageData: %v\n", err)
|
|
||||||
}
|
|
||||||
historyEntries, err := s.db.AllHistoryEntriesForUser(r.Context(), userId)
|
historyEntries, err := s.db.AllHistoryEntriesForUser(r.Context(), userId)
|
||||||
checkGormError(err)
|
checkGormError(err)
|
||||||
fmt.Printf("apiBootstrapHandler: Found %d entries\n", len(historyEntries))
|
fmt.Printf("apiBootstrapHandler: Found %d entries\n", len(historyEntries))
|
||||||
@ -84,9 +80,7 @@ func (s *Server) apiQueryHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
version := getHishtoryVersion(r)
|
version := getHishtoryVersion(r)
|
||||||
remoteIPAddr := getRemoteAddr(r)
|
remoteIPAddr := getRemoteAddr(r)
|
||||||
|
|
||||||
if err := s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, true); err != nil {
|
s.handleNonCriticalError(s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, true))
|
||||||
fmt.Printf("updateUsageData: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete any entries that match a pending deletion request
|
// Delete any entries that match a pending deletion request
|
||||||
deletionRequests, err := s.db.DeletionRequestsForUserAndDevice(r.Context(), userId, deviceId)
|
deletionRequests, err := s.db.DeletionRequestsForUserAndDevice(r.Context(), userId, deviceId)
|
||||||
@ -156,9 +150,7 @@ func (s *Server) apiSubmitDumpHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
version := getHishtoryVersion(r)
|
version := getHishtoryVersion(r)
|
||||||
remoteIPAddr := getRemoteAddr(r)
|
remoteIPAddr := getRemoteAddr(r)
|
||||||
|
|
||||||
if err := s.updateUsageData(r.Context(), version, remoteIPAddr, userId, srcDeviceId, len(entries), false); err != nil {
|
s.handleNonCriticalError(s.updateUsageData(r.Context(), version, remoteIPAddr, userId, srcDeviceId, len(entries), false))
|
||||||
fmt.Printf("updateUsageData: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Length", "0")
|
w.Header().Set("Content-Length", "0")
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
@ -226,9 +218,7 @@ func (s *Server) apiRegisterHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
version := getHishtoryVersion(r)
|
version := getHishtoryVersion(r)
|
||||||
remoteIPAddr := getRemoteAddr(r)
|
remoteIPAddr := getRemoteAddr(r)
|
||||||
|
|
||||||
if err := s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, false); err != nil {
|
s.handleNonCriticalError(s.updateUsageData(r.Context(), version, remoteIPAddr, userId, deviceId, 0, false))
|
||||||
fmt.Printf("updateUsageData: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if s.statsd != nil {
|
if s.statsd != nil {
|
||||||
s.statsd.Incr("hishtory.register", []string{}, 1.0)
|
s.statsd.Incr("hishtory.register", []string{}, 1.0)
|
||||||
|
@ -330,6 +330,14 @@ func (s *Server) getNumConnectionsHandler(w http.ResponseWriter, r *http.Request
|
|||||||
_, _ = fmt.Fprintf(w, "%#v", stats.OpenConnections)
|
_, _ = fmt.Fprintf(w, "%#v", stats.OpenConnections)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleNonCriticalError(err error) {
|
||||||
|
if s.isProductionEnvironment {
|
||||||
|
fmt.Printf("Unexpected non-critical error: %v", err)
|
||||||
|
} else {
|
||||||
|
panic(fmt.Errorf("unexpected non-critical error: %w", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) updateUsageData(ctx context.Context, version string, remoteAddr string, userId, deviceId string, numEntriesHandled int, isQuery bool) error {
|
func (s *Server) updateUsageData(ctx context.Context, version string, remoteAddr string, userId, deviceId string, numEntriesHandled int, isQuery bool) error {
|
||||||
var usageData []shared.UsageData
|
var usageData []shared.UsageData
|
||||||
usageData, err := s.db.UsageDataFindByUserAndDevice(ctx, userId, deviceId)
|
usageData, err := s.db.UsageDataFindByUserAndDevice(ctx, userId, deviceId)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user