private void DeleteResources( ClearResourcesInputs inputs ) { if( inputs.NamespaceExists ) { _ConsoleBuffer.Add( "Connecting to Service Bus..." ); ServiceBusManagementClient sbMgmt = new ServiceBusManagementClient( inputs.Credentials ); bool deleteNamespace = ConsoleHelper.AskAndPerformAction( "Do you want to delete whole namespace " + inputs.SBNamespace + " including all entities under it?", "Are you sure you want to delete namespace " + inputs.SBNamespace + "?", "Are you sure you do not want to delete namespace " + inputs.SBNamespace + "?", ( ) => { _ConsoleBuffer.Add( "Sending request to delete " + inputs.SBNamespace + " namespace..." ); AzureOperationResponse nsResponse = sbMgmt.Namespaces.Delete( inputs.SBNamespace ); if( nsResponse.StatusCode == HttpStatusCode.OK ) { _ConsoleBuffer.Add( inputs.SBNamespace + " namespace was deleted." ); } }, _ConsoleBuffer ); //if we did not delete whole Namespace, maybe we want to delete some of its Event Hubs? if( !deleteNamespace ) { _ConsoleBuffer.Add( "Reading list of Event Hubs from " + inputs.SBNamespace + " namespace..." ); var nsDescription = sbMgmt.Namespaces.GetNamespaceDescription( inputs.SBNamespace ); var nsConnectionString = nsDescription.NamespaceDescriptions.First( ( d ) => String.Equals( d.AuthorizationType, "SharedAccessAuthorization" ) ).ConnectionString; var nsManager = NamespaceManager.CreateFromConnectionString( nsConnectionString ); var eventHubs = nsManager.GetEventHubs( ); foreach( var eventHubDescription in eventHubs ) { EventHubDescription description = eventHubDescription; ConsoleHelper.AskAndPerformAction( "Do you want to delete Event Hub " + eventHubDescription.Path + " including all messages under it?", "Are you sure you want to delete Event Hub " + eventHubDescription.Path + "?", "Are you sure you do not want to delete Event Hub " + eventHubDescription.Path + "?", ( ) => { _ConsoleBuffer.Add( "Sending request to delete " + description.Path + " Event Hub..." ); nsManager.DeleteEventHub( description.Path ); _ConsoleBuffer.Add( "Request to delete " + description.Path + " Event Hub was accepted." ); }, _ConsoleBuffer ); } } } //Deleting Storage _ConsoleBuffer.Add( "Reading list of Storage Accounts..." ); StorageManagementClient stgMgmt = new StorageManagementClient( inputs.Credentials ); HashSet<string> storageAccounts = new HashSet<string>( ); foreach( var storageAccount in stgMgmt.StorageAccounts.List( ) ) { storageAccounts.Add( storageAccount.Name ); } int deletedCount = 0; if( storageAccounts.Contains( inputs.StorageAccountName ) ) { ConsoleHelper.AskAndPerformAction( "Do you want to delete " + inputs.StorageAccountName + " storage account?", "Are you sure you want to delete " + inputs.StorageAccountName + " storage account?", "Are you sure you do not want to delete " + inputs.StorageAccountName + " storage account?", ( ) => { _ConsoleBuffer.Add( "Sending request to delete " + inputs.StorageAccountName + " Storage account..." ); AzureOperationResponse resultStg = stgMgmt.StorageAccounts.Delete( inputs.StorageAccountName ); deletedCount += 1; if( resultStg.StatusCode == System.Net.HttpStatusCode.OK ) { _ConsoleBuffer.Add( "Storage account " + inputs.StorageAccountName + " was deleted." ); } }, _ConsoleBuffer ); } if( deletedCount == 0 ) { _ConsoleBuffer.Add( "No related Storage account was detected." ); } //Deleting Stream Analytics jobs _ConsoleBuffer.Add( "Reading list of Stream Analytics jobs..." ); StreamAnalyticsManagementClient saMgmt = new StreamAnalyticsManagementClient( inputs.Credentials ); JobListResponse jobListResponse = saMgmt.StreamingJobs.ListJobsInSubscription( new JobListParameters { PropertiesToExpand = string.Empty } ); deletedCount = 0; foreach( var job in jobListResponse.Value ) { if( job.Name.StartsWith( inputs.NamePrefix ) ) { Job jobToAsk = job; ConsoleHelper.AskAndPerformAction( "Do you want to delete Stream Analytics job " + job.Name + "?", "Are you sure you want to delete Stream Analytics job " + job.Name + "?", "Are you sure you do not want to delete namespace " + job.Name + "?", ( ) => { //we need to figure out wat resourceGroup this job belongs to //--// const string resourceGroupPath = "/resourceGroups/"; const string providersPath = "/providers/"; int resourceGroupPathIndex = jobToAsk.Id.IndexOf( resourceGroupPath, System.StringComparison.Ordinal ); int providersPathIndex = jobToAsk.Id.IndexOf( providersPath, System.StringComparison.Ordinal ); int resourceGroupIdStartIndex = resourceGroupPathIndex + resourceGroupPath.Length; string resourceGroup = jobToAsk.Id.Substring( resourceGroupIdStartIndex, providersPathIndex - resourceGroupIdStartIndex ); //--// deletedCount += 1; _ConsoleBuffer.Add( "Sending request to delete " + jobToAsk.Name + " Stream Analytics job..." ); LongRunningOperationResponse response = saMgmt.StreamingJobs.Delete( resourceGroup, jobToAsk.Name ); if( response.Status == OperationStatus.Succeeded ) { _ConsoleBuffer.Add( "Stream Analytics job " + jobToAsk.Name + " was deleted." ); } }, _ConsoleBuffer ); } } if( deletedCount == 0 ) { _ConsoleBuffer.Add( "No Stream Analytics job was deleted." ); } }
private void DeployASJob(SAJobConfigModel cfg) { // Get authentication token TokenCloudCredentials aadTokenCredentials = new TokenCloudCredentials(cfg.subscriptionID, GetAuthorizationHeader()); // Create Stream Analytics management client StreamAnalyticsManagementClient client = new StreamAnalyticsManagementClient(aadTokenCredentials); // Create a Stream Analytics job JobCreateOrUpdateParameters jobCreateParameters = new JobCreateOrUpdateParameters() { Job = new Job() { Name = cfg.streamAnalyticsJobName, Location = cfg.location, Properties = new JobProperties() { EventsOutOfOrderPolicy = EventsOutOfOrderPolicy.Adjust, Sku = new Sku() { Name = "Standard" } } } }; JobCreateOrUpdateResponse jobCreateResponse = client.StreamingJobs.CreateOrUpdate(cfg.resourceGroupName, jobCreateParameters); TempData["jobName"] = jobCreateResponse.Job.Name; TempData["jobCreationStatus"] = jobCreateResponse.StatusCode; // Create a Stream Analytics input source InputCreateOrUpdateParameters jobInputCreateParameters = new InputCreateOrUpdateParameters() { Input = new Input() { Name = cfg.streamAnalyticsInputName, Properties = new StreamInputProperties() { Serialization = new CsvSerialization { Properties = new CsvSerializationProperties { Encoding = "UTF8", FieldDelimiter = "," } }, DataSource = new EventHubStreamInputDataSource { Properties = new EventHubStreamInputDataSourceProperties { EventHubName = cfg.EventHubName, ServiceBusNamespace = cfg.ServiceBusNamespace, SharedAccessPolicyKey = cfg.SharedAccessPolicyKey, SharedAccessPolicyName = cfg.SharedAccessPolicyName, } } } } }; InputCreateOrUpdateResponse inputCreateResponse = client.Inputs.CreateOrUpdate(cfg.resourceGroupName, cfg.streamAnalyticsJobName, jobInputCreateParameters); TempData["jobInputName"] = inputCreateResponse.Input.Name; TempData["jobInputCreationStatus"] = inputCreateResponse.StatusCode; }
private void CreateStreamAnalyticsJob( string nameSuffix, string query, string resourceGroupName, AzurePrepInputs azurePrepIn, EventHubDescription ehInput, EventHubDescription ehOutput ) { const string inputName = "DevicesInput"; const string outputName = "output"; string jobName = azurePrepIn.NamePrefix + nameSuffix; string transformationName = jobName + "-tr"; var computeClient = new StreamAnalyticsManagementClient( azurePrepIn.Credentials ); var serialization = new JsonSerialization { Type = "JSON", Properties = new JsonSerializationProperties { Encoding = "UTF8" } }; List<Input> jobInputs = new List<Input> { new Input { Name = inputName, Properties = new StreamInputProperties { DataSource = new EventHubStreamInputDataSource { Properties = new EventHubStreamInputDataSourceProperties { EventHubName = ehInput.Path, ServiceBusNamespace = azurePrepIn.SBNamespace, SharedAccessPolicyName = "StreamingAnalytics", SharedAccessPolicyKey = ( ehInput.Authorization.First( ( d ) => String.Equals( d.KeyName, "StreamingAnalytics", StringComparison.InvariantCultureIgnoreCase) ) as SharedAccessAuthorizationRule ).PrimaryKey, } }, Serialization = serialization } } }; List<Output> jobOutputs = new List<Output> { new Output { Name = outputName, Properties = new OutputProperties { DataSource = new EventHubOutputDataSource { Properties = new EventHubOutputDataSourceProperties { EventHubName = ehOutput.Path, ServiceBusNamespace = azurePrepIn.SBNamespace, SharedAccessPolicyName = "StreamingAnalytics", SharedAccessPolicyKey = ( ehOutput.Authorization.First( ( d ) => String.Equals( d.KeyName, "StreamingAnalytics", StringComparison.InvariantCultureIgnoreCase) ) as SharedAccessAuthorizationRule ).PrimaryKey, } }, Serialization = serialization } } }; bool created = true; try { var jobCreateResponse = computeClient.StreamingJobs.CreateOrUpdateAsync( resourceGroupName, new JobCreateOrUpdateParameters { Job = new Job { Name = jobName, Location = azurePrepIn.Location, Properties = new JobProperties { Sku = new Sku { //should be "standart" according to https://msdn.microsoft.com/en-us/library/azure/dn834994.aspx Name = "standard" }, EventsOutOfOrderPolicy = "drop", EventsOutOfOrderMaxDelayInSeconds = 10, Inputs = jobInputs, Outputs = jobOutputs, Transformation = new Transformation { Name = transformationName, Properties = new TransformationProperties { Query = query, StreamingUnits = 1 } } } } } ).Result; } catch( Exception ex ) { _ConsoleBuffer.Add( "Exception on creation Stream Analytics Job " + jobName + ": " + ex.Message ); _ConsoleBuffer.Add( "Inner exception message: " + ex.InnerException.Message ); created = false; } if( created ) { _ConsoleBuffer.Add( "Stream Analytics job " + jobName + " created." ); } }