Ejemplo n.º 1
0
        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 );
                }
            }
        }
Ejemplo n.º 2
0
        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;
        }