diff --git a/server/application/application_errors_parser.go b/server/application/application_errors_parser.go index a4da579f57e17..c656b3f525c4f 100644 --- a/server/application/application_errors_parser.go +++ b/server/application/application_errors_parser.go @@ -62,6 +62,30 @@ func parseApplicationSyncResultErrorsFromConditions(status appv1.ApplicationStat return errs } +func parseApplicationResourcesControllerSyncErrors(app *appv1.Application) []*events.ObjectError { + var errs []*events.ObjectError + if app.Status.Resources == nil { + return errs + } + for _, rs := range app.Status.Resources { + if rs.GroupVersionKind().String() != appv1.ApplicationSchemaGroupVersionKind.String() && strings.ToLower(rs.GroupVersionKind().String()) != strings.ToLower(appv1.ApplicationSetSchemaGroupVersionKind.String()) { + continue + } + + if app.Namespace == rs.Namespace { + continue + } + + errs = append(errs, &events.ObjectError{ + Type: "sync", + Level: "error", + Message: rs.GroupVersionKind().String() + " resource(" + rs.Name + ") " + " located out of controller's namespace", + LastSeen: metav1.Now(), + }) + } + return errs +} + func parseResourceSyncResultErrors(rs *appv1.ResourceStatus, os *appv1.OperationState) []*events.ObjectError { errors := []*events.ObjectError{} if os.SyncResult == nil { diff --git a/server/application/application_event_reporter.go b/server/application/application_event_reporter.go index d61a423fa990d..cf2779c1b5fcf 100644 --- a/server/application/application_event_reporter.go +++ b/server/application/application_event_reporter.go @@ -556,6 +556,7 @@ func (s *applicationEventReporter) getApplicationEventPayload(ctx context.Contex syncStarted = metav1.Now() syncFinished *metav1.Time logCtx = log.WithField("application", a.Name) + errors = []*events.ObjectError{} ) obj := appv1.Application{} @@ -627,11 +628,18 @@ func (s *applicationEventReporter) getApplicationEventPayload(ctx context.Contex Cluster: a.Spec.Destination.Server, } + if a.Status.Conditions != nil { + errors = append(errors, parseApplicationSyncResultErrorsFromConditions(a.Status)...) + } + if a.Status.Resources != nil { + errors = append(errors, parseApplicationResourcesControllerSyncErrors(a)...) + } + payload := events.EventPayload{ Timestamp: ts, Object: object, Source: source, - Errors: parseApplicationSyncResultErrorsFromConditions(a.Status), + Errors: errors, } payloadBytes, err := json.Marshal(&payload)