From e0e5787487fda008d50f255244d4d2ecfc30e092 Mon Sep 17 00:00:00 2001 From: Rahul Rengesh Date: Thu, 12 Mar 2026 13:23:50 +0530 Subject: [PATCH 1/3] Improve error logging for 500/ISE scenarios - Add Error-level logging in Error() for status >= 500 with audit context - Elevate LogRequestEnds() to Error level for 500+ responses - Log cache refresh/stats failures in data_service_info - Log BSE config lookup and firmware rule evaluation failures - Log firmware config response marshal errors - Log percent filter and firmware config DB lookup failures - Log RFC post-processing and feature control response marshal errors - Log telemetry profile and settings response marshal errors --- dataapi/data_service_info.go | 3 +++ dataapi/estb_firmware_handler.go | 15 ++++++++++--- dataapi/estbfirmware/estb_evaluation.go | 22 +++++++++++++++---- .../estbfirmware/estb_firmware_rule_eval.go | 15 ++++++++++--- dataapi/feature_control_handler.go | 7 +++++- dataapi/log_uploader_handler.go | 10 +++++++-- http/response.go | 3 +++ http/webconfig_server.go | 6 ++++- 8 files changed, 67 insertions(+), 14 deletions(-) diff --git a/dataapi/data_service_info.go b/dataapi/data_service_info.go index b29845cf..a798d2aa 100644 --- a/dataapi/data_service_info.go +++ b/dataapi/data_service_info.go @@ -28,6 +28,7 @@ import ( "github.com/rdkcentral/xconfwebconfig/util" "github.com/gorilla/mux" + log "github.com/sirupsen/logrus" ) func GetInfoRefreshAllHandler(w http.ResponseWriter, r *http.Request) { @@ -49,9 +50,11 @@ func GetInfoRefreshHandler(w http.ResponseWriter, r *http.Request) { response, _ := util.JSONMarshal(stats) xhttp.WriteXconfResponse(w, http.StatusOK, response) } else { + log.Errorf("GetInfoRefreshHandler failed to get cache stats for table %s: %v", tableName, err) xhttp.WriteXconfResponse(w, http.StatusInternalServerError, []byte(err.Error())) } } else { + log.Errorf("GetInfoRefreshHandler failed to refresh table %s: %v", tableName, err) xhttp.WriteXconfResponse(w, http.StatusInternalServerError, []byte(err.Error())) } } diff --git a/dataapi/estb_firmware_handler.go b/dataapi/estb_firmware_handler.go index 9bd639c1..ea877659 100644 --- a/dataapi/estb_firmware_handler.go +++ b/dataapi/estb_firmware_handler.go @@ -66,7 +66,10 @@ func GetEstbFirmwareSwuBseHandler(w http.ResponseWriter, r *http.Request) { return } estbFirmwareRuleBase := dataef.NewEstbFirmwareRuleBaseDefault() - bseConfiguration, _ := estbFirmwareRuleBase.GetBseConfiguration(ip) + bseConfiguration, err := estbFirmwareRuleBase.GetBseConfiguration(ip) + if err != nil { + log.Errorf("GetEstbFirmwareSwuBseHandler failed to get BSE configuration: %v", err) + } if bseConfiguration == nil { xhttp.WriteXconfResponseAsText(w, 404, []byte("\"

404 NOT FOUND

\"")) return @@ -125,7 +128,10 @@ func GetEstbFirmwareSwuHandler(w http.ResponseWriter, r *http.Request) { } firmwareConfigResponse := sharedef.CreateFirmwareConfigFacadeResponse(*evaluationResult.FirmwareConfig) - response, _ := util.JSONMarshal(firmwareConfigResponse) + response, err := util.JSONMarshal(firmwareConfigResponse) + if err != nil { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetEstbFirmwareSwuHandler failed to marshal firmware config response: %v", err) + } xhttp.WriteXconfResponse(w, 200, response) } else { xhttp.WriteXconfResponseAsText(w, status, response) @@ -175,7 +181,10 @@ func GetFirmwareResponse(w http.ResponseWriter, r *http.Request, xw *xhttp.XResp log.Debugf("GetEstbFirmwareSwuHandler call AddEstbFirmwareContext ... end contextMap %v", contextMap) estbFirmwareRuleBase := dataef.NewEstbFirmwareRuleBaseDefault() convertedContext := sharedef.GetContextConverted(contextMap) - evaluationResult, _ := estbFirmwareRuleBase.Eval(contextMap, convertedContext, contextMap[common.APPLICATION_TYPE], fields) + evaluationResult, err := estbFirmwareRuleBase.Eval(contextMap, convertedContext, contextMap[common.APPLICATION_TYPE], fields) + if err != nil { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetFirmwareResponse firmware rule evaluation failed: %v", err) + } explanation := GetExplanation(contextMap, evaluationResult) if evaluationResult == nil || evaluationResult.Blocked || evaluationResult.FirmwareConfig == nil || evaluationResult.FirmwareConfig.Properties == nil { return http.StatusNotFound, []byte(fmt.Sprintf("\"

404 NOT FOUND

%s
\"", explanation)), evaluationResult, convertedContext, explanation, contextMap diff --git a/dataapi/estbfirmware/estb_evaluation.go b/dataapi/estbfirmware/estb_evaluation.go index 83e4c56f..410e27a3 100644 --- a/dataapi/estbfirmware/estb_evaluation.go +++ b/dataapi/estbfirmware/estb_evaluation.go @@ -26,6 +26,8 @@ import ( "github.com/rdkcentral/xconfwebconfig/shared" coreef "github.com/rdkcentral/xconfwebconfig/shared/estbfirmware" "github.com/rdkcentral/xconfwebconfig/shared/firmware" + + log "github.com/sirupsen/logrus" ) // EvaluationResult ... @@ -143,7 +145,10 @@ func DownloadLocationRoundRobinFilterContainsVersion(firmwareVersions string, co * @return true if firmware output must be returned, false if must be blocked */ func PercentFilterfilter(evaluationResult *EvaluationResult, context *coreef.ConvertedContext) bool { - filterValue, _ := coreef.GetDefaultPercentFilterValueOneDB() + filterValue, err := coreef.GetDefaultPercentFilterValueOneDB() + if err != nil { + log.Errorf("PercentFilterfilter failed to get default percent filter value: %v", err) + } matchedEnvModelName := "" if evaluationResult.MatchedRule != nil && firmware.ENV_MODEL_RULE == evaluationResult.MatchedRule.Type { matchedEnvModelName = evaluationResult.MatchedRule.Name @@ -166,13 +171,19 @@ func PercentFilterfilter(evaluationResult *EvaluationResult, context *coreef.Con context.AddForceFiltersConverted(firmware.REBOOT_IMMEDIATELY_FILTER) } context.AddBypassFiltersConverted(firmware.TIME_FILTER) - config, _ := coreef.GetFirmwareConfigOneDB(envModelPercentage.IntermediateVersion) + config, err := coreef.GetFirmwareConfigOneDB(envModelPercentage.IntermediateVersion) + if err != nil { + log.Errorf("PercentFilterfilter failed to get intermediate version firmware config %s: %v", envModelPercentage.IntermediateVersion, err) + } if config != nil && context.GetFirmwareVersionConverted() != config.FirmwareVersion { // return IntermediateVersion firmware config evaluationResult.FirmwareConfig = coreef.NewFirmwareConfigFacade(config) evaluationResult.AppliedVersionInfo["firmwareVersionSource"] = "IV,doesntMeetMinCheck" } else { - config, _ := coreef.GetFirmwareConfigOneDB(envModelPercentage.LastKnownGood) + config, err := coreef.GetFirmwareConfigOneDB(envModelPercentage.LastKnownGood) + if err != nil { + log.Errorf("PercentFilterfilter failed to get LKG firmware config %s: %v", envModelPercentage.LastKnownGood, err) + } if config != nil { // return LKG firmware config evaluationResult.FirmwareConfig = coreef.NewFirmwareConfigFacade(config) @@ -183,7 +194,10 @@ func PercentFilterfilter(evaluationResult *EvaluationResult, context *coreef.Con } result := fitsPercent(evaluationResult, context, whiteList, percentage) if !result { - config, _ := coreef.GetFirmwareConfigOneDB(envModelPercentage.LastKnownGood) + config, err := coreef.GetFirmwareConfigOneDB(envModelPercentage.LastKnownGood) + if err != nil { + log.Errorf("PercentFilterfilter failed to get LKG firmware config %s: %v", envModelPercentage.LastKnownGood, err) + } if config != nil && context.GetFirmwareVersionConverted() != config.FirmwareVersion { // return LKG firmware config if versions are different evaluationResult.FirmwareConfig = coreef.NewFirmwareConfigFacade(config) diff --git a/dataapi/estbfirmware/estb_firmware_rule_eval.go b/dataapi/estbfirmware/estb_firmware_rule_eval.go index 0dea2881..b813aa29 100644 --- a/dataapi/estbfirmware/estb_firmware_rule_eval.go +++ b/dataapi/estbfirmware/estb_firmware_rule_eval.go @@ -361,13 +361,19 @@ func (e *EstbFirmwareRuleBase) ExtractConfigFromAction(context *coreef.Converted context.AddBypassFiltersConverted(firmware.TIME_FILTER) - config, _ := coreef.GetFirmwareConfigOneDB(ruleAction.IntermediateVersion) + config, err := coreef.GetFirmwareConfigOneDB(ruleAction.IntermediateVersion) + if err != nil { + log.Errorf("PercentFilter failed to get intermediate version firmware config %s: %v", ruleAction.IntermediateVersion, err) + } if config != nil && !strings.EqualFold(context.GetFirmwareVersionConverted(), config.FirmwareVersion) { // return IntermediateVersion firmware config appliedVersionInfo[FIRMWARE_SOURCE] = "IV,doesntMeetMinCheck" return ruleAction.IntermediateVersion } else { - config, _ = coreef.GetFirmwareConfigOneDB(ruleAction.ConfigId) // lkg config + config, err = coreef.GetFirmwareConfigOneDB(ruleAction.ConfigId) // lkg config + if err != nil { + log.Errorf("PercentFilter failed to get LKG firmware config %s: %v", ruleAction.ConfigId, err) + } if config != nil { // return LKG firmware config appliedVersionInfo[FIRMWARE_SOURCE] = "LKG,doesntMeetMinCheck" @@ -377,7 +383,10 @@ func (e *EstbFirmwareRuleBase) ExtractConfigFromAction(context *coreef.Converted return e.ExtractAnyPresentConfig(ruleAction) } - config, _ := coreef.GetFirmwareConfigOneDB(ruleAction.ConfigId) + config, err := coreef.GetFirmwareConfigOneDB(ruleAction.ConfigId) + if err != nil { + log.Errorf("PercentFilter failed to get firmware config %s: %v", ruleAction.ConfigId, err) + } if config != nil { appliedVersionInfo[FIRMWARE_SOURCE] = "LKG,meetMinCheck" } diff --git a/dataapi/feature_control_handler.go b/dataapi/feature_control_handler.go index e52ddfd2..2f46ede7 100644 --- a/dataapi/feature_control_handler.go +++ b/dataapi/feature_control_handler.go @@ -247,6 +247,8 @@ func GetFeatureControlSettingsHandler(w http.ResponseWriter, r *http.Request) { featureControl.FeatureResponses = append(featureControl.FeatureResponses, extraFeatureResponses...) if bbytes, err := json.Marshal(extraFeatureResponses); err == nil { rfcPostProc = string(bbytes) + } else { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetFeatureControlSettingsHandler failed to marshal post-processing response: %v", err) } } } @@ -292,7 +294,10 @@ func GetFeatureControlSettingsHandler(w http.ResponseWriter, r *http.Request) { featureControlMap := &map[string]rfc.FeatureControl{ "featureControl": *featureControl, } - response, _ := util.XConfJSONMarshal(featureControlMap, true) + response, err := util.XConfJSONMarshal(featureControlMap, true) + if err != nil { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetFeatureControlSettingsHandler failed to marshal feature control response: %v", err) + } xhttp.WriteXconfResponseWithHeaders(w, headers, http.StatusOK, []byte(response)) } diff --git a/dataapi/log_uploader_handler.go b/dataapi/log_uploader_handler.go index 6e904d12..f35ef125 100644 --- a/dataapi/log_uploader_handler.go +++ b/dataapi/log_uploader_handler.go @@ -131,7 +131,10 @@ func GetLogUploaderSettings(w http.ResponseWriter, r *http.Request, isTelemetry2 if telemetryProfile == nil { xhttp.WriteXconfResponseAsText(w, 404, []byte("\"

404 NOT FOUND

telemetry profile not found
\"")) } else { - response, _ := util.JSONMarshal(*telemetryProfile) + response, err := util.JSONMarshal(*telemetryProfile) + if err != nil { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetLogUploaderSettings failed to marshal telemetry profile: %v", err) + } xhttp.WriteXconfResponse(w, 200, response) } } else { @@ -210,7 +213,10 @@ func GetLogUploaderSettings(w http.ResponseWriter, r *http.Request, isTelemetry2 } LogResultSettings(result, telemetryRule, settingRules, fields) settingsResponse := logupload.CreateSettingsResponseObject(result) - response, _ := util.JSONMarshal(settingsResponse) + response, err := util.JSONMarshal(settingsResponse) + if err != nil { + log.WithFields(common.FilterLogFields(fields)).Errorf("GetLogUploaderSettings failed to marshal settings response: %v", err) + } xhttp.WriteXconfResponse(w, 200, response) } } diff --git a/http/response.go b/http/response.go index 08c82d80..c2f75e7e 100644 --- a/http/response.go +++ b/http/response.go @@ -129,6 +129,9 @@ func Error(w http.ResponseWriter, status int, err error) { addMoracideTagsAsResponseHeaders(w) w.WriteHeader(status) default: + if status >= http.StatusInternalServerError { + LogError(w, err) + } WriteErrorResponse(w, status, err) } } diff --git a/http/webconfig_server.go b/http/webconfig_server.go index 3081f9cc..ffc1a3db 100644 --- a/http/webconfig_server.go +++ b/http/webconfig_server.go @@ -446,7 +446,11 @@ func (s *XconfServer) LogRequestEnds(xw *XResponseWriter, r *http.Request) { tfields := common.FilterLogFields(fields) - log.WithFields(tfields).Info("request ends") + if statusCode >= http.StatusInternalServerError { + log.WithFields(tfields).Error("request ends") + } else { + log.WithFields(tfields).Info("request ends") + } if s.metricsEnabled && s.AppMetrics != nil { s.AppMetrics.UpdateAPIMetrics(r, xw.Status(), xw.StartTime()) From 7e5ef32e71d5e8eea014a2b1e2c647ac574504b2 Mon Sep 17 00:00:00 2001 From: RahulRengeshOfficial Date: Mon, 23 Mar 2026 22:54:30 +0530 Subject: [PATCH 2/3] Update response.go --- http/response.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/http/response.go b/http/response.go index c2f75e7e..08c82d80 100644 --- a/http/response.go +++ b/http/response.go @@ -129,9 +129,6 @@ func Error(w http.ResponseWriter, status int, err error) { addMoracideTagsAsResponseHeaders(w) w.WriteHeader(status) default: - if status >= http.StatusInternalServerError { - LogError(w, err) - } WriteErrorResponse(w, status, err) } } From be4f26f814b7bdb73bedf21c2f98e37b5a58cdb5 Mon Sep 17 00:00:00 2001 From: RahulRengeshOfficial Date: Mon, 23 Mar 2026 22:55:06 +0530 Subject: [PATCH 3/3] Update webconfig_server.go --- http/webconfig_server.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/http/webconfig_server.go b/http/webconfig_server.go index ffc1a3db..3081f9cc 100644 --- a/http/webconfig_server.go +++ b/http/webconfig_server.go @@ -446,11 +446,7 @@ func (s *XconfServer) LogRequestEnds(xw *XResponseWriter, r *http.Request) { tfields := common.FilterLogFields(fields) - if statusCode >= http.StatusInternalServerError { - log.WithFields(tfields).Error("request ends") - } else { - log.WithFields(tfields).Info("request ends") - } + log.WithFields(tfields).Info("request ends") if s.metricsEnabled && s.AppMetrics != nil { s.AppMetrics.UpdateAPIMetrics(r, xw.Status(), xw.StartTime())