Пример #1
0
        private bool IsPacketAllowed(MessageReader message, bool hostOnly)
        {
            var game = Player.Game;

            if (game == null)
            {
                return(false);
            }

            // GameCode must match code of the current game assigned to the player.
            if (message.ReadInt32() != game.Code)
            {
                return(false);
            }

            // Some packets should only be sent by the host of the game.
            if (hostOnly)
            {
                if (game.HostId == Id)
                {
                    return(true);
                }

                Logger.Warning("[{0}] Client sent packet only allowed by the host ({1}).", Id, game.HostId);
                return(false);
            }

            return(true);
        }
Пример #2
0
        /// <inheritdoc />
        public void Warning <T1>(string template, T1 parameter1)
        {
            if (!IsEnabled(LogLevel.Warning))
            {
                return;
            }

            _target.Warning(template, parameter1);
        }
Пример #3
0
 public void Warning(string message, Exception exception = null)
 {
     if (exception != null)
     {
         _log.Warning(exception, message);
     }
     else
     {
         _log.Warning(message);
     }
 }
Пример #4
0
        public void SendToAllExcept(MessageWriter message, ClientPlayer sender)
        {
            foreach (var(_, player) in _players.Where(x => x.Value != sender))
            {
                if (player.Client.Connection.State != ConnectionState.Connected)
                {
                    Logger.Warning("[{0}] Tried to sent data to a disconnected player ({1}).", sender?.Client.Id, player.Client.Id);
                    continue;
                }

                player.Client.Send(message);
            }
        }
Пример #5
0
 private void LogResponseHasStartedError(HttpContext context, string requestBody, string responseStream,
                                         Stopwatch stopWatch,
                                         bool isRequestOk, Exception ex)
 {
     _logger.Warning(
         "The response has already started, the AutoWrapper.Plus.Serilog middleware will not be executed.");
 }
Пример #6
0
        private void Start()
        {
            _infoButton.onClick.AddListener(() => _logger.Information("This is an info"));
            _warningButton.onClick.AddListener(() => _logger.Warning("This is a warning"));
            _errorButton.onClick.AddListener(() =>
            {
                try
                {
                    throw new InvalidOperationException("Invalid stuff");
                }
                catch (Exception e)
                {
                    _logger.Error(e, "This is an error");
                }
            });
            _threadButton.onClick.AddListener(() =>
            {
                var stopWatch = Stopwatch.StartNew();

                ThreadPool.QueueUserWorkItem(state =>
                {
                    stopWatch.Stop();
                    _logger.Information("Log from thread {Id}, Invoke took: {Elapsed}", Thread.CurrentThread.ManagedThreadId, stopWatch.Elapsed);
                });
            });
        }
Пример #7
0
    public static void HandleUnityLog(string logString, string stackTrace, LogType type)
    {
        if (logString.EndsWith(UnityLogEventSink.unityLogEventSinkMarker))
        {
            // Has already been logged to the Unity Console.
            return;
        }

        Serilog.ILogger loggerWithContext = Logger.ForContext(UnityLogEventSink.skipUnityLogEventSinkPropertyName, true);

        switch (type)
        {
        case LogType.Warning:
            loggerWithContext.Warning(logString);
            break;

        case LogType.Assert:
        case LogType.Error:
        case LogType.Exception:
            loggerWithContext.Error(logString + "\n" + stackTrace);
            break;

        default:
            loggerWithContext.Information(logString);
            break;
        }
    }
