Exemplo n.º 1
0
        public Error(Exception exception, IOwinContext owinContext)
        {
            if (exception == null)
            {
                throw new ArgumentNullException(nameof(exception));
            }

            Exception = exception;
            var baseException = exception.GetBaseException();

            HostName = EnvironmentUtilities.GetMachineNameOrDefault();
            TypeName = baseException.GetType().FullName;
            Message  = baseException.Message;
            Source   = baseException.Source;
            Detail   = exception.ToString();
            User     = Thread.CurrentPrincipal.Identity.Name ?? string.Empty;
            Time     = DateTimeOffset.Now;

            StatusCode = owinContext.Response.StatusCode;

            var webUser = owinContext.Authentication.User;

            if (!string.IsNullOrEmpty(webUser?.Identity?.Name))
            {
                User = webUser.Identity.Name;
            }

            ServerEnvironment = owinContext.Environment.ToDictionary(pair => pair.Key, pair => pair.Value?.ToString() ?? string.Empty);
            Headers           = owinContext.Request.Headers.ToDictionary(pair => pair.Key, pair => pair.Value);
            Query             = owinContext.Request.Query.ToDictionary(pair => pair.Key, pair => pair.Value);
            Cookies           = owinContext.Request.Cookies.ToDictionary(pair => pair.Key, pair => pair.Value);
            ApplicationName   = AppDomain.CurrentDomain.FriendlyName;
        }
Exemplo n.º 2
0
        protected override async Task LoadContentsAsync(IOwinContext context)
        {
            // Get the page index and size parameters within their bounds.
            pageSize = Convert.ToInt32(context.Request.Query["size"], CultureInfo.InvariantCulture);
            pageSize = Math.Min(MaximumPageSize, Math.Max(0, pageSize));

            if (pageSize == 0)
            {
                pageSize = DefaultPageSize;
            }

            pageIndex = Convert.ToInt32(context.Request.Query["page"], CultureInfo.InvariantCulture);
            pageIndex = Math.Max(1, pageIndex) - 1;

            // Read the error records.
            errorLogEntries = await ErrorLog.GetErrorsAsync(pageIndex, pageSize);

            totalCount = ErrorLog.GetTotalErrorCount();

            // Set the title of the page.
            var hostName = EnvironmentUtilities.GetMachineNameOrDefault();

            PageTitle = hostName.Length > 0
                ? $"Error log for {ApplicationName} on {hostName} (Page #{(pageIndex + 1).ToString("N0")})"
                : $"Error log for {ApplicationName} (Page #{(pageIndex + 1).ToString("N0")})";
        }
Exemplo n.º 3
0
        private async Task RenderTitleAsync(XmlWriter writer)
        {
            await writer.WriteStartElementAsync("h1");

            await writer.WriteAttributeStringAsync("id", "PageTitle");

            await writer.WriteStringAsync("Error Log for ");

            await writer.WriteStartElementAsync("span");

            await writer.WriteAttributeStringAsync("id", "ApplicationName");

            await writer.WriteAttributeStringAsync("title", ApplicationName);

            await writer.WriteStringAsync(ApplicationName);

            var machineName = EnvironmentUtilities.GetMachineNameOrDefault();

            if (!string.IsNullOrEmpty(machineName?.Trim()))
            {
                await writer.WriteStringAsync(" on ");

                await writer.WriteStringAsync(machineName);
            }

            await writer.WriteEndElementAsync(); // </span>

            await writer.WriteEndElementAsync(); // </h1>
        }
