private void CreateStreamAnalyticsJobs( AzurePrepInputs azurePrepIn, AzurePrepOutputs azurePrepOut ) { string resourceGroupName = SelectResourceGroup( azurePrepIn ); string path = Path.GetDirectoryName( System.Reflection.Assembly.GetEntryAssembly( ).Location ); path += "\\..\\..\\..\\..\\StreamAnalyticsQueries"; foreach( string filename in Directory.GetFiles( path ) ) { string extension = Path.GetExtension( filename ); if( extension != null && extension.Contains( "sql" ) ) { string nameWithoutExtension = Path.GetFileNameWithoutExtension( filename ); EventHubDescription ehOutput = ( filename.ToLower( ).Contains( "aggregates" ) || azurePrepOut.ehAlerts == null ) ? azurePrepOut.ehDevices : azurePrepOut.ehAlerts; if( ehOutput == null ) { _ConsoleBuffer.Add( string.Format( " Skip creating {0} Stream Analytics job because there is no output Event Hub...", nameWithoutExtension ) ); continue; } string queryFilename = filename; ConsoleHelper.AskAndPerformAction( "Do you want to create " + nameWithoutExtension + " job?", "Are you sure you want to create " + nameWithoutExtension + " job?", "Are you sure you do not want to create " + nameWithoutExtension + " job?", ( ) => { string query = File.ReadAllText( queryFilename ); _ConsoleBuffer.Add( string.Format( "Creating {0} Stream Analytics job...", nameWithoutExtension ) ); CreateStreamAnalyticsJob( nameWithoutExtension, query, resourceGroupName, azurePrepIn, azurePrepOut.ehDevices, ehOutput ); }, _ConsoleBuffer ); } } }
private AzurePrepOutputs CreateEventHub( AzurePrepInputs inputs ) { AzurePrepOutputs result = new AzurePrepOutputs { SBNamespace = inputs.SBNamespace }; // Create Namespace var sbMgmt = new ServiceBusManagementClient( inputs.Credentials ); ServiceBusNamespaceResponse nsResponse = null; _ConsoleBuffer.Add( string.Format( "Creating Service Bus namespace {0} in location {1}", inputs.SBNamespace, inputs.Location ) ); try { // There is (currently) no clean error code returned when the namespace already exists // Check if it does nsResponse = sbMgmt.Namespaces.Create( inputs.SBNamespace, inputs.Location ); _ConsoleBuffer.Add( string.Format( "Service Bus namespace {0} created.", inputs.SBNamespace ) ); } catch ( Exception ) { nsResponse = null; _ConsoleBuffer.Add( string.Format( "Service Bus namespace {0} already existed.", inputs.SBNamespace ) ); } int triesCount = 0; // Wait until the namespace is active while( nsResponse == null || nsResponse.Namespace.Status != "Active" ) { nsResponse = sbMgmt.Namespaces.Get( inputs.SBNamespace ); if( nsResponse.Namespace.Status == "Active" ) { break; } triesCount += 1; if( triesCount % 10 == 0 ) { _ConsoleBuffer.Add( "Please note that activation could last about an hour if namespace with the same name prefix was deleted recently..." ); } else { _ConsoleBuffer.Add( string.Format( "Namespace {0} in state {1}. Waiting...", inputs.SBNamespace, nsResponse.Namespace.Status ) ); } System.Threading.Thread.Sleep( 5000 ); } // Get the namespace connection string var nsDescription = sbMgmt.Namespaces.GetNamespaceDescription( inputs.SBNamespace ); result.nsConnectionString = nsDescription.NamespaceDescriptions.First( ( d ) => String.Equals( d.AuthorizationType, "SharedAccessAuthorization" ) ).ConnectionString; // Create EHs + device keys + consumer keys (WebSite*) var nsManager = NamespaceManager.CreateFromConnectionString( result.nsConnectionString ); var ehDescriptionDevices = new EventHubDescription( inputs.EventHubNameDevices ) { PartitionCount = 8, }; ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "D1", new List<AccessRights> { AccessRights.Send } ) ); ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "D2", new List<AccessRights> { AccessRights.Send } ) ); ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "D3", new List<AccessRights> { AccessRights.Send } ) ); ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "D4", new List<AccessRights> { AccessRights.Send } ) ); ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "WebSite", new List<AccessRights> { AccessRights.Manage, AccessRights.Listen, AccessRights.Send } ) ); ehDescriptionDevices.Authorization.Add( new SharedAccessAuthorizationRule( "StreamingAnalytics", new List<AccessRights> { AccessRights.Manage, AccessRights.Listen, AccessRights.Send } ) ); _ConsoleBuffer.Add( string.Format( "Creating Event Hub {0}...", inputs.EventHubNameDevices ) ); result.ehDevices = null; do { try { result.ehDevices = nsManager.CreateEventHubIfNotExists( ehDescriptionDevices ); } catch ( UnauthorizedAccessException ) { _ConsoleBuffer.Add( "Service Bus connection string not valid yet. Waiting..." ); System.Threading.Thread.Sleep( 5000 ); } } while ( result.ehDevices == null ); ConsoleHelper.AskAndPerformAction( "Do you want to create " + inputs.EventHubNameAlerts + " Event Hub?", "Are you sure you want to create " + inputs.EventHubNameAlerts + " Event Hub?", "Are you sure you do not want to create " + inputs.EventHubNameAlerts + " Event Hub?", ( ) => { var ehDescriptionAlerts = new EventHubDescription( inputs.EventHubNameAlerts ) { PartitionCount = 8, }; ehDescriptionAlerts.Authorization.Add( new SharedAccessAuthorizationRule( "WebSite", new List<AccessRights> { AccessRights.Manage, AccessRights.Listen, AccessRights.Send } ) ); ehDescriptionAlerts.Authorization.Add( new SharedAccessAuthorizationRule( "StreamingAnalytics", new List<AccessRights> { AccessRights.Manage, AccessRights.Listen, AccessRights.Send } ) ); _ConsoleBuffer.Add( string.Format( "Creating Event Hub {0}...", inputs.EventHubNameAlerts ) ); result.ehAlerts = null; do { try { result.ehAlerts = nsManager.CreateEventHubIfNotExists( ehDescriptionAlerts ); } catch ( UnauthorizedAccessException ) { _ConsoleBuffer.Add( "Service Bus connection string not valid yet. Waiting..." ); System.Threading.Thread.Sleep( 5000 ); } } while ( result.ehAlerts == null ); }, _ConsoleBuffer ); // Create Storage Account for Event Hub Processor var stgMgmt = new StorageManagementClient( inputs.Credentials ); try { _ConsoleBuffer.Add( string.Format( "Creating Storage Account {0} in location {1}...", inputs.StorageAccountName, inputs.Location ) ); var resultStg = stgMgmt.StorageAccounts.Create( new StorageAccountCreateParameters { Name = inputs.StorageAccountName.ToLowerInvariant(), Location = inputs.Location, AccountType = "Standard_LRS" } ); if( resultStg.StatusCode != System.Net.HttpStatusCode.OK ) { _ConsoleBuffer.Add( string.Format( "Error creating storage account {0} in Location {1}: {2}", inputs.StorageAccountName, inputs.Location, resultStg.StatusCode ) ); return null; } } catch( CloudException ce ) { if( String.Equals( ce.Error.Code, "ConflictError", StringComparison.InvariantCultureIgnoreCase ) ) { _ConsoleBuffer.Add( string.Format( "Storage account {0} already existed.", inputs.StorageAccountName ) ); } else { throw; } } return result; }