Пример #8
0
        /// <inheritdoc />
        public Task LogMessage(LogMessage message)
        {
            switch (message.Severity)
            {
            case LogSeverity.Error:
            case LogSeverity.Critical:
                _logger.Fatal($"{message.Source}: {message.Message} {message.Exception}");
                break;

            case LogSeverity.Warning:
                _logger.Warning($"{message.Source}: {message.Message} {message.Exception}");
                break;

            case LogSeverity.Info:
                _logger.Information($"{message.Source}: {message.Message} {message.Exception}");
                break;

            case LogSeverity.Verbose:
                _logger.Verbose($"{message.Source}: {message.Message} {message.Exception}");
                break;

            case LogSeverity.Debug:
                _logger.Debug($"{message.Source}: {message.Message} {message.Exception}");
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(Task.CompletedTask);
        }
Пример #9
0
 public void Warning(string template, params object[] values)
 {
     if (_inner.IsEnabled(LogEventLevel.Warning))
     {
         _inner.Warning(template, values);
     }
 }
        private void OnMessageReceived(MessageReader message)
        {
            var flag = message.Tag;

            Logger.Verbose("Server got {0}.", flag);

            switch (flag)
            {
            case MessageFlags.HostGame:
            {
                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    Message13Redirect.Serialize(packet, false, _nodeProvider.Get());
                    _connection.Send(packet);
                }
                break;
            }

            case MessageFlags.JoinGame:
            {
                Message01JoinGame.Deserialize(message,
                                              out var gameCode,
                                              out var unknown);

                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    var endpoint = _nodeLocator.Find(GameCode.IntToGameName(gameCode));
                    if (endpoint == null)
                    {
                        Message01JoinGame.SerializeError(packet, false, DisconnectReason.GameMissing);
                    }
                    else
                    {
                        Message13Redirect.Serialize(packet, false, endpoint);
                    }

                    _connection.Send(packet);
                }
                break;
            }

            case MessageFlags.GetGameListV2:
            {
                // TODO: Implement.
                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    Message01JoinGame.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented);
                    _connection.Send(packet);
                }
                break;
            }

            default:
            {
                Logger.Warning("Received unsupported message flag on the redirector ({0}).", flag);
                break;
            }
            }
        }
Пример #11
0
        public override async ValueTask HandleMessageAsync(IMessageReader reader, MessageType messageType)
        {
            var flag = reader.Tag;

            Logger.Verbose("Server got {0}.", flag);

            switch (flag)
            {
            case MessageFlags.HostGame:
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message13RedirectS2C.Serialize(packet, false, _nodeProvider.Get());
                await Connection.SendAsync(packet);

                break;
            }

            case MessageFlags.JoinGame:
            {
                Message01JoinGameC2S.Deserialize(
                    reader,
                    out var gameCode,
                    out _);

                using var packet = MessageWriter.Get(MessageType.Reliable);
                var endpoint = await _nodeLocator.FindAsync(GameCodeParser.IntToGameName(gameCode));

                if (endpoint == null)
                {
                    Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.GameMissing);
                }
                else
                {
                    Message13RedirectS2C.Serialize(packet, false, endpoint);
                }

                await Connection.SendAsync(packet);

                break;
            }

            case MessageFlags.GetGameListV2:
            {
                // TODO: Implement.
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented);
                await Connection.SendAsync(packet);

                break;
            }

            default:
            {
                Logger.Warning("Received unsupported message flag on the redirector ({0}).", flag);
                break;
            }
            }
        }
Пример #12
0
        protected internal virtual void ProcessReminders(ReminderTypes type)
        {
            if (type == ReminderTypes.Project)
            {
                ReminderServiceLog.Warning("Recurring reminders are disabled until design refactor is complete");
                return;
            }
            //Get list of Event Assignments by type
            var eventTaskAssignments = GetListOfAssignments(type);
            //Filter into reminders that are due
            var dueReminders = eventTaskAssignments.Where(ShouldSendReminder);

            //Send reminders if required
            foreach (var reminder in dueReminders)
            {
                SendReminder(reminder);
            }
        }
Пример #13
0
        public async Task SendMessage(MessageToSend message)
        {
            if (_isDisconnecting)
            {
                _logger.Warning("Trying to send message while disconnecting.");
            }
            var channelId = await GetChannelId(message);

            var res = await Client.PostMessageAsync(channelId, message.Text, "Automa Luce Della Pizza (PizzaLight Bot)");
        }