Exemplo n.º 4
0
        public override async Task Invoke(IOwinContext context)
        {
            PathString subPath;

            context.Request.Path.StartsWithSegments(options.Path, out subPath);
            if (!subPath.StartsWithSegments(new PathString("/rss")))
            {
                await Next.Invoke(context);

                return;
            }

            const int pageSize        = 15;
            var       errorLogEntries = await errorLog.GetErrorsAsync(0, pageSize);

            var syndicationFeed = new SyndicationFeed();

            var hostName = EnvironmentUtilities.GetMachineNameOrDefault("Unknown Host");

            syndicationFeed.Title       = new TextSyndicationContent($"Error log of {errorLog.ApplicationName} on {hostName}.");
            syndicationFeed.Description = new TextSyndicationContent("Log of recent errors");
            syndicationFeed.Language    = "en-us";

            var uriAsString = context.Request.Uri.ToString();
            var baseUri     = new Uri(uriAsString.Remove(uriAsString.LastIndexOf("/rss", StringComparison.InvariantCulture)));

            syndicationFeed.Links.Add(SyndicationLink.CreateAlternateLink(baseUri));

            var items = new List <SyndicationItem>();

            foreach (var errorLogEntry in errorLogEntries)
            {
                var item = new SyndicationItem
                {
                    Title   = SyndicationContent.CreatePlaintextContent(errorLogEntry.Error.Message),
                    Content =
                        SyndicationContent.CreatePlaintextContent(
                            $"An error of type {errorLogEntry.Error.TypeName} occurred. {errorLogEntry.Error.Message}"),
                    PublishDate = errorLogEntry.Error.Time
                };
                item.Links.Add(SyndicationLink.CreateAlternateLink(new Uri(baseUri, $"/detail?id={errorLogEntry.Id}")));

                items.Add(item);
            }

            syndicationFeed.Items = items;

            context.Response.ContentType = "application/rss+xml";
            context.Response.StatusCode  = 200;

            using (var writer = XmlWriter.Create(context.Response.Body, SettingsUtility.XmlWriterSettings))
            {
                var formatter = new Rss20FeedFormatter(syndicationFeed);
                formatter.WriteTo(writer);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Adds Dolittle services
        /// </summary>
        /// <returns></returns>
        public static BootloaderResult AddDolittle(this IServiceCollection services, Action <IBootBuilder> builderDelegate)
        {
            var bootloader = Bootloader.Configure(_ => {
                if (EnvironmentUtilities.GetExecutionEnvironment() == Dolittle.Execution.Environment.Development)
                {
                    _ = _.Development();
                }
                _.SkipBootprocedures()
                .UseContainer <Container>();
                builderDelegate(_);
            });

            var bootloaderResult = bootloader.Start();

            AddMvcOptions(services, bootloaderResult.TypeFinder);

            return(bootloaderResult);
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{EnvironmentUtilities.GetEnvironmentName()}.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables()
                          .AddCommandLine(args);

            var config = builder.Build();
            BaseJobConfiguration configuration       = config.Get <BaseJobConfiguration>();
            CustomConfiguration  customConfiguration = config.Get <CustomConfiguration>();

            InitializationHelper.Initialize(configuration);
            var services = new ServiceCollection();

            services.AddOptions();
            services.Configure <CustomConfiguration>(config.GetSection(ConfigurationConstants.CustomConfigurationSectionName));
            services.AddSingleton <IElasticSearchConnectionProvider, ElasticSearchConnector>();
            var serviceProvider = services.BuildServiceProvider();

            IElasticSearchConnectionProvider elasticSearchProvider = serviceProvider.GetRequiredService <IElasticSearchConnectionProvider>();
            ElasticClient elasticClient = elasticSearchProvider.GetElasticClient(ElasticSearchIndexNameConstants.Productions);

            using (JMoviesEntities entities = new JMoviesEntities())
            {
                foreach (var production in entities.Production)
                {
                    long productionID = production.ID;
                    if (production is JMovies.IMDb.Entities.Movies.Movie)
                    {
                        using (JMoviesEntities innerEntities = new JMoviesEntities())
                        {
                            JMovies.IMDb.Entities.Movies.Movie movie = production as JMovies.IMDb.Entities.Movies.Movie;
                            movie.AKAs     = innerEntities.AKA.Where(e => e.ProductionID == productionID).ToArray();
                            movie.Genres   = innerEntities.Genre.Where(e => e.ProductionID == productionID).ToArray();
                            movie.Keywords = innerEntities.Keyword.Where(e => e.ProductionID == productionID).ToArray();
                            movie.TagLines = innerEntities.TagLine.Where(e => e.ProductionID == productionID).ToArray();
                        }
                    }
                    elasticClient.IndexDocument(MapProduction(production as IMDb.Entities.Movies.Movie));
                }
            }
        }
Exemplo n.º 7
0
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            ProxiesOptionsExtension proxiesOptionsExtension = optionsBuilder.Options?.FindExtension <ProxiesOptionsExtension>();

            if (proxiesOptionsExtension == null)
            {
                optionsBuilder.UseLazyLoadingProxies(false);
            }
            optionsBuilder.EnableDetailedErrors();
            if (!EnvironmentUtilities.IsProduction())
            {
                optionsBuilder.EnableSensitiveDataLogging();
            }

            optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable(ConfigurationConstants.ConnectionStringEnvironmentName), b =>
            {
                b.MigrationsAssembly("JMovies.App");
            });
        }
Exemplo n.º 8
0
        /// <summary>
        /// Adds Dolittle services
        /// </summary>
        /// <returns></returns>
        public static BootloaderResult AddDolittle(this IServiceCollection services, ILoggerFactory loggerFactory = null)
        {
            var bootloader = Bootloader.Configure(_ => {
                if (loggerFactory != null)
                {
                    _ = _.UseLoggerFactory(loggerFactory);
                }
                if (EnvironmentUtilities.GetExecutionEnvironment() == Dolittle.Execution.Environment.Development)
                {
                    _ = _.Development();
                }
                _.SkipBootprocedures()
                .UseContainer <Container>();
            });

            var bootloaderResult = bootloader.Start();

            AddMvcOptions(services, bootloaderResult.TypeFinder);

            return(bootloaderResult);
        }
