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; }
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")})"; }
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> }
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); } }
/// <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); }
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)); } } }
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"); }); }
/// <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); }
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(); } } } }
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); } }
public static void Main(string[] args) { EnvironmentUtilities.LoadEnvironmentFromFile(); CreateWebHostBuilder(args).Build().Run(); }