Пример #14
0
        private void RegisterWithConsul(IApplicationBuilder app, IApplicationLifetime lifetime)
        {
            try
            {
                _logger.Information("Starting registration in consul...");

                var consulClient = app.ApplicationServices
                                   .GetRequiredService <IConsulClient>();

                var appConfig = Configuration.GetSection("service").Get <ApplicationConfig>();

                var features  = app.Properties["server.Features"] as FeatureCollection;
                var addresses = features?.Get <IServerAddressesFeature>();
                var address   = addresses?.Addresses.FirstOrDefault() ?? DefaultAddress;

                // Register service with consul
                _logger.Information("Register service {serviceName} located on {address}", appConfig.Consul.ServiceName, address);

                var uri = new Uri(address);

                var registration = new AgentServiceRegistration
                {
                    ID      = $"{appConfig.Consul.ServiceId}_{Environment.MachineName}_{uri.Port}",
                    Name    = appConfig.Consul.ServiceName,
                    Address = $"{uri.Host}",
                    Port    = uri.Port,
                    Tags    = new[] { "microservice", "password", "sharing", $"urlprefix-/{appConfig.Consul.ServiceName} strip=/{appConfig.Consul.ServiceName}" },
                    Checks  = new AgentServiceCheck[]
                    {
                        new AgentCheckRegistration
                        {
                            HTTP     = $"{uri.Scheme}://{uri.Host}:{uri.Port}/healthcheck",
                            Interval = TimeSpan.FromMinutes(1),
                            Timeout  = TimeSpan.FromSeconds(3),
                            Notes    = "Check /healthcheck on service"
                        }
                    }
                };

                consulClient.Agent.ServiceDeregister(registration.ID).GetAwaiter().GetResult();
                consulClient.Agent.ServiceRegister(registration).GetAwaiter().GetResult();

                lifetime.ApplicationStopping.Register(() =>
                {
                    _logger.Information("Deregister from consul");
                    consulClient.Agent.ServiceDeregister(registration.ID).GetAwaiter().GetResult();
                });

                _logger.Information("Finished registration in consul...");
            }
            catch (Exception e)
            {
                _logger.Warning(e, "Failed to register app in consul.");
            }
        }
Пример #15
0
 private static void LoadPlugins()
 {
     try
     {
         PlugInLoader.LoadExternalProcessors(Logger);
     }
     catch (System.Exception ex)
     {
         Logger.Warning("Failed to load external job processors {0}", ex);
     }
 }
Пример #16
0
        private void CheckForConfigErrors()
        {
            if (!configInitErrors.HasErrors)
            {
                return;
            }
            var msg = $"{Resources.LoggingMessages.could_not_setup_config} {Resources.LoggingMessages.error_msg} {configInitErrors.ErrorMessages}";

            msgSender.SendWarning(msg);
            log.Warning(msg);
        }
Пример #17
0
        public Matchmaker(IPAddress ip, int port)
        {
            _gameManager   = new GameManager();
            _clientManager = new ClientManager();
            _connection    = new UdpConnectionListener(new IPEndPoint(ip, port), IPMode.IPv4, s =>
            {
                Logger.Warning("Log from Hazel: {0}", s);
            });

            _connection.NewConnection += OnNewConnection;
        }
Пример #18
0
        /// <summary>
        /// Helper to log inner exceptions.
        /// </summary>
        private void LogExceptions(Exception ex)
        {
            while (ex != null)
            {
                var formattedException = ex as FormattedException;
                if (formattedException != null)
                {
                    serilog.Warning(ex, "Exception ocurred\r\n" + formattedException.MessageTemplate, formattedException.PropertyValues);
                }
                else
                {
                    serilog.Warning(ex,
                                    "Exception ocurred: {ExceptionMessage}\r\n" +
                                    "Details:\r\n" +
                                    "{@Exception}",
                                    ex.Message, ex
                                    );
                }

                ex = ex.InnerException;
            }
        }
Пример #19
0
    public override async Task HandleAsync(TelegramRequest req, CancellationToken ct)
    {
        if (!_options.SecretKey.Equals(req.SecretKey))
        {
            _logger.Warning("Пришло событие с неправильным секретным ключом: {0}", req.SecretKey);
            await SendNotFoundAsync(ct);

            return;
        }

        BackgroundJob.Enqueue(() => _handler.Handle(req.Update));

        await SendOkAsync(ct);
    }
Пример #20
0
 void SubscriptionDropped(
     EventStoreCatchUpSubscription subscription,
     SubscriptionDropReason reason, Exception exception)
 {
     _log.Warning(
         exception,
         "Subscription {subscription} dropped because of {reason}",
         _subscriptionName,
         reason);
     if (reason != SubscriptionDropReason.UserInitiated)
     {
         Task.Run(Start);
     }
 }