Exemplo n.º 9
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{EnvironmentUtilities.GetEnvironmentName()}.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables()
                          .AddCommandLine(args);

            BaseJobConfiguration configuration = builder.Build().Get <BaseJobConfiguration>();

            InitializationHelper.Initialize(configuration);
            var services = new ServiceCollection();

            services.AddOptions();
            var serviceProvider = services.BuildServiceProvider();

            if (configuration.MaxRecordCount == default(int))
            {
                configuration.MaxRecordCount = ConfigurationConstants.PersisterRecordCountPerRun;
            }

            using (JMoviesEntities entities = new JMoviesEntities())
            {
                IIMDbDataProvider imdbDataProvider = new IMDbScraperDataProvider();
                if (configuration.StartRecordID == default(long) || configuration.WorkingType == PersisterWorkingTypeEnum.UpdateInternalData)
                {
                    configuration.StartRecordID = PersisterHelper.DetermineTheStartID(EntityType, DataSource, configuration.WorkingType, configuration.StartRecordID, entities);
                }
                long dataID = configuration.StartRecordID;
                for (int i = 0; i < configuration.MaxRecordCount; i++)
                {
                    if (i != 0)
                    {
                        dataID = PersisterHelper.GetNextID(EntityType, DataSource, configuration.WorkingType, entities, dataID);
                    }

                    if (dataID != default(long))
                    {
                        if (dataID > ConfigurationConstants.IMDBMaxID)
                        {
                            dataID = 1;
                        }

                        try
                        {
                            Production production = imdbDataProvider.GetProduction(dataID, ProductionDataFetchSettings);
                            DbContextOptionsBuilder <JMoviesEntities> dbContextOptionsBuilder = new DbContextOptionsBuilder <JMoviesEntities>();
                            dbContextOptionsBuilder.UseLazyLoadingProxies(true);
                            using (JMoviesEntities productionPersistanceEntities = new JMoviesEntities(dbContextOptionsBuilder.Options))
                            {
                                ProductionPersistanceManager.Persist(productionPersistanceEntities, production);
                            }
                            PersisterHelper.SavePersisterHistory(entities, dataID, DataSource, EntityType, string.Empty);
                        }
                        catch (Exception exception)
                        {
                            PersisterHelper.SavePersisterHistory(entities, dataID, DataSource, EntityType, exception.ToString());
                        }
                        entities.SaveChanges();
                    }
                }
            }
        }
Exemplo n.º 10
0
        public override async Task Invoke(IOwinContext context)
        {
            PathString subPath;

            context.Request.Path.StartsWithSegments(options.Path, out subPath);
            if (!subPath.StartsWithSegments(new PathString("/digestrss")))
            {
                await Next.Invoke(context);

                return;
            }

            var syndicationFeed = new SyndicationFeed();

            var hostName = EnvironmentUtilities.GetMachineNameOrDefault("Unknown Host");

            syndicationFeed.Title       = new TextSyndicationContent($"Daily digest of errors in {errorLog.ApplicationName} on {hostName}.");
            syndicationFeed.Description = new TextSyndicationContent("Daily digest of application errors");
            syndicationFeed.Language    = "en-us";

            var uriAsString = context.Request.Uri.ToString();
            var baseUri     = new Uri(uriAsString.Remove(uriAsString.LastIndexOf("/digestrss", StringComparison.InvariantCulture)));

            syndicationFeed.Links.Add(SyndicationLink.CreateAlternateLink(baseUri));

            var logEntries = await GetAllEntriesAsync();

            var groupBy = logEntries.GroupBy(
                entry => new DateTime(entry.Error.Time.Year, entry.Error.Time.Month, entry.Error.Time.Day));


            var itemList = new List <SyndicationItem>();

            foreach (var grouping in groupBy)
            {
                var syndicationItem = new SyndicationItem
                {
                    Title =
                        new TextSyndicationContent(
                            $"Digest for {grouping.Key.ToString("yyyy-MM-dd")} ({grouping.Key.ToLongDateString()})"),
                    PublishDate = grouping.Key,
                    Id          = grouping.Key.ToString("yyyy-MM-dd")
                };

                var builder = new StringBuilder();

                builder.AppendLine("<ul>");
                foreach (var errorLogEntry in grouping)
                {
                    builder.AppendLine("<li>");
                    builder.AppendLine($"{errorLogEntry.Error.TypeName}: <a href=\"{baseUri}/detail?id={errorLogEntry.Id}\">{errorLogEntry.Error.Message}</a>");
                    builder.AppendLine("</li>");
                }
                builder.AppendLine("</ul>");

                syndicationItem.Content = SyndicationContent.CreateHtmlContent(builder.ToString());

                itemList.Add(syndicationItem);
            }

            syndicationFeed.Items = itemList;

            context.Response.ContentType = "application/rss+xml";
            context.Response.StatusCode  = 200;

            using (var writer = XmlWriter.Create(context.Response.Body, SettingsUtility.XmlWriterSettings))
            {
                var formatter = new Rss20FeedFormatter(syndicationFeed);
                formatter.WriteTo(writer);
            }
        }
Exemplo n.º 11
0
        public static void Main(string[] args)
        {
            EnvironmentUtilities.LoadEnvironmentFromFile();

            CreateWebHostBuilder(args).Build().Run();
        }