Пример #1
0
        public void ProvideFault(Exception ex, MessageVersion version, ref Message msg)
        {
            _logger.Error("ServiceExceptionsHandler received unhandled exception", ex);

            var fe = new FaultException <UnhandledException>(UnhandledException.CreateFromEx(ex));
            var mf = fe.CreateMessageFault();

            msg = Message.CreateMessage(version, mf, string.Empty);

            _logger.Error("ServiceExceptionsHandler handled exception and sent ex data to client");
        }
Пример #2
0
        protected override void OnStart(string[] args)
        {
            Logger.Debug("Starting up the service...");

            /*
             * your service startup logic goes here. do not block, return imediately, start a task perhaps to
             * perform all the startup overhead.
             *
             * There are ways to request more time during on start or onstop, see the article in this project HowTo-Article.pdf
             */
            var task = new Task(() =>
            {
                try
                {
                    Thread.Sleep(10000);
                    throw new Exception("something went wrong...");
                }
                catch (Exception e)
                {
                    Logger.Error("This should trigger service Stop.", e);
                    this.StopService();
                }
            });

            task.Start();
        }
        //--------------------------------------------------------------------------------
        /// <summary>
        /// Error response
        /// </summary>
        //--------------------------------------------------------------------------------
        internal HttpResponseMessage Error(Exception error, IServiceLogger logger)
        {
            if (error is TargetInvocationException)
            {
                error = ((TargetInvocationException)error).InnerException;
            }
            var logKey = CurrentLogKey;

            logger.Error($"{logKey} Service Error: {error.Message}", error);


            var statusCode = HttpStatusCode.BadRequest;
            var response   = new ServiceResponse(null);

            if (error is ServiceOperationException)
            {
                var serviceError = error as ServiceOperationException;
                response.ErrorCode    = serviceError.ErrorCode.ToString();
                response.ErrorMessage = serviceError.Message + $"\r\nThe Log Key for this error is {logKey}";
            }
            else
            {
                response.ErrorCode    = ServiceOperationError.FatalError.ToString();
                statusCode            = HttpStatusCode.InternalServerError;
                response.ErrorMessage = $"There was a fatal service error.\r\nThe Log Key for this error is {logKey}\r\n{GetExceptionHint(error)}";
            }

            return(new HttpResponseMessage(statusCode)
            {
                Content = new StringContent(JsonConvert.SerializeObject(response, Formatting.Indented), Encoding.UTF8, "application/json")
            });
        }
 //--------------------------------------------------------------------------------
 /// <summary>
 /// Framework for handling background jobs.
 /// </summary>
 //--------------------------------------------------------------------------------
 internal void SafelyTryJob(IServiceLogger logger, Action tryme)
 {
     try
     {
         tryme();
     }
     catch (Exception e)
     {
         var logKey = CurrentLogKey;
         logger.Error($"{logKey} Fatal Error: {e.ToString()}", e);
     }
 }
Пример #5
0
        public async Task Invoke(HttpContext httpContext)
        {
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            var traceId     = httpContext.Request.Headers[Constants.TraceIdHeader].ToString();

            if (!string.IsNullOrEmpty(traceId) || environment == "Development")
            {
                await _next.Invoke(httpContext);
            }
            else
            {
                _logger.Error($"A request is missing {Constants.TraceIdHeader} Header");
                httpContext.Response.StatusCode = 403;
                await httpContext.Response.WriteAsync("Missing some important headers");
            }
        }
Пример #6
0
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            // When user closes a browser tab or call stop() connection
            // we need to ensure to notify all users about offline state

            // This method is a same logic of Offline
            var isOffline = await _chatContext.TakeOfflineAsync(new OnlineUser
            {
                UserName = Context.UserIdentifier
            });

            if (isOffline)
            {
                try
                {
                    var allOpenningSessions = _chatContext.GetAllActiveSessions(Context.UserIdentifier);
                    if (allOpenningSessions != null)
                    {
                        foreach (var session in allOpenningSessions)
                        {
                            // Persist it on Db
                            session.LeaveDate = DateTime.UtcNow;
                            await _chatSessionRepository.UpsertAsync(session.ToSession(true));

                            session.IsInDb  = true;
                            session.IsDirty = false;
                        }
                    }

                    _chatContext.CloseAllUnlistenRooms(Context.UserIdentifier);
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "There are some problems when saving chat session");
                }
                finally
                {
                    // Ensure we still send notify
                    await Clients.Others.Offline(Context.UserIdentifier);
                }
            }

            await base.OnDisconnectedAsync(exception);
        }