Пример #21
0
        private async Task SetImage(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                PART_Image.Source     = PackageIconService.GetEmptyIconImage();
                PART_Loading.IsActive = false;
                return;
            }

            PART_Loading.IsActive = true;

            var         size       = GetCurrentSize();
            var         expiration = DateTime.UtcNow + TimeSpan.FromDays(1);
            ImageSource source;

            try
            {
                source = await PackageIconService.GetImage(url, size, expiration);
            }
            catch (HttpRequestException)
            {
                source = PackageIconService.GetErrorIconImage();
            }
            catch (ArgumentException exception)
            {
                Logger.Warning(exception, $"Got an invalid img url: \"{url}\".");
                source = PackageIconService.GetErrorIconImage();
            }
            catch (Exception exception)
            {
                Logger.Warning(exception, $"Something went wrong with: \"{url}\".");
                source = PackageIconService.GetErrorIconImage();
            }

            PART_Image.Source     = source;
            PART_Loading.IsActive = false;
        }
Пример #22
0
        private async Task SetImage(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                PART_Image.Source     = EmptyIcon.Value;
                PART_Loading.IsActive = false;
                return;
            }

            PART_Loading.IsActive = true;

            var         size       = GetCurrentSize();
            var         expiration = DateTime.UtcNow + TimeSpan.FromDays(1);
            ImageSource source;

            try
            {
                source = (await LoadImage(url, size.Width, expiration)).ToNative();
            }
            catch (HttpRequestException)
            {
                source = ErrorIcon.Value;
            }
            catch (ArgumentException)
            {
                Logger.Warning("Got an invalid img url: \"{IconUrl}\".", url);
                source = ErrorIcon.Value;
            }
            catch (Exception exception)
            {
                Logger.Warning(exception, "Something went wrong with: \"{IconUrl}\".", url);
                source = ErrorIcon.Value;
            }

            PART_Image.Source     = source;
            PART_Loading.IsActive = false;
        }
Пример #23
0
        private async Task SetImage(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                PART_Image.Source     = null;
                PART_Loading.IsActive = false;
                return;
            }

            Uri uri;

            if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
            {
                Logger.Warning("Got an invalid img url: \"{IconUrl}\".", url);
                PART_Image.Source     = ErrorIcon.Value;
                PART_Loading.IsActive = false;
                return;
            }

            PART_Loading.IsActive = true;

            var size       = GetCurrentSize();
            var expiration = DateTime.UtcNow + TimeSpan.FromDays(1);

            var imagePart         = uri.Segments.Last();
            var fileTypeSeperator = imagePart.LastIndexOf(".", StringComparison.InvariantCulture);

            BitmapSource source;

            if (fileTypeSeperator > 0 &&
                imagePart.Substring(fileTypeSeperator + 1).Equals("svg", StringComparison.InvariantCultureIgnoreCase))
            {
                source = (await LoadSvg(url, size.Width, size.Height, expiration)).ToNative();
            }
            else
            {
                try
                {
                    source = (await LoadImage(url, size.Width, size.Height, expiration)).ToNative();
                }
                catch (HttpRequestException)
                {
                    source = ErrorIcon.Value;
                }
            }

            PART_Image.Source     = source;
            PART_Loading.IsActive = false;
        }
Пример #24
0
        protected override async Task HandleInternal(object @event, long streamVersion)
        {
            switch (@event)
            {
            case BookStoreInitializedEvent ev:
                await Apply(ev, streamVersion);

                break;

            case BookStoreUpdatedEvent ev:
                await Apply(ev, streamVersion);

                break;

            default:
                _log.Warning("Unknown event type");
                break;
            }
        }
Пример #25
0
        public void Log(string category,
                        LogLevel level,
                        string msg,
                        params object[] parameters)
        {
            var template = msg;

            if (!string.IsNullOrEmpty(category))
            {
                template = string.Format("[{0}]: {1}", category, msg);
            }

            msg = string.Format(template, parameters);

            switch (level)
            {
            case LogLevel.Trace:
                _logger.Verbose(msg);
                break;

            case LogLevel.Debug:
                _logger.Debug(msg);
                break;

            case LogLevel.Info:
                _logger.Information(msg);
                break;

            case LogLevel.Warning:
                _logger.Warning(msg);
                break;

            case LogLevel.Error:
                _logger.Error(msg);
                break;

            case LogLevel.Critical:
                _logger.Fatal(msg);
                break;
            }
        }
