/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceReplicaListener> CreateServiceReplicaListeners() { return(new ServiceReplicaListener[] { new ServiceReplicaListener(serviceContext => new KestrelCommunicationListener(serviceContext, (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <HttpClient>(new HttpClient()) .AddSingleton <StatefulServiceContext>(serviceContext) .AddSingleton <OrderBook>(this) .AddSingleton <ITelemetryInitializer>(sp => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) ) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseReverseProxyIntegration) .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener( serviceContext => new KestrelCommunicationListener( serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}, PID: {Process.GetCurrentProcess().Id}, InstrumentationKey: {Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY")}"); return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <HttpClient>(new HttpClient()) .AddSingleton <FabricClient>(new FabricClient()) .AddSingleton <StatelessServiceContext>(serviceContext) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel(options => { var port = serviceContext.CodePackageActivationContext.GetEndpoint("ServiceEndpoint").Port; options.Listen(IPAddress.IPv6Any, port, listenOptions => { listenOptions.UseHttps(CertificateConfiguration.GetCertificate()); listenOptions.NoDelay = true; }); }) .ConfigureServices( services => services .AddSingleton <StatelessServiceContext>(serviceContext) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule()) .AddSingleton <ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseApplicationInsights() .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener( serviceContext => new KestrelCommunicationListener( serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <HttpClient>(new HttpClient()) .AddSingleton <FabricClient>(new FabricClient()) .AddSingleton <StatelessServiceContext>(serviceContext) .AddSingleton <ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule()) .AddSingleton <ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule()) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "internal", (url, listener) => { return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton(serviceContext) .AddSingleton <ITelemetryInitializer>((serviceProvider) => new FabricTelemetryInitializer()) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule()) .AddSingleton <ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule()) .AddSingleton <IActorProxyFactory>((sp) => new CorrelatingActorProxyFactory(serviceContext, callbackClient => new FabricTransportActorRemotingClientFactory(callbackClient))) .AddSingleton <FabricClient>() .AddTransient <IPartitionProxy, PartitionProxy>() .AddTransient <IPoolProxy, PoolProxy>() ) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseReverseProxyIntegration) .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceReplicaListener> CreateServiceReplicaListeners() { return(new ServiceReplicaListener[] { new ServiceReplicaListener( serviceContext => new KestrelCommunicationListener( serviceContext, (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <IReliableStateManager>(this.StateManager) .AddSingleton <StatefulServiceContext>(serviceContext) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <ITelemetryModule>((serviceProvider) => CreateEventSourceTelemetryModule())) .UseContentRoot(Directory.GetCurrentDirectory()) .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) .UseStartup <Startup>() .UseApplicationInsights() .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <StatelessServiceContext>(serviceContext) .AddScoped <IUtility, Utility>() .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseUnityServiceProvider() .UseStartup <Startup>() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
public static IServiceCollection AddApplicationInsightsServiceFabricEnricher(this IServiceCollection services, ServiceContext context) { services.AddSingleton <ITelemetryInitializer>( (serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(context)); return(services); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); //Pull the ApplicationInsightsID from config var config = serviceContext.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var applicationInsightsID = config.Settings.Sections["Diagnostics"].Parameters["ApplicationInsightsID"].Value; return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton <StatelessServiceContext>(serviceContext) //Add Application Insights for AspNet Core .AddApplicationInsightsTelemetry(applicationInsightsID) //Add telemetry extensions for service farbic & remoting tracking .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule()) .AddSingleton <ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule()) ) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { PlatformEventSource.GetInstance().ServiceMessage(serviceContext, $"Starting WebListener on {url}"); return new WebHostBuilder() .UseKestrel(opt => opt.AddServerHeader = false) .ConfigureServices(services => services .AddSingleton(serviceContext.CodePackageActivationContext) .AddSingleton(serviceContext.ServiceName) .AddSingleton <ITelemetryInitializer>(provider => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
protected override IEnumerable <ServiceReplicaListener> CreateServiceReplicaListeners() { return(new ServiceReplicaListener[1] { new ServiceReplicaListener( context => new WebListenerCommunicationListener( context, "ServiceEndpoint", (url, listener) => { // The idea is to create a listening port for each instance // This application will never be called - the only purpose of this listener is url += $"/eventsprocessor/router/{ServiceUniqueId}"; ServiceEventSource.Current.Message("Router Service Initialized on " + url + " - Dummy url not to be used"); return new WebHostBuilder() .UseWebListener() .ConfigureServices( services => services .AddSingleton <StatefulServiceContext>(this.Context) .AddSingleton <IReliableStateManager>(this.StateManager) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(context))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) .UseStartup <Startup>() .UseApplicationInsights() .UseUrls(url) .Build(); }) ) }); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureAppConfiguration((builderContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); }) .ConfigureServices( (context, services) => services .AddSingleton <StatelessServiceContext>(serviceContext) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton(context.Configuration) ) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); })) }); }
/// <summary> /// Optional override to create listeners (e.g., TCP, HTTP) for this service replica to handle client or user requests. /// </summary> /// <returns>A collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { FabricTelemetryInitializerExtension.SetServiceCallContext(this.Context); return(new ServiceInstanceListener[1] { new ServiceInstanceListener(context => new FabricTransportServiceRemotingListener(context, new CorrelatingRemotingMessageHandler(context, this))) }); }
public AppInsightsLogAppender(AppInsightsAppenderConfig config, ServiceContext serviceContext) { _config = config; var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(serviceContext); this._telemetryClient = new TelemetryClient(telemetryConfig); }
public StatelessBackendService(StatelessServiceContext context) : base(context) { var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(context); telemetryConfig.InstrumentationKey = System.Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY"); this.telemetryClient = new TelemetryClient(telemetryConfig); }
/// <summary> /// Initializes a new instance of ActorBackendService /// </summary> /// <param name="actorService">The Microsoft.ServiceFabric.Actors.Runtime.ActorService that will host this actor instance.</param> /// <param name="actorId">The Microsoft.ServiceFabric.Actors.ActorId for this actor instance.</param> public MyActor(ActorService actorService, ActorId actorId) : base(actorService, actorId) { var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(actorService.Context); telemetryConfig.InstrumentationKey = System.Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY"); telemetryClient = new TelemetryClient(TelemetryConfiguration.Active); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { // Set context for Application Insights FabricTelemetryInitializerExtension.SetServiceCallContext(this.Context); return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "ServiceEndpoint")) }); }
public StatefulBackendService(StatefulServiceContext context) : base(context) { var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(context); var config = context.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var appInsights = config.Settings.Sections["ApplicationInsights"]; telemetryConfig.InstrumentationKey = appInsights.Parameters["InstrumentationKey"].Value; }
public ActorBackendRemotingV1Service( StatefulServiceContext context, ActorTypeInformation actorTypeInfo, Func <ActorService, ActorId, ActorBase> actorFactory = null, Func <ActorBase, IActorStateProvider, IActorStateManager> stateManagerFactory = null, IActorStateProvider stateProvider = null, ActorServiceSettings settings = null) : base(context, actorTypeInfo, actorFactory, stateManagerFactory, stateProvider, settings) { FabricTelemetryInitializerExtension.SetServiceCallContext(context); }
/// <summary> /// Initializes a new instance of ActorBackendService /// </summary> /// <param name="actorService">The Microsoft.ServiceFabric.Actors.Runtime.ActorService that will host this actor instance.</param> /// <param name="actorId">The Microsoft.ServiceFabric.Actors.ActorId for this actor instance.</param> public MyActor(ActorService actorService, ActorId actorId) : base(actorService, actorId) { var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(actorService.Context); var config = actorService.Context.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var appInsights = config.Settings.Sections["ApplicationInsights"]; telemetryConfig.InstrumentationKey = appInsights.Parameters["InstrumentationKey"].Value; telemetryClient = new TelemetryClient(TelemetryConfiguration.Active); }
protected AiTracedStatelessService(StatelessServiceContext serviceContext, string instrumentationKey) : base(serviceContext) { TelemetryConfiguration.Active.TelemetryInitializers.Add( FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(Context) ); TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey; TelemetryConfiguration.Active.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); new DependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingRequestTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingDependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); }
public static void AddAppInsights(this IServiceCollection services, IConfiguration configuration, ServiceContext serviceContext) { services.AddApplicationInsightsTelemetry(configuration); var performanceCounterService = services.FirstOrDefault(t => t.ImplementationType == typeof(PerformanceCollectorModule)); if (performanceCounterService != null) { services.Remove(performanceCounterService); } services.AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureAppConfiguration((builderContext, config) => { config.AddJsonFile(serviceContext, "appsettings.json") .AddJsonFile(serviceContext, $"appsettings.{builderContext.HostingEnvironment.EnvironmentName}.json") .AddEnvironmentVariables(); var builtConfig = config.Build(); if (builtConfig["AzureKeyVault:KeyVaultUri"] is var keyVaultUri && !string.IsNullOrWhiteSpace(keyVaultUri)) { config.AddAzureKeyVault(keyVaultUri); } }) .ConfigureServices( (context, services) => services .AddSingleton(new HttpClient()) .AddSingleton(new FabricClient()) .AddSingleton(serviceContext) .AddSingleton(context.Configuration) .AddSingleton <IQueueClient>(c => new QueueClient(new ServiceBusConnectionStringBuilder(context.Configuration["ServiceBusQueue:SendConnectionString"])) ) .AddSingleton <IDeliveryRequestRepository, DeliveryRequestRepository>() .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .ConfigureLogging((hostingContext, logging) => { logging.AddApplicationInsights(hostingContext.Configuration["ApplicationInsights:InstrumentationKey"]); }) .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build(); }))
public StatelessBackend(StatelessServiceContext context) : base(context) { var instrumentationKey = "<app insights instrumentation key>"; TelemetryConfiguration.Active.TelemetryInitializers.Add( FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(this.Context) ); TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey; TelemetryConfiguration.Active.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); new DependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingRequestTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingDependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); }
public Gateway(StatelessServiceContext context) : base(context) { var client = new FabricClient(); var communicationClientFactory = new RestCommunicationClientFactory <Mealservice>(new ServicePartitionResolver(() => client)); var partitionClient = new RestServicePartitionClient <Mealservice>(communicationClientFactory, new Uri("fabric:/Ksj.Mealplan/Service"), new ServicePartitionKey(long.MinValue), TargetReplicaSelector.RandomReplica); var telemetryConfig = TelemetryConfiguration.Active; FabricTelemetryInitializerExtension.SetServiceCallContext(context); var config = context.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var appInsights = config.Settings.Sections["ApplicationInsights"]; telemetryConfig.InstrumentationKey = appInsights.Parameters["InstrumentationKey"].Value; _configurationSettings = GetServiceConfiguration(); _container = new ServiceContainer(); _container.RegisterInstance <IRestServicePartitionClient <Mealservice> >(partitionClient); }
protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners() { FabricTelemetryInitializerExtension.SetServiceCallContext(this.Context); return(new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new HttpSysCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { url = $"{url}/api"; ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting HttpSys on {url}"); var host = GetWebHostBuilder(serviceContext, url, listener) .UseStartup <WriteServiceStartup>() .UseApplicationInsights() .Build(); return host; })) }); }
private static void Main() { try { ServiceRuntime.RegisterServiceAsync("MyStatelessType", context => { // Pull the configuration from the config package. var cfg = context.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var appInsightsID = cfg.Settings.Sections["Diagnostics"].Parameters["ApplicationInsightsID"].Value; // Create the telemetry configuration var config = TelemetryConfiguration.CreateDefault(); config.InstrumentationKey = appInsightsID; if (System.Diagnostics.Debugger.IsAttached) { config.TelemetryChannel.DeveloperMode = true; } // Add initializes for the basics config.TelemetryInitializers.Add(new CodePackageVersionTelemetryInitializer()); config.TelemetryInitializers.Add(FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(context)); new AzureInstanceMetadataTelemetryModule().Initialize(config); new ServiceRemotingDependencyTrackingTelemetryModule().Initialize(config); new ServiceRemotingRequestTrackingTelemetryModule().Initialize(config); // Pass the configuration for use // Note this could benefit from Dependency Injection but this is not setup by default so to keep the example // this is not used. return(new MyStateless(context, new Microsoft.ApplicationInsights.TelemetryClient(config))); }).GetAwaiter().GetResult(); ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MyStateless).Name); // Prevents this host process from terminating so services keep running. Thread.Sleep(Timeout.Infinite); } catch (Exception e) { ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString()); throw; } }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceReplicaListener> CreateServiceReplicaListeners() { return(new ServiceReplicaListener[] { new ServiceReplicaListener(serviceContext => new KestrelCommunicationListener(serviceContext, (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .ConfigureAppConfiguration((builder, config) => { config.AddJsonFile(serviceContext, "appsettings.json") .AddJsonFile(serviceContext, $"appsettings.{builder.HostingEnvironment.EnvironmentName}.json") .AddEnvironmentVariables(); var builtConfig = config.Build(); if (builtConfig["AzureKeyVault:KeyVaultUri"] is var keyVaultUri && !string.IsNullOrWhiteSpace(keyVaultUri)) { config.AddAzureKeyVault(keyVaultUri); } }) .ConfigureServices( services => services .AddSingleton <StatefulServiceContext>(serviceContext) .AddSingleton <IReliableStateManager>(this.StateManager) .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <IDeliveryRepository, DeliveryRepository>()) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .ConfigureLogging((hostingContext, logging) => { logging.AddApplicationInsights(hostingContext.Configuration["ApplicationInsights:InstrumentationKey"]); }) .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) .UseUrls(url) .Build(); }))
public ActorBackendService( StatefulServiceContext context, ActorTypeInformation actorTypeInfo, Func <ActorService, ActorId, ActorBase> actorFactory = null, Func <ActorBase, IActorStateProvider, IActorStateManager> stateManagerFactory = null, IActorStateProvider stateProvider = null, ActorServiceSettings settings = null) : base(context, actorTypeInfo, actorFactory, stateManagerFactory, stateProvider, settings) { var instrumentationKey = "<app insights instrumentation key>"; TelemetryConfiguration.Active.TelemetryInitializers.Add( FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(this.Context) ); TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey; TelemetryConfiguration.Active.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); new DependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingRequestTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); new ServiceRemotingDependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); }
/// <summary> /// Optional override to create listeners (like tcp, http) for this service instance. /// </summary> /// <returns>The collection of listeners.</returns> protected override IEnumerable <ServiceReplicaListener> CreateServiceReplicaListeners() { return(new ServiceReplicaListener[] { new ServiceReplicaListener(serviceContext => new KestrelCommunicationListener(serviceContext, (url, listener) => { ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}"); return new WebHostBuilder() .UseKestrel() .UseCommonConfiguration() .ConfigureAppConfiguration(config => { //TODO detect when MSI is available and use that //webBuilder.ConfigureKeyvaultMSI() var builtConfig = config.Build(); //TODO: these should be constants that map to environment variable config config.ConfigureKeyvaultAppRegistration($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/", builtConfig["Secret"], builtConfig["AzureADApplicationId"]); //config.ConfigureKeyvaultMSI($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/", // builtConfig["AzureADApplicationId"]); }) .ConfigureServices( services => services .AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) .AddSingleton <StatefulServiceContext>(serviceContext) .AddSingleton <IReliableStateManager>(this.StateManager)) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) .UseUrls(url) .Build(); })) }); }