Skip to content

Commit

Permalink
Setuo for Bot Emulator (Local)
Browse files Browse the repository at this point in the history
  • Loading branch information
mvelosop committed Feb 19, 2019
1 parent 0e5877c commit cdfae5b
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 41 deletions.
6 changes: 3 additions & 3 deletions src/Bots/Bot.Core.API/Bot.Core.API.bot
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
"appPassword": ""
},
{
"id": "3",
"type": "luis",
"name": "eShopAI-LUIS",
"version": "2.0",
"id": "3",
"appId": "<your-luis-app-id>",
"authoringKey": "<your-luis-authoring-key>",
"subscriptionKey": "<your-subscription-key>",
"region": "<your-luis-region>"
"region": "<your-luis-region>",
"version": "2.0",
}
],
"padlock": "",
Expand Down
5 changes: 5 additions & 0 deletions src/Bots/Bot.Core.API/Bot.Core.API.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
<PackageReference Include="Microsoft.Bot.Builder.Integration.AspNet.Core" Version="4.2.0" />
<PackageReference Include="Microsoft.Bot.Builder.TemplateManager" Version="4.2.0" />
<PackageReference Include="Microsoft.Bot.Configuration" Version="4.2.0" />
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.1.2" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Seq" Version="4.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
89 changes: 65 additions & 24 deletions src/Bots/Bot.Core.API/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,81 @@

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Serilog;
using System;
using System.IO;

namespace AspNetCore_SimplePrompt_Bot
{
public class Program
{
public static void Main(string[] args)
public static readonly string AppName = typeof(Program).Namespace;
public static readonly string ShortAppName = AppName;

public static int Main(string[] args)
{
BuildWebHost(args)
.Run();
var configuration = GetConfiguration();

Log.Logger = CreateSerilogLogger(configuration);

try
{
Log.Information("Configuring web host ({Application})...", AppName);
var host = BuildWebHost(configuration, args);

Log.Information("Starting web host ({Application})...", AppName);
host.Run();

return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Program terminated unexpectedly ({Application})!", AppName);
return 1;
}
finally
{
Log.CloseAndFlush();
}
}

public static IWebHost BuildWebHost(string[] args) =>
private static IWebHost BuildWebHost(IConfiguration configuration, string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
// Add Azure Logging
//logging.AddAzureWebAppDiagnostics();

// Other Loggers.
// There are other logging options available:
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1
logging.AddDebug();
logging.AddConsole();
})

// Application Insights.
// An alternative logging and metrics service for your application.
// https://azure.microsoft.com/en-us/services/application-insights/
// .UseApplicationInsights()
.CaptureStartupErrors(false)
.UseStartup<Startup>()
.UseConfiguration(configuration)
.UseSerilog()
.Build();

private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration)
{
var seqServerUrl = configuration["Serilog:SeqServerUrl"];

return new LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.WithProperty("Application", AppName)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl)
.ReadFrom.Configuration(configuration)
.CreateLogger();
}

private static IConfiguration GetConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{GetEnvironmentName()}.json", optional: true)
.AddEnvironmentVariables();

return builder.Build();
}

private static string GetEnvironmentName() => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";

private static bool IsDevelopment() => GetEnvironmentName() != "Production";

}
}
}
17 changes: 8 additions & 9 deletions src/Bots/Bot.Core.API/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,9 @@ public class Startup

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public Startup(IHostingEnvironment env)
public Startup(IHostingEnvironment env, IConfiguration configuration)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();

Configuration = builder.Build();
Configuration = configuration;
_isProduction = env.IsProduction();
}

Expand Down Expand Up @@ -153,10 +147,15 @@ public void ConfigureServices(IServiceCollection services)
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to create logger object for tracing.</param>
/// <remarks>See <see cref="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.1"/> for
/// more information how environments are detected.</remarks>
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions<AppSettings> options)
{
this.loggerFactory = loggerFactory;

var logger = loggerFactory.CreateLogger(nameof(Startup));

logger.LogInformation("----- Current configuration - AppSettings: {@AppSettigns}", options);
logger.LogInformation("----- Current configuration - Configuration: {@Configuration}", Configuration.AsEnumerable());

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
Expand Down
2 changes: 1 addition & 1 deletion src/Bots/Bot.Core.API/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"botFilePath": "%APPDATA%\\Microsoft\\UserSecrets\\38115a34-cef1-42d9-8395-dc53c3d17c36\\Bot.Core.API.bot",
"botFilePath": ".\\Bot.Core.API.bot",
"botFileSecret": ""
}
12 changes: 9 additions & 3 deletions src/Bots/Bot.Core.API/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
{
"botFilePath": "/app/Bot.Core.API.bot",
"botFileSecret": "",
"Logging": {
"LogLevel": {
"Default": "Trace"
"Serilog": {
"SeqServerUrl": null,
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.eShopOnContainers": "Information",
"System": "Warning"
}
}
},
"PurchaseUrl": "http://localhost:5202",
Expand Down
10 changes: 9 additions & 1 deletion src/Bots/Bot.Core.API/eShopBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Microsoft.eShopOnContainers.Bot.API.Services;
using Microsoft.eShopOnContainers.Bot.API.Services.Catalog;
using Microsoft.eShopOnContainers.Bot.API.Services.LUIS;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -49,12 +50,17 @@ public class eShopBot : IBot
{
private readonly DialogSet dialogs;
private readonly DomainPropertyAccessors eShopBotAccessors;
private readonly ILogger<eShopBot> _logger;

public eShopBot(DomainPropertyAccessors eShopBotAccessors, IDialogFactory dialogFactory)
public eShopBot(
DomainPropertyAccessors eShopBotAccessors,
IDialogFactory dialogFactory,
ILogger<eShopBot> logger)
{
this.dialogs = new DialogSet(eShopBotAccessors.DialogStateProperty);
this.dialogs.Add(dialogFactory.MainDialog);
this.eShopBotAccessors = eShopBotAccessors;
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}

/// <summary>
Expand All @@ -65,6 +71,8 @@ public eShopBot(DomainPropertyAccessors eShopBotAccessors, IDialogFactory dialog
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
_logger.LogInformation("----- eShopBot - Getting activity - Text: {Text} - Type: {ActivityType} ({@Activity})", turnContext.Activity.Text, turnContext.Activity.Type, turnContext.Activity);

var dc = await dialogs.CreateContextAsync(turnContext);
var result = await dc.ContinueDialogAsync();

Expand Down

0 comments on commit cdfae5b

Please sign in to comment.