Пример #26
0
        /// <summary>
        /// Detects if the buildDll itself needs to be re-built.
        /// </summary>
        /// <returns></returns>
        bool IsOutOfDate()
        {
            if (Regex.IsMatch(buildDll.FileName(), "test", RegexOptions.IgnoreCase))
            {
                Logger.Warning("test mode detected. Out of date check skipped.");
                return(false);
            }

            var sourceFiles = sourceDir.Glob("**")
                              .Exclude("bin")
                              .Exclude("obj")
                              .Exclude(".vs");

            var sourceChanged   = sourceFiles.LastWriteTimeUtc();
            var buildDllChanged = buildDll.LastWriteTimeUtc();

            var maximalAge = TimeSpan.FromMinutes(60);

            return((sourceChanged > buildDllChanged) ||
                   (DateTime.UtcNow - buildDllChanged) > maximalAge);
        }
    private static Policy CreateRetryPolicy(IConfiguration configuration, Serilog.ILogger logger)
    {
        // Only use a retry policy if configured to do so.
        // When running in an orchestrator/K8s, it will take care of restarting failed services.
        if (bool.TryParse(configuration["RetryMigrations"], out bool retryMigrations))
        {
            return(Policy.Handle <Exception>().
                   WaitAndRetryForever(
                       sleepDurationProvider: retry => TimeSpan.FromSeconds(5),
                       onRetry: (exception, retry, timeSpan) =>
            {
                logger.Warning(
                    exception,
                    "Exception {ExceptionType} with message {Message} detected during database migration (retry attempt {retry})",
                    exception.GetType().Name,
                    exception.Message,
                    retry);
            }
                       ));
        }

        return(Policy.NoOp());
    }
Пример #28
0
        private IBasePacket ParsePacket(byte[] data, PacketDirection direction)
        {
            var test = new OpCodePacket(new MemoryStream(data));

            if (test.OpCode.Id1 == 0)
            {
                Logger.Error($"{direction}: Received Zero Length packet. Payload:{BitConverter.ToString(data)}");
                return(null);
            }
            var packetList = direction == PacketDirection.ServerToClient ? GamePackets.ServerToClientPackets :
                             GamePackets.ClientToServerPackets;

            var cp = packetList.Where(p => p.OpCode.Match(test.OpCode)).FirstOrDefault();

            if (cp == null)
            {
                Logger.Warning($"{direction}: Unknown packet {test.OpCode.ToInfoString()} Data:{BitConverter.ToString(data)}");
                return(null);
            }
            Logger.Information($"{direction}: Found Packet {test.OpCode.ToInfoString()} Type:{cp.Packet} Data:{BitConverter.ToString(data)}");
            var packetInstane = Activator.CreateInstance(cp.Packet, new MemoryStream(data)) as IBasePacket;

            return(packetInstane);
        }
Пример #29
0
 public void Log(LogEntry entry)
 {
     /* Logging abstraction handling */
     if (entry.Severity == LoggingEventType.Debug)
     {
         _logger.Debug(entry.Exception, entry.Message);
     }
     if (entry.Severity == LoggingEventType.Information)
     {
         _logger.Information(entry.Exception, entry.Message);
     }
     else if (entry.Severity == LoggingEventType.Warning)
     {
         _logger.Warning(entry.Message, entry.Exception);
     }
     else if (entry.Severity == LoggingEventType.Error)
     {
         _logger.Error(entry.Message, entry.Exception);
     }
     else
     {
         _logger.Fatal(entry.Message, entry.Exception);
     }
 }