Пример #7
0
        public async Task Invoke(HttpContext httpContext)
        {
            var environment   = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            var userSessionId = httpContext.Request.Headers[Constants.UserSessionIdHeader].ToString();
            var skipCheck     = httpContext.Items[Constants.SkipCheckPortalHeaders] != null ? (bool)httpContext.Items[Constants.SkipCheckPortalHeaders] : false;

            if (
                !string.IsNullOrEmpty(userSessionId) ||
                skipCheck)
            {
                httpContext.Items[Constants.UserSessionIdHeader] = StringUtil.DecodeBase64ToUTF8(userSessionId);
                await _next.Invoke(httpContext);
            }
            else
            {
                _logger.Error($"A request is missing {Constants.UserSessionIdHeader} Header");
                httpContext.Response.StatusCode = 403;
                await httpContext.Response.WriteAsync("Missing some important headers");
            }
        }
Пример #8
0
        public async Task <GenerateCodeResponseModel> CreateCode(GenerateCodeRequestModel model)
        {
            var collectApp               = _appServiceProvider.GetAppsByIds(model.Apps);
            var collectStandards         = _standardServiceProvider.GetStandardComponentsByIds(model.Standards);
            var collectTree              = _standardServiceProvider.GetStandardComponentsByIds(model.Tree);
            var collectArray             = _standardServiceProvider.GetStandardComponentsByIds(model.Array);
            var collectCharts            = _chartServiceProvider.GetChartsByIds(model.Charts);
            var collectDynamicLists      = _dynamicListServiceProvider.GetDynamicListsByIds(model.DynamicLists);
            var collectDatabases         = _databaseServiceProvider.GetDatabaseConnectionsByIds(model.Databases);
            var collectPages             = _pageServiceProvider.GetPagesByIds(model.Pages);
            var collectCompositeControls = _compositeControlServiceProvider.GetByIds(model.CompositeControls);

            await Task.WhenAll(
                collectApp,
                collectStandards,
                collectCharts,
                collectDatabases,
                collectDynamicLists,
                collectPages,
                collectCompositeControls);

            var appCodes = new List <CodeGenerableResult>();

            if (collectApp.Result != null && collectApp.Result.Any())
            {
                foreach (var app in collectApp.Result)
                {
                    try
                    {
                        appCodes.Add(app.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for app {app.Name}");
                    }
                }
            }

            var standardCodes = new List <CodeGenerableResult>();

            if (collectStandards.Result != null && collectStandards.Result.Any())
            {
                foreach (var standard in collectStandards.Result)
                {
                    try
                    {
                        standardCodes.Add(standard.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for standard component {standard.Name}");
                    }
                }
            }

            var treeCodes = new List <CodeGenerableResult>();

            if (collectTree.Result != null && collectTree.Result.Any())
            {
                foreach (var tree in collectTree.Result)
                {
                    try
                    {
                        treeCodes.Add(tree.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for tree {tree.Name}");
                    }
                }
            }

            var arrayCodes = new List <CodeGenerableResult>();

            if (collectArray.Result != null && collectArray.Result.Any())
            {
                foreach (var array in collectArray.Result)
                {
                    try
                    {
                        arrayCodes.Add(array.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for array standard {array.Name}");
                    }
                }
            }

            var databaseCodes = new List <CodeGenerableResult>();

            if (collectDatabases.Result != null && collectDatabases.Result.Any())
            {
                foreach (var database in collectDatabases.Result)
                {
                    try
                    {
                        databaseCodes.Add(database.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for database {database.Name}");
                    }
                }
            }

            var chartCodes = new List <CodeGenerableResult>();

            if (collectCharts.Result != null && collectCharts.Result.Any())
            {
                foreach (var chart in collectCharts.Result)
                {
                    try
                    {
                        chartCodes.Add(chart.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for chart {chart.Name}");
                    }
                }
            }

            var pageCodes = new List <CodeGenerableResult>();

            if (collectPages.Result != null && collectPages.Result.Any())
            {
                foreach (var page in collectPages.Result)
                {
                    try
                    {
                        pageCodes.Add(page.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for page {page.Name}");
                    }
                }
            }

            var dynamicListCodes = new List <CodeGenerableResult>();

            if (collectDynamicLists.Result != null && collectDynamicLists.Result.Any())
            {
                foreach (var dynamicList in collectDynamicLists.Result)
                {
                    try
                    {
                        dynamicListCodes.Add(dynamicList.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for page {dynamicList.Name}");
                    }
                }
            }

            var compositeControlCodes = new List <CodeGenerableResult>();

            if (collectCompositeControls.Result != null && collectCompositeControls.Result.Any())
            {
                foreach (var control in collectCompositeControls.Result)
                {
                    try
                    {
                        compositeControlCodes.Add(control.GenerateCode());
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, $"Cannot generate code for composite code {control.Name}");
                    }
                }
            }

            var response = new GenerateCodeResponseModel();

            var stringBuilder = new StringBuilder();

            _ = stringBuilder.AppendLine("using System;");
            _ = stringBuilder.AppendLine("using System.Threading.Tasks;");
            _ = stringBuilder.AppendLine("using System.Collections.Generic;");
            _ = stringBuilder.AppendLine("namespace CustomVersion");
            _ = stringBuilder.AppendLine("{");
            _ = stringBuilder.AppendLine($"    public class {model.FileName} : LetPortal.Portal.IPortalVersion");
            _ = stringBuilder.AppendLine($"    {{");
            _ = stringBuilder.AppendLine($"        public string VersionNumber => \"{model.VersionNumber}\";");
            _ = stringBuilder.AppendLine($"        public Task Downgrade(LetPortal.Core.Versions.IVersionContext versionContext)");
            _ = stringBuilder.AppendLine($"        {{");
            foreach (var appCode in appCodes)
            {
                _ = stringBuilder.AppendLine(appCode.DeletingCode);
            }

            foreach (var databaseCode in databaseCodes)
            {
                _ = stringBuilder.AppendLine(databaseCode.DeletingCode);
            }

            foreach (var standardCode in standardCodes)
            {
                _ = stringBuilder.AppendLine(standardCode.DeletingCode);
            }

            foreach (var treeCode in treeCodes)
            {
                _ = stringBuilder.AppendLine(treeCode.DeletingCode);
            }

            foreach (var arrayCode in arrayCodes)
            {
                _ = stringBuilder.AppendLine(arrayCode.DeletingCode);
            }

            foreach (var dynamicListCode in dynamicListCodes)
            {
                _ = stringBuilder.AppendLine(dynamicListCode.DeletingCode);
            }

            foreach (var chartCode in chartCodes)
            {
                _ = stringBuilder.AppendLine(chartCode.DeletingCode);
            }

            foreach (var pageCode in pageCodes)
            {
                _ = stringBuilder.AppendLine(pageCode.DeletingCode);
            }

            foreach (var controlCode in compositeControlCodes)
            {
                _ = stringBuilder.AppendLine(controlCode.DeletingCode);
            }

            _ = stringBuilder.AppendLine($"            return System.Threading.Tasks.Task.CompletedTask;");
            _ = stringBuilder.AppendLine($"        }}");
            _ = stringBuilder.AppendLine($"        public Task Upgrade(LetPortal.Core.Versions.IVersionContext versionContext)");
            _ = stringBuilder.AppendLine($"        {{");
            foreach (var appCode in appCodes)
            {
                _ = stringBuilder.AppendLine(appCode.InsertingCode);
            }

            foreach (var databaseCode in databaseCodes)
            {
                _ = stringBuilder.AppendLine(databaseCode.InsertingCode);
            }

            foreach (var standardCode in standardCodes)
            {
                _ = stringBuilder.AppendLine(standardCode.InsertingCode);
            }

            foreach (var treeCode in treeCodes)
            {
                _ = stringBuilder.AppendLine(treeCode.InsertingCode);
            }

            foreach (var arrayCode in arrayCodes)
            {
                _ = stringBuilder.AppendLine(arrayCode.InsertingCode);
            }

            foreach (var dynamicListCode in dynamicListCodes)
            {
                _ = stringBuilder.AppendLine(dynamicListCode.InsertingCode);
            }

            foreach (var chartCode in chartCodes)
            {
                _ = stringBuilder.AppendLine(chartCode.InsertingCode);
            }

            foreach (var pageCode in pageCodes)
            {
                _ = stringBuilder.AppendLine(pageCode.InsertingCode);
            }

            foreach (var controlCode in compositeControlCodes)
            {
                _ = stringBuilder.AppendLine(controlCode.InsertingCode);
            }
            _ = stringBuilder.AppendLine($"            return System.Threading.Tasks.Task.CompletedTask;");
            _ = stringBuilder.AppendLine($"        }}");
            _ = stringBuilder.AppendLine($"    }}");
            _ = stringBuilder.AppendLine("}");
            response.Content  = stringBuilder.ToString();
            response.FileName = model.FileName + ".cs";
            return(response);
        }
Пример #9
0
 public void HandleValidation(ValidationException ex, IDeployEvents callback)
 {
     _logger.Error("Validation exception is catched", ex);
     HandleException(ex);
 }