Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
91a7546
Merge pull request #1535 from Particular/master
boblangley Dec 12, 2018
fe6b454
Do not read from settings file if returning null anyway
boblangley Dec 13, 2018
f2e1048
Merge pull request #1537 from Particular/reorder-settings-read
SzymonPobiega Dec 14, 2018
eb9eb77
Merge pull request #1540 from Particular/master
danielmarbach Dec 18, 2018
a5f8d9c
Upgrade ASB 9.1
danielmarbach Dec 18, 2018
d508fa5
Enable the migration mode
danielmarbach Dec 18, 2018
9a3f96d
Upgrade transport latest
danielmarbach Dec 18, 2018
712a82c
Merge pull request #1541 from Particular/upgrade-asb
SeanFeldman Dec 19, 2018
1f308a3
Bump particular approvals
danielmarbach Dec 19, 2018
b863740
Switch to naming strategy
danielmarbach Dec 19, 2018
b669bd6
Enforce environment variable credentials for SQS
danielmarbach Dec 19, 2018
9c7037f
If credentials are provided for SQS always force loading from environ…
danielmarbach Dec 19, 2018
e2d1cf1
Fix async timer taskcanceled rethrow
danielmarbach Dec 19, 2018
78f8b23
Merge pull request #1542 from Particular/transport-upgrade
danielmarbach Dec 19, 2018
6e6bf8f
Make only region mandatory for SQS
danielmarbach Dec 19, 2018
0f61563
Replace Old with Legacy for ASB
danielmarbach Dec 19, 2018
a49de90
Fix logger for AuditIngestor
boblangley Dec 19, 2018
001e4cf
Merge pull request #1546 from Particular/fix-auditingestor-logger
danielmarbach Dec 19, 2018
0b9a897
Merge pull request #1543 from Particular/fix-asynctimer
boblangley Dec 19, 2018
92a7288
Approve transport name change
SeanFeldman Dec 19, 2018
9a097b6
Merge pull request #1544 from Particular/monitoring-sqs-nonmandatory
danielmarbach Dec 20, 2018
db65450
Backward compatible transport names
danielmarbach Dec 20, 2018
43442d5
Merge pull request #1545 from Particular/transport-naming
danielmarbach Dec 20, 2018
4069916
Fix NewServiceControlUnattendedFile
danielmarbach Dec 20, 2018
d8b76bc
Update ServiceControl.Monitoring
danielmarbach Dec 20, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.SQS;
using NServiceBus;
using NServiceBus.AcceptanceTesting.Support;
using ServiceBus.Management.AcceptanceTests;
using ServiceControl.Transports.SQS;