Пример #30
0
        private static async Task RunMyParentDemo(IServiceProvider servProv, Serilog.ILogger lgr)
        {
            /* Create seed data for the EF Database.  NOT for Production type of code */
            MyParentDataGenerator.Initialize(servProv);

            IParentDemos demo = servProv.GetService <IParentDemos>();
            ////await demo.PerformBasicCrudDemo();

            ICollection <Exception> allExceptions = new List <Exception>();

            try
            {
                await demo.PerformDemoIQueryableWithReusedPocoObject();
            }
            catch (Exception ex)
            {
                /* this one is actually broken.
                 * Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00904: "t"."MY_PARENT_UUID": invalid identifier
                 *
                 * in the sql about 8 lines down:
                 *  The "t" table produces an alias "MyParentUuidFk" ( from the sql SELECT "i"."MY_PARENT_UUID" "MyParentUuidFk" )
                 *      But it does not use the alias on the JOIN.
                 *          (sql =         "chd"."MY_PARENT_UUID" = "t"."MY_PARENT_UUID" )
                 *  The join sql should be:
                 *          "chd"."MY_PARENT_UUID" = "t"."MyParentUuidFk"
                 */

                /*
                 * SELECT "par"."MY_PARENT_UUID", "par"."MY_PARENT_NAME", "par"."UPDATE_DATE_TS"
                 * FROM "MYORACLESCHEMAONE"."MY_PARENT" "par"
                 * WHERE EXISTS (
                 *  SELECT 1
                 *  FROM "MYORACLESCHEMAONE"."MY_CHILD" "chd"
                 *  INNER JOIN (
                 *      SELECT "i"."MY_PARENT_UUID" "MyParentUuidFk", MAX("i"."UPDATE_DATE_TS") "UpdateDateStamp"
                 *      FROM "MYORACLESCHEMAONE"."MY_CHILD" "i"
                 *      GROUP BY "i"."MY_PARENT_UUID"
                 *  ) "t"
                 *      ON ("chd"."UPDATE_DATE_TS" = "t"."UPDATE_DATE_TS") AND ("chd"."MY_PARENT_UUID" = "t"."MY_PARENT_UUID")
                 *  WHERE ("chd"."MY_CHILD_MAGIC_STATUS" NOT IN (98, 99) AND ("t"."UPDATE_DATE_TS" < :cutOffDate_1)) AND ("chd"."MY_PARENT_UUID" = "par"."MY_PARENT_UUID")) OR NOT EXISTS (
                 *  SELECT 1
                 *  FROM "MYORACLESCHEMAONE"."MY_CHILD" "m"
                 *  WHERE "par"."MY_PARENT_UUID" = "m"."MY_PARENT_UUID")
                 *      ;
                 *
                 */

                lgr.Warning(ex, "PerformDemoIQueryableWithReusedPocoObject FAILED");
                Console.WriteLine(GenerateFullFlatMessage(ex));
                allExceptions.Add(ex);
            }

            try
            {
                await demo.PerformDemoIQueryableWithPrivateClassHolderObject();
            }
            catch (Exception ex)
            {
                /* no error here, BUT "not be translated */

                /*
                 * 2020-04-21 04:43:55.834 -04:00 [WRN] The LINQ expression 'where ([perParentMaxUpdateDate].MyPrivateClassMaxChildUpdateDateStamp < __cutOffDate_1)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.841 -04:00 [WRN] The LINQ expression 'where ([chd].MyParentUuidFk == [par].MyParentKey)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.851 -04:00 [WRN] The LINQ expression 'Any()' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.896 -04:00 [WRN] The LINQ expression 'where ({from MyChildEntity chd in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) join ChildMaxHolder perParentMaxUpdateDate in {from IGrouping`2 g in {value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) => GroupBy([i].MyParentUuidFk, [i])} select new ChildMaxHolder() {MyPrivateClassParentUuid = [g].Key, MyPrivateClassMaxChildUpdateDateStamp = {from MyChildEntity row in [g] select [row].UpdateDateStamp => Max()}}} on new <>f__AnonymousType1`2(a = [chd].UpdateDateStamp, b = [chd].MyParentUuidFk) equals new <>f__AnonymousType1`2(a = [perParentMaxUpdateDate].MyPrivateClassMaxChildUpdateDateStamp, b = [perParentMaxUpdateDate].MyPrivateClassParentUuid) where (Not({__magicStatusValues_0 => Contains([chd].MyChildMagicStatus)}) AndAlso ([perParentMaxUpdateDate].MyPrivateClassMaxChildUpdateDateStamp < __cutOffDate_1)) where ([chd].MyParentUuidFk == [par].MyParentKey) select [chd] => Any()} OrElse Not({from MyChildEntity <generated>_2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) where  ?= (Property([par], "MyParentKey") == Property([<generated>_2], "MyParentUuidFk")) =? select [<generated>_2] => Any()}))' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.903 -04:00 [WRN] The LINQ expression 'where ([perParentMaxUpdateDate].MyPrivateClassMaxChildUpdateDateStamp < __cutOffDate_1)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.912 -04:00 [WRN] The LINQ expression 'where ([chd].MyParentUuidFk == [par].MyParentKey)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:43:55.912 -04:00 [WRN] The LINQ expression 'Any()' could not be translated and will be evaluated locally.
                 */

                lgr.Warning(ex, "PerformDemoIQueryableWithPrivateClassHolderObject FAILED");
                Console.WriteLine(GenerateFullFlatMessage(ex));
                allExceptions.Add(ex);
            }

            try
            {
                await demo.PerformDemoIQueryableWithAnonymousClass();
            }
            catch (Exception ex)
            {
                /* no error here, BUT "not be translated and will be evaluated locally" warnings in the log file */

                /*
                 * 2020-04-21 04:45:51.833 -04:00 [WRN] The LINQ expression 'where ([anonymousPerParentMaxUpdateDate].MyAnonymousMaxPerParentUpdateDateStamp < __cutOffDate_1)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.851 -04:00 [WRN] The LINQ expression 'where ([chd].MyParentUuidFk == [par].MyParentKey)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.863 -04:00 [WRN] The LINQ expression 'Any()' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.902 -04:00 [WRN] The LINQ expression 'where ({from MyChildEntity chd in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) join <>f__AnonymousType2`2 anonymousPerParentMaxUpdateDate in {from IGrouping`2 g in {value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) => GroupBy([i].MyParentUuidFk, [i])} select new <>f__AnonymousType2`2(MyAnonymousMyParentUUID = [g].Key, MyAnonymousMaxPerParentUpdateDateStamp = {from MyChildEntity row in [g] select [row].UpdateDateStamp => Max()})} on new <>f__AnonymousType1`2(a = [chd].UpdateDateStamp, b = [chd].MyParentUuidFk) equals new <>f__AnonymousType1`2(a = [anonymousPerParentMaxUpdateDate].MyAnonymousMaxPerParentUpdateDateStamp, b = [anonymousPerParentMaxUpdateDate].MyAnonymousMyParentUUID) where (Not({__magicStatusValues_0 => Contains([chd].MyChildMagicStatus)}) AndAlso ([anonymousPerParentMaxUpdateDate].MyAnonymousMaxPerParentUpdateDateStamp < __cutOffDate_1)) where ([chd].MyParentUuidFk == [par].MyParentKey) select [chd] => Any()} OrElse Not({from MyChildEntity <generated>_2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyCompany.MyExamples.EfPlaygroundOne.Domain.Entities.MyChildEntity]) where  ?= (Property([par], "MyParentKey") == Property([<generated>_2], "MyParentUuidFk")) =? select [<generated>_2] => Any()}))' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.906 -04:00 [WRN] The LINQ expression 'where ([anonymousPerParentMaxUpdateDate].MyAnonymousMaxPerParentUpdateDateStamp < __cutOffDate_1)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.914 -04:00 [WRN] The LINQ expression 'where ([chd].MyParentUuidFk == [par].MyParentKey)' could not be translated and will be evaluated locally.
                 * 2020-04-21 04:45:51.914 -04:00 [WRN] The LINQ expression 'Any()' could not be translated and will be evaluated locally.
                 */

                lgr.Warning(ex, "PerformDemoIQueryableWithAnonymousClass FAILED");
                Console.WriteLine(GenerateFullFlatMessage(ex));
                allExceptions.Add(ex);
            }

            if (allExceptions.Any())
            {
                AggregateException aggex = new AggregateException("All Oracle.EF Exceptions", allExceptions);
                lgr.Error(aggex, aggex.Message);
                throw aggex;
            }
        }