public class ConfigureEndpointSQSTransport : ITransportIntegration
{
Expand All @@ -10,6 +15,15 @@ public Task Configure(string endpointName, EndpointConfiguration configuration,
configuration.UseSerialization<NewtonsoftSerializer>();

var transportConfig = configuration.UseTransport<SqsTransport>();
transportConfig.ClientFactory(CreateSQSClient);

S3BucketName = Environment.GetEnvironmentVariable(S3BucketEnvironmentVariableName);

if (!string.IsNullOrEmpty(S3BucketName))
{
var s3Configuration = transportConfig.S3(S3BucketName, S3Prefix);
s3Configuration.ClientFactory(CreateS3Client);
}

var routing = transportConfig.Routing();
foreach (var publisher in publisherMetadata.Publishers)
Expand All @@ -30,7 +44,24 @@ public Task Cleanup()

public string Name => "SQS";

public string TypeName => $"{typeof(ServiceControl.Transports.SQS.SQSTransportCustomization).AssemblyQualifiedName}";
public string TypeName => $"{typeof(SQSTransportCustomization).AssemblyQualifiedName}";

public string ConnectionString { get; set; }

static IAmazonSQS CreateSQSClient()
{
var credentials = new EnvironmentVariablesAWSCredentials();
return new AmazonSQSClient(credentials);
}

static IAmazonS3 CreateS3Client()
{
var credentials = new EnvironmentVariablesAWSCredentials();
return new AmazonS3Client(credentials);
}

const string S3Prefix = "test";

const string S3BucketEnvironmentVariableName = "NServiceBus_AmazonSQS_S3Bucket";
static string S3BucketName;
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNet.SignalR.Client" Version="2.2.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="NServiceBus.AcceptanceTesting" Version="7.1.5" />
<PackageReference Include="NServiceBus.AcceptanceTesting" Version="7.1.6" />
<PackageReference Include="NServiceBus.Heartbeat" Version="3.0.0" />
<PackageReference Include="NServiceBus.SagaAudit" Version="3.0.0" />
<PackageReference Include="NUnit" Version="3.11.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<ProjectReference Include="..\ServiceControl.Transports\ServiceControl.Transports.csproj" />

<PackageReference Include="Metrics.NET" Version="0.5.5" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.1.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public override void CustomizeEndpoint(EndpointConfiguration endpointConfig, Tra
var transport = endpointConfig.UseTransport<AzureServiceBusTransport>();
transport.Sanitization().UseStrategy<ValidateAndHashIfNeeded>();
var topology = transport.UseEndpointOrientedTopology();
topology.EnableMigrationToForwardingTopology();

foreach (var remoteInstance in remoteInstances)
{
foreach (var remoteType in remoteTypesToSubscribeTo)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="NServiceBus.Azure.Transports.WindowsAzureServiceBus" Version="9.0.3" />
<PackageReference Include="NServiceBus.Azure.Transports.WindowsAzureServiceBus" Version="9.1.0" />
<PackageReference Include="NServiceBus.CustomChecks" Version="3.0.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.1.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
<PackageReference Include="Particular.CodeRules" Version="0.2.1" PrivateAssets="All" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<ItemGroup>
<PackageReference Include="NServiceBus.CustomChecks" Version="3.0.0" />
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" Version="1.0.0-alpha0174" />
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" Version="1.0.0" />
<PackageReference Include="Particular.CodeRules" Version="0.2.1" PrivateAssets="All" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<ItemGroup>
<PackageReference Include="NServiceBus.Azure.Transports.WindowsAzureStorageQueues" Version="8.1.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.1.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
<PackageReference Include="Particular.CodeRules" Version="0.2.1" PrivateAssets="All" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
using System.Linq;
using System.Reflection;
using Amazon;
using Amazon.Runtime;
using Amazon.SQS;
using NServiceBus;
using NServiceBus.Configuration.AdvancedExtensibility;
using NServiceBus.Logging;
Expand Down Expand Up @@ -34,6 +36,9 @@ static void ConfigureTransport(TransportExtensions<SqsTransport> transport, Tran
{
PromoteEnvironmentVariableFromConnectionString(builder, "AccessKeyId", "AWS_ACCESS_KEY_ID");
PromoteEnvironmentVariableFromConnectionString(builder, "SecretAccessKey", "AWS_SECRET_ACCESS_KEY");

// if the user provided the access key and secret access key they should always be loaded from environment credentials
transport.ClientFactory(() => new AmazonSQSClient(new EnvironmentVariablesAWSCredentials()));
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="NServiceBus.AmazonSQS" Version="4.1.2" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.1.0" />
<PackageReference Include="NServiceBus.AmazonSQS" Version="4.2.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
<PackageReference Include="Particular.CodeRules" Version="0.2.1" PrivateAssets="All" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName=".NET Framework 4")]
namespace ServiceControlInstaller.Engine.Instances
{
public class TransportNames
public class static TransportNames
{
public const string AmazonSQS = "AmazonSQS";
public const string AzureServiceBus = "Azure Service Bus";
public const string AzureServiceBusEndpointOrientedTopology = "Azure Service Bus - Endpoint-oriented topology (Old)";
public const string AzureServiceBusForwardingTopology = "Azure Service Bus - Forwarding topology (Old)";
public const string AzureServiceBusEndpointOrientedTopology = "Azure Service Bus - Endpoint-oriented topology (Legacy)";
public const string AzureServiceBusEndpointOrientedTopologyOld = "Azure Service Bus - Endpoint-oriented topology (Old)";
public const string AzureServiceBusForwardingTopology = "Azure Service Bus - Forwarding topology (Legacy)";
public const string AzureServiceBusForwardingTopologyOld = "Azure Service Bus - Forwarding topology (Old)";
public const string AzureStorageQueue = "Azure Storage Queue";
public const string MSMQ = "MSMQ";
public const string RabbitMQConventionalRoutingTopology = "RabbitMQ - Conventional routing topology";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<PackageReference Include="NServiceBus.Testing" Version="7.0.0" />
<PackageReference Include="NUnit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.11.2" />
<PackageReference Include="Particular.Approvals" Version="0.1.0" />
<PackageReference Include="Particular.Approvals" Version="0.2.0" />
<PackageReference Include="PublicApiGenerator" Version="8.0.1" />
</ItemGroup>

Expand Down
39 changes: 22 additions & 17 deletions src/ServiceControl/Infrastructure/AsyncTimer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,31 +25,36 @@ void Start(Func<CancellationToken, Task<TimerJobExecutionResult>> callback, Time

task = Task.Run(async () =>
{
await Task.Delay(due, token).ConfigureAwait(false);
while (!token.IsCancellationRequested)
try
{
try
await Task.Delay(due, token).ConfigureAwait(false);

while (!token.IsCancellationRequested)
{
var result = await callback(token).ConfigureAwait(false);
if (result == TimerJobExecutionResult.DoNotContinueExecuting)
try
{
tokenSource.Cancel();
var result = await callback(token).ConfigureAwait(false);
if (result == TimerJobExecutionResult.DoNotContinueExecuting)
{
tokenSource.Cancel();
}
else if (result == TimerJobExecutionResult.ScheduleNextExecution)
{
await Task.Delay(interval, token).ConfigureAwait(false);
}
//Otherwise execute immediately
}
else if (result == TimerJobExecutionResult.ScheduleNextExecution)
catch (Exception ex)
{
await Task.Delay(interval, token).ConfigureAwait(false);
errorCallback(ex);
}
//Otherwise execute immediately
}
catch (OperationCanceledException)
{
// no-op
}
catch (Exception ex)
{
errorCallback(ex);
}
}
catch (OperationCanceledException)
{
// no-op
}

}, CancellationToken.None);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using global::Nancy.ModelBinding;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using ServiceControl.Infrastructure.SignalR;

class JsonNetBodyDeserializer : IBodyDeserializer
Expand All @@ -24,8 +25,8 @@ public JsonNetBodyDeserializer()
ContractResolver = new UnderscoreMappingResolver(),
Converters =
{
new IsoDateTimeConverter {DateTimeStyles = DateTimeStyles.RoundtripKind},
new StringEnumConverter {CamelCaseText = true}
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.RoundtripKind },
new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() }
}
};
serializer = JsonSerializer.Create(serializerSettings);
Expand Down
3 changes: 2 additions & 1 deletion src/ServiceControl/Infrastructure/Nancy/JsonNetSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using global::Nancy.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using ServiceControl.Infrastructure.SignalR;

class JsonNetSerializer : ISerializer
Expand Down Expand Up @@ -93,7 +94,7 @@ public static JsonSerializerSettings CreateDefault()
},
new StringEnumConverter
{
CamelCaseText = true
NamingStrategy = new CamelCaseNamingStrategy()
}
}
};
Expand Down
14 changes: 7 additions & 7 deletions src/ServiceControl/Infrastructure/Settings/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -216,13 +216,13 @@ public TransportCustomization LoadTransportCustomization()

private string GetAuditLogQueue()
{
var value = SettingsReader<string>.Read("ServiceBus", "AuditLogQueue", null);

if (AuditQueue == null)
{
return null;
}


var value = SettingsReader<string>.Read("ServiceBus", "AuditLogQueue", null);

if (value == null)
{
logger.Info("No settings found for audit log queue to import, default name will be used");
Expand Down Expand Up @@ -275,14 +275,14 @@ private string GetErrorQueue()
}

private string GetErrorLogQueue()
{
var value = SettingsReader<string>.Read("ServiceBus", "ErrorLogQueue", null);

{
if (ErrorQueue == null)
{
return null;
}

var value = SettingsReader<string>.Read("ServiceBus", "ErrorLogQueue", null);

if (value == null)
{
logger.Info("No settings found for error log queue to import, default name will be used");
Expand Down Expand Up @@ -513,4 +513,4 @@ static string Subscope(string address)
const int ExpirationProcessBatchSizeMinimum = 10240;
const int MaxBodySizeToStoreDefault = 102400; //100 kb
}
}
}
12 changes: 6 additions & 6 deletions src/ServiceControl/Licensing/LicenseCheckFeature.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class LicenseCheckFeatureStartup : FeatureStartupTask
public LicenseCheckFeatureStartup(ActiveLicense activeLicense)
{
this.activeLicense = activeLicense;
ScheduleNextExecutionTask = Task.FromResult(TimerJobExecutionResult.ScheduleNextExecution);
}

protected override Task OnStart(IMessageSession session)
Expand All @@ -34,11 +35,8 @@ protected override Task OnStart(IMessageSession session)
timer = new AsyncTimer(_ =>
{
activeLicense.Refresh();
return Task.FromResult(TimerJobExecutionResult.ScheduleNextExecution);
}, due, due, ex =>
{
log.Error("Unhandled error while refreshing the license.", ex);
});
return ScheduleNextExecutionTask;
}, due, due, ex => { log.Error("Unhandled error while refreshing the license.", ex); });
return Task.FromResult(0);
}

Expand All @@ -47,8 +45,10 @@ protected override Task OnStop(IMessageSession session)
return timer.Stop();
}

static ILog log = LogManager.GetLogger<LicenseCheckFeature>();
ActiveLicense activeLicense;
AsyncTimer timer;

static ILog log = LogManager.GetLogger<LicenseCheckFeature>();
static Task<TimerJobExecutionResult> ScheduleNextExecutionTask;
}
}
4 changes: 2 additions & 2 deletions src/ServiceControl/Operations/AuditIngestor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ await messageForwarder.Forward(context, settings.AuditLogQueue)
AuditPersister auditPersister;
IForwardMessages messageForwarder;
Settings settings;
static ILog log = LogManager.GetLogger<ErrorIngestor>();
static ILog log = LogManager.GetLogger<AuditIngestor>();
}
}
}
2 changes: 1 addition & 1 deletion src/ServiceControl/ServiceControl.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<PackageReference Include="NServiceBus" Version="7.1.6" />
<PackageReference Include="NServiceBus.Autofac" Version="7.0.0" />
<PackageReference Include="NServiceBus.CustomChecks" Version="3.0.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.1.0" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
<PackageReference Include="NServiceBus.NLog" Version="3.0.0" />
<PackageReference Include="NServiceBus.Raw" Version="3.0.0" />
<PackageReference Include="Microsoft.Owin.Hosting" Version="3.0.1" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ public class MonitoringTransports
{
//INFO: Those types are used in the SCMU and in PS scripts. In both cases Match predicate is used to find a transport info.
// In the UI the matching is done based on the transport TypeName from app.config. In PS it's done based on human friendly names.
// As a result the Match predicate should evalute to true both for TypeName and human friendly name.
// As a result the Match predicate should evaluate to true both for TypeName and human friendly name.
// Matching separately on Name and TypeName would not be enough because we need to be backwards compatible.
// As a result Match is comparing to old/current names, old/current types.
new TransportInfo
{
Name = TransportNames.AmazonSQS,
ZipName = "AmazonSQS",
TypeName = "ServiceControl.Transports.AmazonSQS.ServiceControlSqsTransport, ServiceControl.Transports.AmazonSQS",
SampleConnectionString = "AccessKeyId=<ACCESSKEYID>;SecretAccessKey=<SECRETACCESSKEY>;Region=<REGION>;QueueNamePrefix=<prefix>",
Help = "'AccessKeyId', 'SecretAccessKey' and 'Region' are mandatory configurations.",
SampleConnectionString = "Region=<REGION>;QueueNamePrefix=<prefix>;AccessKeyId=<ACCESSKEYID>;SecretAccessKey=<SECRETACCESSKEY>",
Help = "'Region' is mandatory. Specify 'AccessKeyId' and 'SecretAccessKey' values to set the AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY environment variables if not using IAM roles or EC2 metadata.",
Matches = name => name.Equals(TransportNames.AmazonSQS, StringComparison.OrdinalIgnoreCase)
|| name.Equals("ServiceControl.Transports.AmazonSQS.ServiceControlSqsTransport, ServiceControl.Transports.AmazonSQS", StringComparison.OrdinalIgnoreCase)
|| name.Equals("NServiceBus.SqsTransport, NServiceBus.AmazonSQS", StringComparison.OrdinalIgnoreCase)
Expand All @@ -31,6 +31,7 @@ public class MonitoringTransports
TypeName = "ServiceControl.Transports.LegacyAzureServiceBus.EndpointOrientedTopologyAzureServiceBusTransport, ServiceControl.Transports.LegacyAzureServiceBus",
SampleConnectionString = "Endpoint=sb://[namespace].servicebus.windows.net; SharedSecretIssuer=<owner>;SharedSecretValue=<someSecret>",
Matches = name => name.Equals(TransportNames.AzureServiceBusEndpointOrientedTopology, StringComparison.OrdinalIgnoreCase)
|| name.Equals(TransportNames.AzureServiceBusEndpointOrientedTopologyOld, StringComparison.OrdinalIgnoreCase)
|| name.Equals("ServiceControl.Transports.LegacyAzureServiceBus.EndpointOrientedTopologyAzureServiceBusTransport, ServiceControl.Transports.LegacyAzureServiceBus", StringComparison.OrdinalIgnoreCase)
},
new TransportInfo
Expand All @@ -40,6 +41,7 @@ public class MonitoringTransports
TypeName = "ServiceControl.Transports.LegacyAzureServiceBus.ForwardingTopologyAzureServiceBusTransport, ServiceControl.Transports.LegacyAzureServiceBus",
SampleConnectionString = "Endpoint=sb://[namespace].servicebus.windows.net; SharedSecretIssuer=<owner>;SharedSecretValue=<someSecret>",
Matches = name => name.Equals(TransportNames.AzureServiceBusForwardingTopology, StringComparison.OrdinalIgnoreCase)
|| name.Equals(TransportNames.AzureServiceBusForwardingTopologyOld, StringComparison.OrdinalIgnoreCase)
|| name.Equals("AzureServiceBus", StringComparison.OrdinalIgnoreCase)
|| name.Equals("NServiceBus.AzureServiceBusTransport, NServiceBus.Azure.Transports.WindowsAzureServiceBus", StringComparison.OrdinalIgnoreCase)
|| name.Equals("ServiceControl.Transports.LegacyAzureServiceBus.ForwardingTopologyAzureServiceBusTransport, ServiceControl.Transports.LegacyAzureServiceBus", StringComparison.OrdinalIgnoreCase)
Expand Down
Loading