├── docs
├── img
│ ├── gcm.png
│ ├── log.png
│ ├── button.png
│ ├── newhub.png
│ ├── sbe02.png
│ ├── aboutform.png
│ ├── allmetric.png
│ ├── menuitem.png
│ ├── messages.png
│ ├── messages2.png
│ ├── messages3.png
│ ├── sessions.png
│ ├── sessions2.png
│ ├── template.png
│ ├── windows.png
│ ├── windows2.png
│ ├── autodelete2.png
│ ├── deadletter2.png
│ ├── deadletter3.png
│ ├── filterform.png
│ ├── forwardform.png
│ ├── listener01.png
│ ├── listener02.png
│ ├── listener03.png
│ ├── listener04.png
│ ├── listener05.png
│ ├── listener06.png
│ ├── monitortab.png
│ ├── optionsform.png
│ ├── parameters.png
│ ├── disableentity.png
│ ├── iothublistener.png
│ ├── messagefiles.png
│ ├── metricrootnode.png
│ ├── peekmessages.png
│ ├── readmessages2.png
│ ├── registrations.png
│ ├── registrations3.png
│ ├── registrations4.png
│ ├── relaymessage.png
│ ├── relaymetrics01.png
│ ├── relaymetrics02.png
│ ├── tagexpression.png
│ ├── windowsphone.png
│ ├── bytespersecond01.png
│ ├── bytespersecond02.png
│ ├── connectionstring.png
│ ├── getregistrations.png
│ ├── metricsmaingraph.png
│ ├── metricsquerytab.png
│ ├── notificationhubs.png
│ ├── partitionedqueue.png
│ ├── partitionedtopic.png
│ ├── relayservices01.png
│ ├── relayservices02.png
│ ├── relayservices03.png
│ ├── relayservices04.png
│ ├── relayservices05.png
│ ├── relayservices06.png
│ ├── senderthinktime.png
│ ├── singlemetricstab.png
│ ├── windowsphonetile.png
│ ├── authorizationrules.png
│ ├── eventhubmetrics01.png
│ ├── eventhubmetrics02.png
│ ├── getmessagesessions.png
│ ├── messagecountdetails.png
│ ├── metricsonentitytab.png
│ ├── metricsonentitytab2.png
│ ├── namespacemetrics01.png
│ ├── namespacemetrics02.png
│ ├── notificationhub01.png
│ ├── receiverthinktime.png
│ ├── repairandresubmit.png
│ ├── repairsinglemessage.png
│ ├── servicebusexplorer.jpg
│ ├── authorizationrulestab.png
│ ├── createnewregistration.png
│ ├── startingdatetimeutc01.png
│ ├── startingdatetimeutc02.png
│ ├── consumergroupmetrics01.png
│ ├── consumergroupmetrics02.png
│ ├── notificationhubmetrics01.png
│ ├── notificationhubmetrics02.png
│ ├── resubmitmultiplemessages.png
│ ├── partitionlistenercontrol01.png
│ ├── sendernewmessagingfactory.png
│ ├── connectivitymodeoptionsform.png
│ ├── connectivitymodetransporttype.png
│ ├── receivernewmessagingfactory.png
│ └── microsoft.servicebus.connectionstring.png
└── CODEOWNERS
├── media
├── download.png
├── UserConfigFile.png
├── connect-event-grid.png
├── publish-event-grid.png
├── AutoscalingTurnedOff.png
├── main-view-event-grid.png
├── service-bus-explorer.png
├── connect-info-event-grid.png
├── event-action-event-grid.png
├── receive-popup-event-grid.png
└── receive-results-event-grid.png
├── src
├── EventGridExplorerLibrary
│ ├── App.config
│ └── EventGridExplorerLibrary.csproj
├── ServiceBusExplorer
│ ├── Icons
│ │ ├── Add.ico
│ │ ├── Add.png
│ │ ├── Web.ico
│ │ ├── app.ico
│ │ ├── exec.ico
│ │ ├── Arrow.ico
│ │ ├── Azure.ico
│ │ ├── Chart.ico
│ │ ├── Class.ico
│ │ ├── Delete.ico
│ │ ├── Funnel.ico
│ │ ├── Queue.ico
│ │ ├── RedAdd.ico
│ │ ├── Topic.ico
│ │ ├── search.ico
│ │ ├── AddBlue.ico
│ │ ├── AzureLogo.ico
│ │ ├── BlueAdd.ico
│ │ ├── Configure.ico
│ │ ├── Contact.ico
│ │ ├── EventHub.ico
│ │ ├── GreyChart.ico
│ │ ├── GreyClass.ico
│ │ ├── Partition.ico
│ │ ├── TextFile.ico
│ │ ├── UserInfo.ico
│ │ ├── WhiteLogo.ico
│ │ ├── PieDiagram.ico
│ │ ├── folder_web.ico
│ │ ├── GreyEventHub.ico
│ │ ├── GreyUserInfo.ico
│ │ ├── RectangleBlue.ico
│ │ ├── RectangleGreen.ico
│ │ ├── groupofusers.ico
│ │ ├── system_search.ico
│ │ ├── WindowsAzureLogo.ico
│ │ ├── groupofusers_grey.ico
│ │ ├── ServiceBusExplorerLogo.ico
│ │ └── NewServiceBusExplorerLogo.ico
│ ├── Images
│ │ ├── Red.png
│ │ ├── hub.png
│ │ ├── kdf.png
│ │ ├── Green.png
│ │ ├── Plus.png
│ │ ├── Queue.png
│ │ ├── Sort.png
│ │ ├── Topic.png
│ │ ├── World.png
│ │ ├── BluLogo.png
│ │ ├── Clouds.jpg
│ │ ├── Clouds.png
│ │ ├── Delete.png
│ │ ├── Document.png
│ │ ├── Objects.gif
│ │ ├── Property.png
│ │ ├── Yellow.png
│ │ ├── akonadi.png
│ │ ├── notepad.png
│ │ ├── AzureLogo.png
│ │ ├── ButtonLast.png
│ │ ├── ButtonNext.png
│ │ ├── DeleteGrey.png
│ │ ├── PaoloAnja.png
│ │ ├── Properties.png
│ │ ├── Questions.png
│ │ ├── SmallWorld.png
│ │ ├── WhiteLogo.png
│ │ ├── ButtonFirst.png
│ │ ├── FindExtension.png
│ │ ├── NewAzureLogo.png
│ │ ├── NewAzureLogo2.png
│ │ ├── RelayService.png
│ │ ├── RelayServices.png
│ │ ├── SmallDelete.png
│ │ ├── SmallDocument.png
│ │ ├── akonadi_grey.png
│ │ ├── clipboard_48.png
│ │ ├── groupofusers.png
│ │ ├── system_search.png
│ │ ├── ButtonPrevious.png
│ │ ├── SmallBlueDelete.png
│ │ ├── MicrosoftAzureLogo.png
│ │ ├── WindowsAzureLogo.png
│ │ ├── groupofusers_grey.png
│ │ ├── FindByDateExtension.png
│ │ ├── FindExtensionRaised.png
│ │ ├── MicrosoftAzureWhiteLogo.png
│ │ ├── NewAzureLogoWithScript.png
│ │ ├── triangle shadow yellow.png
│ │ ├── Document notepad Template.png
│ │ └── FindByDateExtensionRaised.png
│ ├── Controls
│ │ ├── Grouper.bmp
│ │ ├── CustomTrackBar.bmp
│ │ ├── Windows
│ │ │ ├── HeaderPanel.bmp
│ │ │ └── HeaderPanel.Designer.cs
│ │ ├── CheckBoxComboBox.Designer.cs
│ │ ├── HeaderPanel.Designer.cs
│ │ ├── Grouper.resx
│ │ ├── TrackBar.resx
│ │ ├── AccidentalDeletionPreventionCheckControl.cs
│ │ └── ReadOnlyPropertyGrid.cs
│ ├── GlobalSuppressions.cs
│ ├── servicebusexplorer.png
│ ├── NewServiceBusExplorerLogo.ico
│ ├── Libraries
│ │ └── FastColoredTextBox.dll
│ ├── Properties
│ │ ├── Settings.settings
│ │ ├── Settings.Designer.cs
│ │ └── AssemblyInfo.cs
│ ├── ServiceBusExplorer.csproj.DotSettings
│ ├── Helpers
│ │ └── ConnectionStringHelper.cs
│ ├── UIHelpers
│ │ ├── WaitCursorScope.cs
│ │ ├── DataGridViewHelper.cs
│ │ ├── PropertyDescriptorList.cs
│ │ ├── ReadOnlyEditor.cs
│ │ ├── NativeMethods.cs
│ │ ├── TestControlHelper.cs
│ │ ├── MonitorRuleList.cs
│ │ ├── ProviderInstaller.cs
│ │ ├── ScrollBarHelper.cs
│ │ ├── DictionaryPropertyDescriptor.cs
│ │ ├── ControlHelper.cs
│ │ └── MonitorRule.cs
│ ├── Forms
│ │ ├── ChangeQueueStatusForm.cs
│ │ ├── PublishEventForm.cs
│ │ ├── ReceiveEventForm.cs
│ │ ├── CreateEventGridTopicForm.cs
│ │ └── EventGridConnectForm.cs
│ └── ServiceBusExplorer.nuspec
├── Utilities
│ ├── Enums
│ │ ├── MessageDirection.cs
│ │ ├── DirectionType.cs
│ │ ├── FormTypeEnum.cs
│ │ ├── EntityType.cs
│ │ └── EncodingType.cs
│ ├── Utilities.csproj
│ └── Helpers
│ │ ├── NodeColorInfo.cs
│ │ ├── CustomSortOrder.cs
│ │ ├── StringExtensions.cs
│ │ ├── ReadOnlyList.cs
│ │ └── XmlLinqExtensions.cs
├── .editorconfig
├── Common
│ ├── Helpers
│ │ ├── TopicDescriptionExtensions.cs
│ │ ├── IMessageDeferProvider.cs
│ │ ├── IEventDataInspector.cs
│ │ ├── IBrokeredMessageInspector.cs
│ │ ├── QueueDescriptionExtensions.cs
│ │ ├── FilterExpressionHelper.cs
│ │ ├── IEventDataGenerator.cs
│ │ ├── IBrokeredMessageGenerator.cs
│ │ ├── IResourceAttribute.cs
│ │ ├── IEnumerableExtensions.cs
│ │ ├── TimeSpanExtensions.cs
│ │ ├── AttributeList.cs
│ │ ├── GenericCopier.cs
│ │ ├── StringBodyWriter.cs
│ │ ├── IdAttribute.cs
│ │ ├── EventProcessorCheckpointManager.cs
│ │ ├── LockDurationTooLowException.cs
│ │ ├── CustomTypeDescriptionProvider.cs
│ │ ├── ServiceBusHelperEventArgs.cs
│ │ ├── UrlSegmentWrapper.cs
│ │ ├── CustomMessageSessionAsyncHandlerFactory.cs
│ │ ├── PropertyStateFlagsAttribute.cs
│ │ ├── CustomMessageSessionAsyncHandlerConfiguration.cs
│ │ ├── CustomMessageHeaderInfo.cs
│ │ ├── UserPropertyWrapper.cs
│ │ └── RuleWrapper.cs
│ ├── Common.csproj.DotSettings
│ ├── WindowsAzure
│ │ ├── IServiceBusPartition.cs
│ │ ├── IServiceBusEntity.cs
│ │ ├── IServiceBusEventHub.cs
│ │ ├── IServiceBusRelay.cs
│ │ ├── IServiceBusRule.cs
│ │ ├── IServiceBusTopic.cs
│ │ ├── IServiceBusNotificationHub.cs
│ │ ├── IServiceBusQueue.cs
│ │ ├── IServiceBusConsumerGroup.cs
│ │ └── IServiceBusSubscription.cs
│ └── Abstractions
│ │ └── EventDataMessage.cs
├── ServiceBusExplorer.Tests
│ ├── ServiceBusExplorer.Tests.csproj.DotSettings
│ ├── FileVersionShould.cs
│ ├── Helpers
│ │ └── ConversionHelperTests.cs
│ ├── AssemblyVersionShould.cs
│ ├── ServiceBusExplorer.Tests.csproj
│ └── app.config
├── Directory.Build.props
├── ServiceBus
│ ├── ServiceBus.csproj
│ └── Helpers
│ │ ├── PurgeStrategies.cs
│ │ ├── PurgeOperationFailedEventArgs.cs
│ │ └── PurgeOperationCompletedEventArgs.cs
├── Relay
│ ├── Relay.csproj
│ └── Helpers
│ │ └── RelayWrapper.cs
├── EventHubs
│ └── EventHubs.csproj
└── NotificationHubs
│ └── NotificationHubs.csproj
├── .github
├── workflows
│ ├── handle-pull-request.yml
│ ├── build-test.yml
│ ├── winget-submission.yml
│ └── handle-tag.yml
└── stale.yml
├── GetNumberVersion.ps1
├── NEWFEATURES.md
├── VERIFICATION-Template.txt
├── SetVersion.ps1
├── LICENSE.txt
└── Generate-VerificationFile.ps1
/docs/img/gcm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/gcm.png
--------------------------------------------------------------------------------
/docs/img/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/log.png
--------------------------------------------------------------------------------
/docs/img/button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/button.png
--------------------------------------------------------------------------------
/docs/img/newhub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/newhub.png
--------------------------------------------------------------------------------
/docs/img/sbe02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/sbe02.png
--------------------------------------------------------------------------------
/media/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/download.png
--------------------------------------------------------------------------------
/docs/img/aboutform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/aboutform.png
--------------------------------------------------------------------------------
/docs/img/allmetric.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/allmetric.png
--------------------------------------------------------------------------------
/docs/img/menuitem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/menuitem.png
--------------------------------------------------------------------------------
/docs/img/messages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/messages.png
--------------------------------------------------------------------------------
/docs/img/messages2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/messages2.png
--------------------------------------------------------------------------------
/docs/img/messages3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/messages3.png
--------------------------------------------------------------------------------
/docs/img/sessions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/sessions.png
--------------------------------------------------------------------------------
/docs/img/sessions2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/sessions2.png
--------------------------------------------------------------------------------
/docs/img/template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/template.png
--------------------------------------------------------------------------------
/docs/img/windows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/windows.png
--------------------------------------------------------------------------------
/docs/img/windows2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/windows2.png
--------------------------------------------------------------------------------
/docs/img/autodelete2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/autodelete2.png
--------------------------------------------------------------------------------
/docs/img/deadletter2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/deadletter2.png
--------------------------------------------------------------------------------
/docs/img/deadletter3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/deadletter3.png
--------------------------------------------------------------------------------
/docs/img/filterform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/filterform.png
--------------------------------------------------------------------------------
/docs/img/forwardform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/forwardform.png
--------------------------------------------------------------------------------
/docs/img/listener01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener01.png
--------------------------------------------------------------------------------
/docs/img/listener02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener02.png
--------------------------------------------------------------------------------
/docs/img/listener03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener03.png
--------------------------------------------------------------------------------
/docs/img/listener04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener04.png
--------------------------------------------------------------------------------
/docs/img/listener05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener05.png
--------------------------------------------------------------------------------
/docs/img/listener06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/listener06.png
--------------------------------------------------------------------------------
/docs/img/monitortab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/monitortab.png
--------------------------------------------------------------------------------
/docs/img/optionsform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/optionsform.png
--------------------------------------------------------------------------------
/docs/img/parameters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/parameters.png
--------------------------------------------------------------------------------
/media/UserConfigFile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/UserConfigFile.png
--------------------------------------------------------------------------------
/docs/img/disableentity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/disableentity.png
--------------------------------------------------------------------------------
/docs/img/iothublistener.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/iothublistener.png
--------------------------------------------------------------------------------
/docs/img/messagefiles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/messagefiles.png
--------------------------------------------------------------------------------
/docs/img/metricrootnode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/metricrootnode.png
--------------------------------------------------------------------------------
/docs/img/peekmessages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/peekmessages.png
--------------------------------------------------------------------------------
/docs/img/readmessages2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/readmessages2.png
--------------------------------------------------------------------------------
/docs/img/registrations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/registrations.png
--------------------------------------------------------------------------------
/docs/img/registrations3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/registrations3.png
--------------------------------------------------------------------------------
/docs/img/registrations4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/registrations4.png
--------------------------------------------------------------------------------
/docs/img/relaymessage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relaymessage.png
--------------------------------------------------------------------------------
/docs/img/relaymetrics01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relaymetrics01.png
--------------------------------------------------------------------------------
/docs/img/relaymetrics02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relaymetrics02.png
--------------------------------------------------------------------------------
/docs/img/tagexpression.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/tagexpression.png
--------------------------------------------------------------------------------
/docs/img/windowsphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/windowsphone.png
--------------------------------------------------------------------------------
/src/EventGridExplorerLibrary/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/docs/img/bytespersecond01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/bytespersecond01.png
--------------------------------------------------------------------------------
/docs/img/bytespersecond02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/bytespersecond02.png
--------------------------------------------------------------------------------
/docs/img/connectionstring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/connectionstring.png
--------------------------------------------------------------------------------
/docs/img/getregistrations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/getregistrations.png
--------------------------------------------------------------------------------
/docs/img/metricsmaingraph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/metricsmaingraph.png
--------------------------------------------------------------------------------
/docs/img/metricsquerytab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/metricsquerytab.png
--------------------------------------------------------------------------------
/docs/img/notificationhubs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/notificationhubs.png
--------------------------------------------------------------------------------
/docs/img/partitionedqueue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/partitionedqueue.png
--------------------------------------------------------------------------------
/docs/img/partitionedtopic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/partitionedtopic.png
--------------------------------------------------------------------------------
/docs/img/relayservices01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices01.png
--------------------------------------------------------------------------------
/docs/img/relayservices02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices02.png
--------------------------------------------------------------------------------
/docs/img/relayservices03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices03.png
--------------------------------------------------------------------------------
/docs/img/relayservices04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices04.png
--------------------------------------------------------------------------------
/docs/img/relayservices05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices05.png
--------------------------------------------------------------------------------
/docs/img/relayservices06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/relayservices06.png
--------------------------------------------------------------------------------
/docs/img/senderthinktime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/senderthinktime.png
--------------------------------------------------------------------------------
/docs/img/singlemetricstab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/singlemetricstab.png
--------------------------------------------------------------------------------
/docs/img/windowsphonetile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/windowsphonetile.png
--------------------------------------------------------------------------------
/media/connect-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/connect-event-grid.png
--------------------------------------------------------------------------------
/media/publish-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/publish-event-grid.png
--------------------------------------------------------------------------------
/docs/img/authorizationrules.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/authorizationrules.png
--------------------------------------------------------------------------------
/docs/img/eventhubmetrics01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/eventhubmetrics01.png
--------------------------------------------------------------------------------
/docs/img/eventhubmetrics02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/eventhubmetrics02.png
--------------------------------------------------------------------------------
/docs/img/getmessagesessions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/getmessagesessions.png
--------------------------------------------------------------------------------
/docs/img/messagecountdetails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/messagecountdetails.png
--------------------------------------------------------------------------------
/docs/img/metricsonentitytab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/metricsonentitytab.png
--------------------------------------------------------------------------------
/docs/img/metricsonentitytab2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/metricsonentitytab2.png
--------------------------------------------------------------------------------
/docs/img/namespacemetrics01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/namespacemetrics01.png
--------------------------------------------------------------------------------
/docs/img/namespacemetrics02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/namespacemetrics02.png
--------------------------------------------------------------------------------
/docs/img/notificationhub01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/notificationhub01.png
--------------------------------------------------------------------------------
/docs/img/receiverthinktime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/receiverthinktime.png
--------------------------------------------------------------------------------
/docs/img/repairandresubmit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/repairandresubmit.png
--------------------------------------------------------------------------------
/docs/img/repairsinglemessage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/repairsinglemessage.png
--------------------------------------------------------------------------------
/docs/img/servicebusexplorer.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/servicebusexplorer.jpg
--------------------------------------------------------------------------------
/media/AutoscalingTurnedOff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/AutoscalingTurnedOff.png
--------------------------------------------------------------------------------
/media/main-view-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/main-view-event-grid.png
--------------------------------------------------------------------------------
/media/service-bus-explorer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/service-bus-explorer.png
--------------------------------------------------------------------------------
/docs/img/authorizationrulestab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/authorizationrulestab.png
--------------------------------------------------------------------------------
/docs/img/createnewregistration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/createnewregistration.png
--------------------------------------------------------------------------------
/docs/img/startingdatetimeutc01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/startingdatetimeutc01.png
--------------------------------------------------------------------------------
/docs/img/startingdatetimeutc02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/startingdatetimeutc02.png
--------------------------------------------------------------------------------
/media/connect-info-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/connect-info-event-grid.png
--------------------------------------------------------------------------------
/media/event-action-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/event-action-event-grid.png
--------------------------------------------------------------------------------
/media/receive-popup-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/receive-popup-event-grid.png
--------------------------------------------------------------------------------
/docs/img/consumergroupmetrics01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/consumergroupmetrics01.png
--------------------------------------------------------------------------------
/docs/img/consumergroupmetrics02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/consumergroupmetrics02.png
--------------------------------------------------------------------------------
/docs/img/notificationhubmetrics01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/notificationhubmetrics01.png
--------------------------------------------------------------------------------
/docs/img/notificationhubmetrics02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/notificationhubmetrics02.png
--------------------------------------------------------------------------------
/docs/img/resubmitmultiplemessages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/resubmitmultiplemessages.png
--------------------------------------------------------------------------------
/media/receive-results-event-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/media/receive-results-event-grid.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Add.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Add.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Add.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Web.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Web.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/app.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/app.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/exec.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/exec.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Red.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/hub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/hub.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/kdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/kdf.png
--------------------------------------------------------------------------------
/docs/img/partitionlistenercontrol01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/partitionlistenercontrol01.png
--------------------------------------------------------------------------------
/docs/img/sendernewmessagingfactory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/sendernewmessagingfactory.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Arrow.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Arrow.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Azure.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Azure.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Chart.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Chart.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Class.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Class.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Delete.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Delete.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Funnel.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Funnel.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Queue.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Queue.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/RedAdd.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/RedAdd.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Topic.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Topic.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/search.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/search.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Green.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Plus.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Queue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Queue.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Sort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Sort.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Topic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Topic.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/World.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/World.png
--------------------------------------------------------------------------------
/docs/img/connectivitymodeoptionsform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/connectivitymodeoptionsform.png
--------------------------------------------------------------------------------
/docs/img/connectivitymodetransporttype.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/connectivitymodetransporttype.png
--------------------------------------------------------------------------------
/docs/img/receivernewmessagingfactory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/receivernewmessagingfactory.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/AddBlue.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/AddBlue.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/AzureLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/AzureLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/BlueAdd.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/BlueAdd.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Configure.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Configure.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Contact.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Contact.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/EventHub.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/EventHub.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/GreyChart.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/GreyChart.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/GreyClass.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/GreyClass.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/Partition.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/Partition.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/TextFile.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/TextFile.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/UserInfo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/UserInfo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/WhiteLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/WhiteLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/BluLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/BluLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Clouds.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Clouds.jpg
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Clouds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Clouds.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Delete.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Document.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Document.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Objects.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Objects.gif
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Property.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Property.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Yellow.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/akonadi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/akonadi.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/notepad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/notepad.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/Grouper.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Controls/Grouper.bmp
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/GlobalSuppressions.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/GlobalSuppressions.cs
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/PieDiagram.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/PieDiagram.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/folder_web.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/folder_web.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/AzureLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/AzureLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/ButtonLast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/ButtonLast.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/ButtonNext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/ButtonNext.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/DeleteGrey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/DeleteGrey.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/PaoloAnja.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/PaoloAnja.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Properties.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Questions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Questions.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/SmallWorld.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/SmallWorld.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/WhiteLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/WhiteLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/GreyEventHub.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/GreyEventHub.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/GreyUserInfo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/GreyUserInfo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/RectangleBlue.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/RectangleBlue.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/RectangleGreen.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/RectangleGreen.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/groupofusers.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/groupofusers.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/system_search.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/system_search.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/ButtonFirst.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/ButtonFirst.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/FindExtension.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/FindExtension.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/NewAzureLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/NewAzureLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/NewAzureLogo2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/NewAzureLogo2.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/RelayService.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/RelayService.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/RelayServices.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/RelayServices.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/SmallDelete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/SmallDelete.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/SmallDocument.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/SmallDocument.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/akonadi_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/akonadi_grey.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/clipboard_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/clipboard_48.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/groupofusers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/groupofusers.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/system_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/system_search.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/servicebusexplorer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/servicebusexplorer.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/WindowsAzureLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/WindowsAzureLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/ButtonPrevious.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/ButtonPrevious.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/SmallBlueDelete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/SmallBlueDelete.png
--------------------------------------------------------------------------------
/docs/img/microsoft.servicebus.connectionstring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/docs/img/microsoft.servicebus.connectionstring.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/CustomTrackBar.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Controls/CustomTrackBar.bmp
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/groupofusers_grey.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/groupofusers_grey.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/MicrosoftAzureLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/MicrosoftAzureLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/WindowsAzureLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/WindowsAzureLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/groupofusers_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/groupofusers_grey.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/NewServiceBusExplorerLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/NewServiceBusExplorerLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/FindByDateExtension.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/FindByDateExtension.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/FindExtensionRaised.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/FindExtensionRaised.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/Windows/HeaderPanel.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Controls/Windows/HeaderPanel.bmp
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/ServiceBusExplorerLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/ServiceBusExplorerLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/MicrosoftAzureWhiteLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/MicrosoftAzureWhiteLogo.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/NewAzureLogoWithScript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/NewAzureLogoWithScript.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/triangle shadow yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/triangle shadow yellow.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Libraries/FastColoredTextBox.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Libraries/FastColoredTextBox.dll
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Icons/NewServiceBusExplorerLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Icons/NewServiceBusExplorerLogo.ico
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/Document notepad Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/Document notepad Template.png
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Images/FindByDateExtensionRaised.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/HEAD/src/ServiceBusExplorer/Images/FindByDateExtensionRaised.png
--------------------------------------------------------------------------------
/src/Utilities/Enums/MessageDirection.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Enums
2 | {
3 | public enum MessageDirection
4 | {
5 | Send,
6 | Receive
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/Utilities/Enums/DirectionType.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace ServiceBusExplorer.Enums
3 | {
4 | public enum DirectionType
5 | {
6 | Send,
7 | Receive
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/Utilities/Enums/FormTypeEnum.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Enums
2 | {
3 | public enum FormTypeEnum
4 | {
5 | Send,
6 | Test,
7 | Listener
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.github/workflows/handle-pull-request.yml:
--------------------------------------------------------------------------------
1 | name: Handle pull request
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 | workflow_dispatch:
8 |
9 | jobs:
10 | call-build-test:
11 | uses: ./.github/workflows/build-test.yml
12 | with:
13 | release-version: '0.0.0'
14 | cache-build: false
15 |
--------------------------------------------------------------------------------
/src/Utilities/Enums/EntityType.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace ServiceBusExplorer.Enums
3 | {
4 | public enum EntityType
5 | {
6 | All,
7 | Queue,
8 | Topic,
9 | Subscription,
10 | Rule,
11 | Relay,
12 | NotificationHub,
13 | EventHub,
14 | ConsumerGroup
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/docs/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # This is a comment.# Each line is a file pattern followed by one or more owners.
2 | # These owners will be the default owners for everything in
3 | # the repo. Unless a later match takes precedence,
4 | # @global-owner1 and @global-owner2 will be requested for
5 | # review when someone opens a pull request.
6 | * @paolosalvatori @SeanFeldman @ErikMogensen
7 |
--------------------------------------------------------------------------------
/src/.editorconfig:
--------------------------------------------------------------------------------
1 | # top-most EditorConfig file
2 | root = true
3 |
4 | # Windows-style newlines with a newline ending every file
5 | [*]
6 | end_of_line = crlf
7 | insert_final_newline = true
8 |
9 | # 4 space indentation
10 | [*.cs]
11 | indent_style = space
12 | indent_size = 4
13 |
14 | # 2 space indentation
15 | [*.config]
16 | indent_style = space
17 | indent_size = 2
18 |
--------------------------------------------------------------------------------
/src/Common/Helpers/TopicDescriptionExtensions.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Helpers
2 | {
3 | using Microsoft.ServiceBus.Messaging;
4 |
5 | public static class TopicDescriptionExtensions
6 | {
7 | public static int MaxSizeInGigabytes(this TopicDescription topicDescription)
8 | {
9 | return (int) (topicDescription.MaxSizeInMegabytes / 1024);
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/Common/Common.csproj.DotSettings:
--------------------------------------------------------------------------------
1 |
2 | Default
3 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/ServiceBusExplorer.csproj.DotSettings:
--------------------------------------------------------------------------------
1 |
2 | Default
3 |
--------------------------------------------------------------------------------
/src/Utilities/Enums/EncodingType.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace ServiceBusExplorer.Enums
3 | {
4 | public enum EncodingType
5 | {
6 | // ReSharper disable once InconsistentNaming
7 | ASCII,
8 | // ReSharper disable once InconsistentNaming
9 | UTF7,
10 | // ReSharper disable once InconsistentNaming
11 | UTF8,
12 | // ReSharper disable once InconsistentNaming
13 | UTF32,
14 | Unicode
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/ServiceBusExplorer.Tests.csproj.DotSettings:
--------------------------------------------------------------------------------
1 |
2 | Default
3 |
--------------------------------------------------------------------------------
/src/Directory.Build.props:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | false
5 | false
6 | false
7 | false
8 | true
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Helpers/ConnectionStringHelper.cs:
--------------------------------------------------------------------------------
1 | #region Using Directives
2 |
3 | using System.Text.RegularExpressions;
4 |
5 | #endregion
6 |
7 | namespace Microsoft.Azure.ServiceBusExplorer.Helpers
8 | {
9 | public static class ConnectionStringHelper
10 | {
11 | private readonly static Regex EntityPathRegex = new Regex(@"(?:^|[^\w])(EntityPath=[^;]+)");
12 |
13 | public static bool IsEntitySpecific(string connectionString)
14 | {
15 | return EntityPathRegex.IsMatch(connectionString);
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusPartition.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Microsoft.ServiceBus.Messaging;
4 |
5 | namespace ServiceBusExplorer.WindowsAzure
6 | {
7 | internal interface IServiceBusPartition : IServiceBusEntity
8 | {
9 | PartitionDescription GetPartition(string path, string consumerGroupName, string name);
10 |
11 | IEnumerable GetPartitions(string path, string consumerGroupName);
12 |
13 | Uri GetPartitionUri(string eventHubName, string consumerGroupName, string partitionId);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusEntity.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Helpers;
2 | using ServiceBusExplorer.Utilities.Helpers;
3 |
4 | namespace ServiceBusExplorer.WindowsAzure
5 | {
6 | internal interface IServiceBusEntity
7 | {
8 | ///
9 | /// Gets or sets the scheme of the URI.
10 | ///
11 | string Scheme { get; set; }
12 |
13 | WriteToLogDelegate WriteToLog { get; set; }
14 |
15 | delegate void EventHandler(ServiceBusHelperEventArgs args);
16 |
17 | public event EventHandler OnDelete;
18 |
19 | public event EventHandler OnCreate;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/GetNumberVersion.ps1:
--------------------------------------------------------------------------------
1 | # Verify it is a proper version
2 | param(
3 | [Parameter(Mandatory=$false)]
4 | [string]
5 | $Version
6 | )
7 |
8 | Set-StrictMode -Version 3
9 |
10 | # RegEx from https://semver.org/
11 | [string]$semanticRegEx = '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
12 |
13 | if (-not ($Version -match $semanticRegEx)) {
14 | throw "The version must follow semantic versioning, see https://semver.org/." + `
15 | " For instance 4.3.22-beta."
16 | }
17 |
18 | $parts = $Version -split {$_ -eq '-' -or $_ -eq '+'}
19 |
20 | return $parts[0]
21 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/WaitCursorScope.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 | namespace ServiceBusExplorer.UIHelpers
4 | {
5 | internal class WaitCursorScope : IDisposable
6 | {
7 | private readonly Form _form;
8 | public WaitCursorScope(Form form = null)
9 | {
10 | _form = form;
11 | WaitCursor(true);
12 | }
13 |
14 | public void Dispose()
15 | {
16 | WaitCursor(false);
17 | }
18 |
19 | private void WaitCursor(bool waitCursor)
20 | {
21 | _ = _form == null ? Application.UseWaitCursor = waitCursor : _form.UseWaitCursor = waitCursor;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusEventHub.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Microsoft.ServiceBus.Messaging;
4 |
5 | namespace ServiceBusExplorer.WindowsAzure
6 | {
7 | internal interface IServiceBusEventHub : IServiceBusEntity
8 | {
9 | EventHubDescription CreateEventHub(EventHubDescription description);
10 |
11 | void DeleteEventHub(EventHubDescription eventHubDescription);
12 |
13 | void DeleteEventHubs(IEnumerable eventHubs);
14 |
15 | EventHubDescription GetEventHub(string path);
16 |
17 | Uri GetEventHubUri(string eventHubPath);
18 |
19 | EventHubDescription UpdateEventHub(EventHubDescription description);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusRelay.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading.Tasks;
4 | using Microsoft.ServiceBus.Messaging;
5 |
6 | namespace ServiceBusExplorer.WindowsAzure
7 | {
8 | internal interface IServiceBusRelay : IServiceBusEntity
9 | {
10 | RelayDescription CreateRelay(RelayDescription description);
11 |
12 | Task DeleteRelay(string path);
13 |
14 | Task DeleteRelays(IEnumerable relayServices);
15 |
16 | RelayDescription GetRelay(string path);
17 |
18 | IEnumerable GetRelays(int timeoutInSeconds);
19 |
20 | Uri GetRelayUri(RelayDescription description);
21 |
22 | RelayDescription UpdateRelay(RelayDescription description);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/NEWFEATURES.md:
--------------------------------------------------------------------------------
1 | - HandlePartitionControl: IncomingBytesPerSecond OutgoingBytesPerSecond
2 | - EventData.SerializedSizeInBytes is used to calculate KB/sec in the partitionlistenercontrol
3 | - Added new properties (LastEnqueuedOffset and LastEnqueuedTimeUtc) to PartitionDescription control
4 | - Fixed visualization of event data properties in the partition listener control
5 | - Greatly improved message tracking and clear of the partition listener control
6 | - Relay Message saved to file
7 | - Support for Persistent and Dynamic Relay Services
8 | - Export Persistent Relay Services
9 | - Event Hub Metrics
10 | - All Metric
11 | - Partition Consumer
12 | - Added Metrics to consumer groups
13 | - New behavior: no chart is shown if a metric doesn't have any data
14 | notification hubs metrics
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusRule.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using Microsoft.ServiceBus.Messaging;
3 | using ServiceBusExplorer.Helpers;
4 |
5 | namespace ServiceBusExplorer.WindowsAzure
6 | {
7 | internal interface IServiceBusRule : IServiceBusEntity
8 | {
9 | RuleDescription AddRule(SubscriptionDescription subscriptionDescription, RuleDescription ruleDescription);
10 |
11 | IEnumerable GetRules(string topicPath, string name);
12 |
13 | IEnumerable GetRules(SubscriptionDescription subscription);
14 |
15 | void RemoveRule(SubscriptionDescription subscriptionDescription, RuleDescription rule);
16 |
17 | void RemoveRules(IEnumerable wrappers);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/ServiceBus/ServiceBus.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | netstandard2.0
4 | ServiceBusExplorer.ServiceBus
5 | 1.0.0.1
6 | 7035
7 |
8 |
9 | True
10 |
11 |
12 | True
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/VERIFICATION-Template.txt:
--------------------------------------------------------------------------------
1 | VERIFICATION
2 | Verification is intended to assist the Chocolatey moderators and community
3 | in verifying that this package's contents are trustworthy.
4 |
5 | The installer have been downloaded from their official download link listed on
6 | and can be verified like this:
7 |
8 | 1. Download the following installers:
9 | 64-Bit:
10 | 2. You can use one of the following methods to obtain the checksum
11 | - Use powershell function 'Get-Filehash'
12 | - Use chocolatey utility 'checksum.exe'
13 |
14 | checksum type: md5
15 | checksum64: %CHECKSUM%
16 |
17 | File 'LICENSE.txt' is obtained from
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 60
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 7
5 | # Issues with these labels will never be considered stale
6 | exemptLabels:
7 | - pinned
8 | - security
9 | - bug
10 | - Feature
11 | - Discussion
12 | - enhancement
13 | - question
14 | - blocked
15 | - suggestion
16 | # Label to use when marking an issue as stale
17 | staleLabel: wontfix
18 | # Comment to post when marking an issue as stale. Set to `false` to disable
19 | markComment: >
20 | This issue has been automatically marked as stale because it has not had
21 | recent activity. It will be closed if no further activity occurs. Thank you
22 | for your contributions.
23 | # Comment to post when closing a stale issue. Set to `false` to disable
24 | closeComment: false
25 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusTopic.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading.Tasks;
4 | using Microsoft.ServiceBus.Messaging;
5 |
6 | namespace ServiceBusExplorer.WindowsAzure
7 | {
8 | internal interface IServiceBusTopic : IServiceBusEntity
9 | {
10 | TopicDescription CreateTopic(TopicDescription topicDescription);
11 |
12 | Task DeleteTopic(TopicDescription topic);
13 |
14 | Task DeleteTopics(IEnumerable topics);
15 |
16 | TopicDescription GetTopic(string path);
17 |
18 | IEnumerable GetTopics(string filter, int timeoutInSeconds);
19 |
20 | Uri GetTopicUri(string topicPath);
21 |
22 | TopicDescription RenameTopic(string path, string newPath);
23 |
24 | TopicDescription UpdateTopic(TopicDescription topicDescription);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Utilities/Utilities.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | netstandard2.0
4 | ServiceBusExplorer.Utilities
5 | 7.3
6 | ServiceBusExplorer.Utilities
7 | 1.0.0.1
8 | ServiceBusExplorer.Utilities
9 | 7035
10 |
11 |
12 | True
13 |
14 |
15 | True
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusNotificationHub.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading.Tasks;
4 | using Microsoft.Azure.NotificationHubs;
5 |
6 | namespace ServiceBusExplorer.WindowsAzure
7 | {
8 | internal interface IServiceBusNotificationHub : IServiceBusEntity
9 | {
10 | NotificationHubDescription CreateNotificationHub(NotificationHubDescription description);
11 |
12 | Task DeleteNotificationHub(NotificationHubDescription notificationHubDescription);
13 |
14 | Task DeleteNotificationHubs(IEnumerable notificationHubs);
15 |
16 | NotificationHubDescription GetNotificationHub(string path);
17 |
18 | Uri GetNotificationHubUri(string notificationHubPath);
19 |
20 | NotificationHubDescription UpdateNotificationHub(NotificationHubDescription description);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusQueue.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading.Tasks;
4 | using Microsoft.ServiceBus.Messaging;
5 |
6 | namespace ServiceBusExplorer.WindowsAzure
7 | {
8 | internal interface IServiceBusQueue : IServiceBusEntity
9 | {
10 | QueueDescription CreateQueue(QueueDescription description);
11 |
12 | Task DeleteQueue(QueueDescription queueDescription);
13 |
14 | Task DeleteQueues(IEnumerable queues);
15 |
16 | QueueDescription GetQueue(string path);
17 |
18 | Uri GetQueueDeadLetterQueueUri(string queuePath);
19 |
20 | IEnumerable GetQueues(string filter, int timeoutInSeconds);
21 |
22 | Uri GetQueueUri(string queuePath);
23 |
24 | QueueDescription RenameQueue(string path, string newPath);
25 |
26 | QueueDescription UpdateQueue(QueueDescription description);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/Relay/Relay.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | netstandard2.0
4 | 7.3
5 | ServiceBusExplorer.Relay
6 | 1.0.0.1
7 | 7035
8 |
9 |
10 | True
11 |
12 |
13 | True
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/SetVersion.ps1:
--------------------------------------------------------------------------------
1 | param(
2 | [Parameter(Mandatory)]
3 | [string]
4 | $FileName,
5 |
6 | [Parameter(Mandatory)]
7 | [string]
8 | $PropertyName,
9 |
10 | [Parameter(Mandatory,
11 | ParameterSetName = 'Version')]
12 | [Version]
13 | $Version,
14 |
15 | [Parameter(Mandatory,
16 | ParameterSetName = 'VersionString')]
17 | [string]
18 | $VersionString
19 | )
20 |
21 | Set-StrictMode -Version 2
22 |
23 | $pattern = "^\[assembly: $PropertyName\(""(.*)""\)\]$"
24 | $found = $false
25 |
26 | if ($Version) {
27 | $VersionString = $Version
28 | }
29 |
30 | $content = (Get-Content $fileName -Encoding UTF8) | ForEach-Object {
31 | if ($_ -match $pattern) {
32 | "[assembly: $PropertyName(""{0}"")]" -f $VersionString
33 | $found = $true
34 | }
35 | else {
36 | $_
37 | }
38 | }
39 |
40 | if (-not $found) {
41 | $content += "[assembly: $PropertyName(""{0}"")]" -f $VersionString
42 | }
43 |
44 | $content | Set-Content $fileName -Encoding UTF8
--------------------------------------------------------------------------------
/src/EventHubs/EventHubs.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | netstandard2.0
4 | 7.3
5 | ServiceBusExplorer.EventHubs
6 | ServiceBusExplorer.EventHubs
7 | 1.0.0.1
8 | 7035
9 |
10 |
11 | True
12 |
13 |
14 | True
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusConsumerGroup.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Microsoft.ServiceBus.Messaging;
4 |
5 | namespace ServiceBusExplorer.WindowsAzure
6 | {
7 | internal interface IServiceBusConsumerGroup : IServiceBusEntity
8 | {
9 | ConsumerGroupDescription CreateConsumerGroup(ConsumerGroupDescription description);
10 |
11 | void DeleteConsumerGroup(ConsumerGroupDescription consumerGroupDescription);
12 |
13 | void DeleteConsumerGroups(string eventHubName, IEnumerable consumerGroups);
14 |
15 | ConsumerGroupDescription GetConsumerGroup(string eventHubPath, string name);
16 |
17 | IEnumerable GetConsumerGroups(string path);
18 |
19 | Uri GetConsumerGroupUri(string eventHubName, string consumerGroupPath);
20 |
21 | ConsumerGroupDescription UpdateConsumerGroup(ConsumerGroupDescription description);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Microsoft Azure
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/FileVersionShould.cs:
--------------------------------------------------------------------------------
1 | using FluentAssertions;
2 | using System;
3 | using System.Diagnostics;
4 | using System.IO;
5 | using System.Linq;
6 | using Xunit;
7 |
8 | namespace ServiceBusExplorer.Tests
9 | {
10 | public class FileVersionShould
11 | {
12 | private string expectedVersion;
13 |
14 | public FileVersionShould()
15 | {
16 | #if DEBUG
17 | expectedVersion = Environment.GetEnvironmentVariable("FILE_VERSION") ?? "1.0.0.1";
18 | #else
19 | expectedVersion = Environment.GetEnvironmentVariable("FILE_VERSION") ?? throw new InvalidOperationException("file version not set by environment");
20 | #endif
21 | }
22 |
23 |
24 | [Fact]
25 | public void FileShouldHaveSameVersionAsProvidedByBuild()
26 | {
27 | var assemblyNames = Directory.GetFiles(".", "ServiceBus*.*")
28 | .Where(x => x.EndsWith(".dll") || x.EndsWith(".exe"));
29 |
30 | var fileVersions = assemblyNames.Select(x => FileVersionInfo.GetVersionInfo(x).FileVersion);
31 |
32 | fileVersions.Should().HaveCount(9).And.AllBeEquivalentTo(expectedVersion);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace ServiceBusExplorer.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/CheckBoxComboBox.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Controls
2 | {
3 | partial class CheckBoxComboBox
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | components = new System.ComponentModel.Container();
32 | }
33 |
34 | #endregion
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/Windows/HeaderPanel.Designer.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace KIS.Controls.Windows
4 | {
5 | partial class HeaderPanel
6 | {
7 | ///
8 | /// Required designer variable.
9 | ///
10 | private IContainer components = null;
11 |
12 | ///
13 | /// Clean up any resources being used.
14 | ///
15 | /// true if managed resources should be disposed; otherwise, false.
16 | protected override void Dispose(bool disposing)
17 | {
18 | if( disposing )
19 | {
20 | if(components != null)
21 | {
22 | components.Dispose();
23 | }
24 | }
25 | base.Dispose( disposing );
26 | }
27 |
28 | #region Component Designer generated code
29 | ///
30 | /// Required method for Designer support - do not modify
31 | /// the contents of this method with the code editor.
32 | ///
33 | private void InitializeComponent()
34 | {
35 | this.SuspendLayout();
36 | //
37 | // HeaderPanel
38 | //
39 | this.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HeaderPanel_Scroll);
40 | this.ResumeLayout(false);
41 |
42 | }
43 | #endregion
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Setting ComVisible to false makes the types in this assembly not visible
6 | // to COM components. If you need to access a type in this assembly from
7 | // COM, set the ComVisible attribute to true on that type.
8 | [assembly: ComVisible(false)]
9 | [assembly: InternalsVisibleTo("ServiceBusExplorer.Tests")]
10 |
11 | // General Information about an assembly is controlled through the following
12 | // set of attributes. Change these attribute values to modify the information
13 | // associated with an assembly.
14 | [assembly: AssemblyTitle("Service Bus Explorer")]
15 | [assembly: AssemblyDescription("The Service Bus Explorer allows users to connect to a Service Bus namespace and easily administer and test the entities of an Azure Service Bus namespace. The tool provides advanced features like import/export functionality and the ability to test entities.")]
16 | [assembly: AssemblyCompany("Paolo Salvatori")]
17 | [assembly: AssemblyProduct("Service Bus Explorer")]
18 | [assembly: AssemblyCopyright("Copyright © Microsoft 2017")]
19 |
20 |
21 | // The following GUID is for the ID of the typelib if this project is exposed to COM
22 | [assembly: Guid("b7dc6295-ee39-429e-9a97-68dc919f049b")]
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/Common/WindowsAzure/IServiceBusSubscription.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading.Tasks;
4 | using Microsoft.ServiceBus.Messaging;
5 |
6 | namespace ServiceBusExplorer.WindowsAzure
7 | {
8 | internal interface IServiceBusSubscription : IServiceBusEntity
9 | {
10 | SubscriptionDescription CreateSubscription(TopicDescription topicDescription, SubscriptionDescription subscriptionDescription);
11 |
12 | SubscriptionDescription CreateSubscription(TopicDescription topicDescription, SubscriptionDescription subscriptionDescription, RuleDescription ruleDescription);
13 |
14 | Task DeleteSubscription(SubscriptionDescription subscriptionDescription);
15 |
16 | Task DeleteSubscriptions(IEnumerable subscriptionDescriptions);
17 |
18 | SubscriptionDescription GetSubscription(string topicPath, string name);
19 |
20 | Uri GetSubscriptionDeadLetterQueueUri(string topicPath, string name);
21 |
22 | IEnumerable GetSubscriptions(string topicPath);
23 |
24 | IEnumerable GetSubscriptions(TopicDescription topic, string filter);
25 |
26 | Uri GetSubscriptionUri(string topicPath, string name);
27 |
28 | SubscriptionDescription UpdateSubscription(TopicDescription topicDescription, SubscriptionDescription subscriptionDescription);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/DataGridViewHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 |
6 | using Microsoft.ServiceBus.Messaging;
7 |
8 | namespace ServiceBusExplorer.UIHelpers
9 | {
10 | internal static class DataGridViewHelper
11 | {
12 | static public void RemoveDataGridRowsUsingSequenceNumbers(DataGridView dataGridView,
13 | IEnumerable sequenceNumbersToRemove)
14 | {
15 | var rowsToRemove = new List(sequenceNumbersToRemove.Count());
16 |
17 | foreach (DataGridViewRow row in dataGridView.Rows)
18 | {
19 | var message = (BrokeredMessage)row.DataBoundItem;
20 |
21 | if (sequenceNumbersToRemove.Contains(message.SequenceNumber))
22 | {
23 | rowsToRemove.Add(row);
24 |
25 | if (rowsToRemove.Count >= sequenceNumbersToRemove.Count())
26 | {
27 | break;
28 | }
29 | }
30 | }
31 |
32 | for (var rowIndex = rowsToRemove.Count - 1; rowIndex >= 0; --rowIndex)
33 | {
34 | var row = rowsToRemove[rowIndex];
35 | dataGridView.Rows.Remove(row);
36 | }
37 |
38 | dataGridView.ClearSelection();
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/HeaderPanel.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Controls
2 | {
3 | partial class HeaderPanel
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.SuspendLayout();
32 | //
33 | // OutlookPanelEx
34 | //
35 | this.BackColor = System.Drawing.SystemColors.ControlLightLight;
36 | this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
37 | this.Name = "OutlookPanelEx";
38 | this.Size = new System.Drawing.Size(224, 172);
39 | this.Paint += new System.Windows.Forms.PaintEventHandler(this.OutlookPanelEx_Paint);
40 | this.ResumeLayout(false);
41 |
42 | }
43 |
44 | #endregion
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/EventGridExplorerLibrary/EventGridExplorerLibrary.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Library
5 | netstandard2.0
6 | 1.0.0.1
7 | EventGridExplorerLibrary
8 | ServiceBusExplorer.EventGridExplorerLibrary
9 | 7035
10 |
11 |
12 |
13 | True
14 |
15 |
16 |
17 | True
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Generate-VerificationFile.ps1:
--------------------------------------------------------------------------------
1 | param(
2 | [Parameter(Mandatory=$true, HelpMessage="Released version of ServiceBusExplorer")]
3 | [string] $Version,
4 | [Parameter(Mandatory=$true, HelpMessage="Path to the ServiceBusExplorer exe")]
5 | [string] $ExePath,
6 | [Parameter(Mandatory=$true, HelpMessage="Location of the VERIFICATION.txt template")]
7 | [string] $TemplateFilePath,
8 | [Parameter(Mandatory=$true, HelpMessage="Location to output the result to")]
9 | [string] $OutputFilePath
10 | )
11 |
12 | Write-Output "Creating VERIFICATION.txt based on template '$($TemplateFilePath)' for '$($ExePath)'"
13 |
14 | # Get content of template
15 | $rawTemplate = Get-Content $TemplateFilePath | Out-String
16 | Write-Output "VERIFICATION.txt template: $($rawTemplate)"
17 |
18 | # Hash ServiceBusExplorer.exe
19 | $hashResult = Get-FileHash $ExePath -Algorithm MD5
20 | Write-Output "Created hash '$($hashResult.Hash)'"
21 |
22 | # Update template with checksum
23 | $rawTemplate = $rawTemplate.Replace('%CHECKSUM%', $hashResult.Hash)
24 | Write-Output "Replaced checksum in template with '$($hashResult.Hash)'"
25 |
26 | # Updating template with version
27 | $rawTemplate = $rawTemplate.Replace('%VERSION%', $Version)
28 | Write-Output "Replaced version in template with '$($Version)'"
29 |
30 | # Store output in VERIFICATION file
31 | New-Item -Path $OutputFilePath -Value $rawTemplate -Force
32 | Write-Host "Wrote results to $($OutputFilePath)"
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Forms/ChangeQueueStatusForm.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.ServiceBus.Messaging;
2 | using System;
3 | using System.IO;
4 | using System.Windows.Forms;
5 |
6 | namespace ServiceBusExplorer.Forms
7 | {
8 | public partial class ChangeQueueStatusForm : Form
9 | {
10 | public EntityStatus EntityStatus { get; private set; }
11 |
12 | public ChangeQueueStatusForm(EntityStatus entityCurrentStatus)
13 | {
14 | InitializeComponent();
15 | SetSelected(entityCurrentStatus);
16 | }
17 |
18 | private void SetSelected(EntityStatus entityStatus)
19 | {
20 | if (!cbStatus.Items.Contains(entityStatus.ToString()))
21 | {
22 | throw new InvalidDataException($"Unexpected value {entityStatus} passed");
23 | }
24 | EntityStatus = entityStatus;
25 | cbStatus.SelectedIndex = cbStatus.Items.IndexOf(entityStatus.ToString());
26 | }
27 |
28 | private void btnOk_Click(object sender, EventArgs e)
29 | {
30 | EntityStatus = (EntityStatus)Enum.Parse(typeof(EntityStatus), cbStatus.SelectedItem.ToString());
31 | DialogResult = DialogResult.OK;
32 | Close();
33 | }
34 |
35 | private void btnCancel_Click(object sender, EventArgs e)
36 | {
37 | DialogResult = DialogResult.Cancel;
38 | Close();
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IMessageDeferProvider.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | namespace ServiceBusExplorer.Helpers
23 | {
24 | public interface IMessageDeferProvider
25 | {
26 | int Count { get; }
27 | void Enqueue(long sequenceNumber);
28 | bool Dequeue(out long sequenceNumber);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/PropertyDescriptorList.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections.Generic;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.UIHelpers
29 | {
30 | internal class PropertyDescriptorList : List
31 | {
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/ServiceBus/Helpers/PurgeStrategies.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | using System;
23 |
24 | namespace ServiceBusExplorer.ServiceBus.Helpers
25 | {
26 | [Flags]
27 | public enum PurgeStrategies
28 | {
29 | Messages = 1,
30 | DeadletteredMessages = 2,
31 | All = Messages | DeadletteredMessages
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IEventDataInspector.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using Microsoft.ServiceBus.Messaging;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public interface IEventDataInspector
31 | {
32 | EventData BeforeSendMessage(EventData eventData);
33 | EventData AfterReceiveMessage(EventData eventData);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IBrokeredMessageInspector.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using Microsoft.ServiceBus.Messaging;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public interface IBrokeredMessageInspector
31 | {
32 | BrokeredMessage BeforeSendMessage(BrokeredMessage message);
33 | BrokeredMessage AfterReceiveMessage(BrokeredMessage message);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Common/Helpers/QueueDescriptionExtensions.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | using Microsoft.ServiceBus.Messaging;
23 |
24 | namespace ServiceBusExplorer.Helpers
25 | {
26 | public static class QueueDescriptionExtensions
27 | {
28 | public static int MaxSizeInGigabytes(this QueueDescription queueDescription)
29 | {
30 | return (int) (queueDescription.MaxSizeInMegabytes / 1024);
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/ServiceBus/Helpers/PurgeOperationFailedEventArgs.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | using System;
23 |
24 | namespace ServiceBusExplorer.ServiceBus.Helpers
25 | {
26 | public class PurgeOperationFailedEventArgs : EventArgs
27 | {
28 | public Exception Exception { get; set; }
29 |
30 | public PurgeOperationFailedEventArgs(Exception exception)
31 | {
32 | this.Exception = exception;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Utilities/Helpers/NodeColorInfo.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Utilities.Helpers
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Drawing;
6 | using System.Linq;
7 |
8 | public class NodeColorInfo
9 | {
10 | public string Format()
11 | {
12 | return $"{Color.ToArgb()};{IsLeaf};{Text}";
13 | }
14 |
15 | public static NodeColorInfo Parse(string value)
16 | {
17 | try
18 | {
19 | var parts = value.Split(';');
20 | if (parts.Length == 3)
21 | {
22 | return new NodeColorInfo
23 | {
24 | Color = Color.FromArgb(int.Parse(parts[0])),
25 | IsLeaf = bool.Parse(parts[1]),
26 | Text = parts[2]
27 | };
28 | }
29 | return null;
30 | }
31 | catch (Exception)
32 | {
33 | return null;
34 | }
35 | }
36 |
37 | public static List ParseAll(string value)
38 | {
39 | return value.Split('¤').Select(Parse).Where(n => n != null).ToList();
40 | }
41 |
42 | public static string FormatAll(IEnumerable items)
43 | {
44 | return string.Join("¤", items.Select(i => i.Format()));
45 | }
46 |
47 | public string Text { get; set; }
48 | public bool IsLeaf { get; set; }
49 | public Color Color { get; set; }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/Common/Helpers/FilterExpressionHelper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | namespace ServiceBusExplorer.Helpers
23 | {
24 | public static class FilterExpressionHelper
25 | {
26 | #region Public Static Properties
27 | public static string QueueFilterExpression { get; set; }
28 | public static string TopicFilterExpression { get; set; }
29 | public static string SubscriptionFilterExpression { get; set; }
30 | #endregion
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IEventDataGenerator.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections.Generic;
25 | using ServiceBusExplorer.Utilities.Helpers;
26 | using Microsoft.ServiceBus.Messaging;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.Helpers
31 | {
32 | public interface IEventDataGenerator
33 | {
34 | IEnumerable GenerateEventDataCollection(int eventDataCount, WriteToLogDelegate writeToLog = null);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IBrokeredMessageGenerator.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections.Generic;
25 | using ServiceBusExplorer.Utilities.Helpers;
26 | using Microsoft.ServiceBus.Messaging;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.Helpers
31 | {
32 | public interface IBrokeredMessageGenerator
33 | {
34 | IEnumerable GenerateBrokeredMessageCollection(int messageCount, WriteToLogDelegate writeToLog = null);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/ReadOnlyEditor.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 | using System.ComponentModel;
24 | using System.Drawing.Design;
25 | #endregion
26 |
27 | namespace ServiceBusExplorer.UIHelpers
28 | {
29 | public class ReadOnlyEditor : UITypeEditor
30 | {
31 | #region Public Methods
32 | public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
33 | {
34 | return UITypeEditorEditStyle.None;
35 | }
36 | #endregion
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IResourceAttribute.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | namespace ServiceBusExplorer.Helpers
23 | {
24 | public interface IResourceAttribute
25 | {
26 | #region Public Properties
27 | string BaseName
28 | {
29 | get;
30 | set;
31 | }
32 |
33 | string KeyPrefix
34 | {
35 | get;
36 | set;
37 | }
38 |
39 | string AssemblyFullName
40 | {
41 | get;
42 | set;
43 | }
44 | #endregion
45 | }
46 | }
--------------------------------------------------------------------------------
/src/Common/Helpers/IEnumerableExtensions.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Collections.Generic;
26 |
27 | #endregion
28 |
29 | namespace Microsoft.Azure.ServiceBusExplorer.Helpers
30 | {
31 | public static class IEnumerableExtensions
32 | {
33 | public static void ForEach(this IEnumerable collection, Action action)
34 | {
35 | foreach (var item in collection)
36 | {
37 | action?.Invoke(item);
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/Utilities/Helpers/CustomSortOrder.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | namespace ServiceBusExplorer.Utilities.Helpers
23 | {
24 | public enum CustomSortOrder
25 | {
26 | // no custom sorting
27 | None,
28 | // sort asscending using the property name or category name
29 | AscendingByName,
30 | // sort asscending using property id or categor id
31 | AscendingById,
32 | // sort descending using the property name or category name
33 | DescendingByName,
34 | // sort descending using property id or categor id
35 | DescendingById,
36 | }
37 | }
--------------------------------------------------------------------------------
/src/Common/Helpers/TimeSpanExtensions.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public static class TimeSpanExtensions
31 | {
32 | public static bool IsMaxValue(this TimeSpan timeSpan)
33 | {
34 | var maxValue = TimeSpan.MaxValue;
35 | return maxValue.Days == timeSpan.Days &&
36 | maxValue.Hours == timeSpan.Hours &&
37 | maxValue.Minutes == timeSpan.Minutes &&
38 | maxValue.Seconds == timeSpan.Seconds;
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/Utilities/Helpers/StringExtensions.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.IO;
25 | using System.Text;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Utilities.Helpers
30 | {
31 | public static class StringExtensions
32 | {
33 | public static MemoryStream ToMemoryStream(this string source)
34 | {
35 | return source.ToMemoryStream(Encoding.UTF8);
36 | }
37 |
38 | public static MemoryStream ToMemoryStream(this string source, Encoding encoding)
39 | {
40 | return new MemoryStream(encoding.GetBytes(source));
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/.github/workflows/build-test.yml:
--------------------------------------------------------------------------------
1 | name: build-test
2 |
3 | on:
4 | workflow_call:
5 | inputs:
6 | release-version:
7 | required: true
8 | type: string
9 | cache-build:
10 | required: false
11 | type: boolean
12 | default: false
13 | workflow_dispatch:
14 | inputs:
15 | release-version:
16 | required: false
17 | description: A version number to test manual builds. e.g. 1.2.3
18 | type: string
19 | default: '1.2.3'
20 | env:
21 | SOLUTION_FILE_PATH: .\src
22 | BUILD_CONFIGURATION: Release
23 |
24 | jobs:
25 | build_test_publish:
26 | name: Build and run unit tests
27 | runs-on: windows-2022
28 | steps:
29 | - name: Git configuration
30 | run: git config --global core.autocrlf false
31 |
32 | - uses: actions/checkout@v4
33 |
34 | - name: Restore NuGet packages
35 | working-directory: ${{env.SOLUTION_FILE_PATH}}
36 | run: dotnet restore
37 |
38 | - name: Show version
39 | run: echo "Building version ${{ inputs.release-version }}"
40 |
41 | - name: Build
42 | working-directory: ${{env.SOLUTION_FILE_PATH}}
43 | run: >-
44 | dotnet build -c ${{env.BUILD_CONFIGURATION}}
45 | -p:InformationalVersion=${{inputs.release-version}}
46 | -p:FileVersion=${{inputs.release-version}}
47 |
48 | - name: Run tests
49 | env:
50 | FILE_VERSION: ${{inputs.release-version}}
51 | working-directory: ${{env.SOLUTION_FILE_PATH}}
52 | run: dotnet test -c ${{env.BUILD_CONFIGURATION}} --no-build --no-restore
53 |
54 | - name: Cache build
55 | uses: actions/cache@v4
56 | if: ${{ inputs.cache-build }}
57 | with:
58 | path: src/ServiceBusExplorer/bin/Release
59 | key: cached-output-${{ github.sha }}
60 |
--------------------------------------------------------------------------------
/src/Common/Helpers/AttributeList.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Collections.Generic;
26 | using System.ComponentModel;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.Helpers
31 | {
32 | public class AttributeList : List
33 | {
34 | #region Public Conctructors
35 | public AttributeList()
36 | {
37 |
38 | }
39 |
40 | public AttributeList(AttributeCollection ac)
41 | {
42 | foreach (Attribute attr in ac)
43 | {
44 | Add(attr);
45 | }
46 | }
47 | #endregion
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/Common/Abstractions/EventDataMessage.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.Abstractions
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using Microsoft.Azure.Amqp;
7 | using Microsoft.ServiceBus.Messaging;
8 |
9 | public class EventDataMessage : IDisposable
10 | {
11 | readonly EventData eventData;
12 | Stream stream;
13 |
14 | public EventDataMessage(EventData eventData)
15 | {
16 | this.eventData = eventData;
17 | stream = eventData.GetBodyStream();
18 | Properties = eventData.Properties;
19 | PartitionKey = eventData.PartitionKey;
20 | SequenceNumber = eventData.SequenceNumber;
21 | Offset = eventData.Offset;
22 | SerializedSizeInBytes = eventData.SerializedSizeInBytes;
23 | EnqueuedTimeUtc = eventData.EnqueuedTimeUtc;
24 | SystemProperties = eventData.SystemProperties;
25 | }
26 |
27 | public string PartitionKey { get; private set; }
28 | public long SequenceNumber { get; private set; }
29 | public long SerializedSizeInBytes { get; private set; }
30 | public string Offset { get; private set; }
31 | public DateTime EnqueuedTimeUtc { get; private set; }
32 | public IDictionary Properties { get; private set; }
33 | public IDictionary SystemProperties { get; private set; }
34 |
35 | public Stream GetBodyStream()
36 | {
37 | var memoryStream = new MemoryStream();
38 |
39 | stream.CopyTo(memoryStream);
40 | stream.Seek(0L, SeekOrigin.Begin);
41 |
42 | return memoryStream;
43 | }
44 |
45 | public void Dispose()
46 | {
47 | eventData.Dispose();
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/Utilities/Helpers/ReadOnlyList.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections;
25 | using System.Collections.Generic;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Utilities.Helpers
30 | {
31 | public class ReadOnlyList : List, ICollection, IList
32 | {
33 | #region Public Constructors
34 | public ReadOnlyList() { }
35 | public ReadOnlyList(IEnumerable collection) : base(collection) { }
36 | #endregion
37 |
38 | #region Public Properties
39 | bool ICollection.IsReadOnly { get { return true; } }
40 | bool IList.IsReadOnly { get { return true; } }
41 | #endregion
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/Grouper.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | text/microsoft-resx
32 |
33 |
34 | 1.0.0.0
35 |
36 |
37 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
38 |
39 |
40 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
41 |
42 |
43 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/TrackBar.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | text/microsoft-resx
32 |
33 |
34 | 1.0.0.0
35 |
36 |
37 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
38 |
39 |
40 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
41 |
42 |
43 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Forms/PublishEventForm.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Utilities.Helpers;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Forms;
5 |
6 | namespace ServiceBusExplorer.Forms
7 | {
8 | public partial class PublishEventForm : Form
9 | {
10 | #region Private Constants
11 | private const string ExceptionFormat = "Exception: {0}";
12 | private readonly WriteToLogDelegate writeToLog = default!;
13 | #endregion
14 |
15 | #region Public Fields
16 | public string EventSource = string.Empty;
17 | public string EventType = string.Empty;
18 | public string EventInfo = string.Empty;
19 | #endregion
20 |
21 | public PublishEventForm(WriteToLogDelegate writeToLog)
22 | {
23 | InitializeComponent();
24 | this.writeToLog = writeToLog;
25 | }
26 |
27 | private void btnSubmit_Click(object sender, EventArgs e)
28 | {
29 | try
30 | {
31 | EventSource = txtEventSource.Text.Trim();
32 | EventType = txtEventType.Text.Trim();
33 | EventInfo = txtEventInfo.Text.Trim();
34 |
35 | DialogResult = DialogResult.OK;
36 | }
37 | catch (Exception ex)
38 | {
39 | HandleException(ex);
40 | }
41 | }
42 |
43 | private void btnCancel_Click(object sender, EventArgs e)
44 | {
45 | DialogResult = DialogResult.Cancel;
46 | Close();
47 | }
48 |
49 | private void HandleException(Exception ex)
50 | {
51 | if (string.IsNullOrWhiteSpace(ex?.Message))
52 | {
53 | return;
54 | }
55 |
56 | writeToLog(string.Format(CultureInfo.CurrentCulture, ExceptionFormat, ex?.Message));
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/Common/Helpers/GenericCopier.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Web.Script.Serialization;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public static class GenericCopier where T : class
31 | {
32 | #region Public Static Methods
33 | public static T DeepCopy(object objectToCopy)
34 | {
35 | if (objectToCopy == null)
36 | {
37 | return null;
38 | }
39 | var jsonSerializer = new JavaScriptSerializer();
40 | var value = jsonSerializer.Serialize(objectToCopy);
41 | return (T)jsonSerializer.Deserialize(value, objectToCopy.GetType());
42 | }
43 | #endregion
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/NativeMethods.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Drawing;
26 | using System.Runtime.InteropServices;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.UIHelpers
31 | {
32 | internal static class NativeMethods
33 | {
34 | #region DllImports
35 |
36 | [DllImport("user32.dll", SetLastError = true)]
37 | internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);
38 |
39 | [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
40 | internal static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
41 |
42 | #endregion
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Forms/ReceiveEventForm.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Utilities.Helpers;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Forms;
5 |
6 | namespace ServiceBusExplorer.Forms
7 | {
8 | public partial class ReceiveEventForm : Form
9 | {
10 | #region Private Constants
11 | private const string ExceptionFormat = "Exception: {0}";
12 | private readonly WriteToLogDelegate writeToLog = default!;
13 | #endregion
14 |
15 | #region Public Fields
16 | public int EventCount;
17 | public bool GetMax = false;
18 | #endregion
19 |
20 | public ReceiveEventForm(WriteToLogDelegate writeToLog)
21 | {
22 | this.writeToLog = writeToLog;
23 | InitializeComponent();
24 | }
25 |
26 | private void receiveEvents_CheckedChanged(object sender, EventArgs e)
27 | {
28 | txtEventCount.Enabled = btnTop.Checked;
29 | }
30 |
31 | private void btnOk_Click(object sender, EventArgs e)
32 | {
33 | try
34 | {
35 | GetMax = btnMax.Checked;
36 | EventCount = txtEventCount.Text != string.Empty ? int.Parse(txtEventCount.Text) : 0;
37 | }
38 | catch (Exception ex)
39 | {
40 | HandleException(ex);
41 | }
42 |
43 | DialogResult = DialogResult.OK;
44 | }
45 |
46 | private void btnCancel_Click(object sender, EventArgs e)
47 | {
48 | DialogResult = DialogResult.Cancel;
49 | Close();
50 | }
51 |
52 | private void HandleException(Exception ex)
53 | {
54 | if (string.IsNullOrWhiteSpace(ex?.Message))
55 | {
56 | return;
57 | }
58 |
59 | writeToLog(string.Format(CultureInfo.CurrentCulture, ExceptionFormat, ex?.Message));
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/Helpers/ConversionHelperTests.cs:
--------------------------------------------------------------------------------
1 | #region Using Directives
2 |
3 | using System;
4 | using System.Globalization;
5 | using ServiceBusExplorer.Utilities.Helpers;
6 | using FluentAssertions;
7 | using Xunit;
8 |
9 | #endregion
10 |
11 | namespace ServiceBusExplorer.Tests.Helpers
12 | {
13 | public class ConversionHelperTests
14 | {
15 | [Fact]
16 | public void MapStringTypeToCLRType_ValueIsGuidObject_ReturnsEqualGuidObject()
17 | {
18 | var guid = new Guid("2E9DB8C4-8803-4BD7-B860-8932CF13835E");
19 | var convertedGuid = ConversionHelper.MapStringTypeToCLRType("Guid", guid);
20 | convertedGuid.Should().BeEquivalentTo(guid);
21 | }
22 |
23 | [Fact]
24 | public void MapStringTypeToCLRType_ValueIsGuidString_ReturnsEqualGuidObject()
25 | {
26 | var guidStr = "2E9DB8C4-8803-4BD7-B860-8932CF13835E";
27 | var convertedGuid = ConversionHelper.MapStringTypeToCLRType("Guid", guidStr);
28 | convertedGuid.ToString().Should().BeEquivalentTo(guidStr);
29 | }
30 |
31 | [Theory]
32 | [InlineData("00:00:00")]
33 | [InlineData("3:44:55")]
34 | [InlineData("03:44:55")]
35 | [InlineData("1:00:00:00.0000000")] // one day
36 | public void MapStringTypeToCLRType_ValueIsTimeSpanString_ReturnsEqualTimespanObject(string timespanStr)
37 | {
38 | var convertedTimespan = ConversionHelper.MapStringTypeToCLRType("TimeSpan", timespanStr);
39 | convertedTimespan.Should().BeEquivalentTo(TimeSpan.Parse(timespanStr, CultureInfo.InvariantCulture));
40 | }
41 |
42 | [Fact]
43 | public void MapStringTypeToCLRType_ValueIsTimeSpan_ReturnsEqualTimespanObject()
44 | {
45 | var convertedTimespan = ConversionHelper.MapStringTypeToCLRType("TimeSpan", TimeSpan.Zero);
46 | convertedTimespan.Should().Be(TimeSpan.Zero);
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/Common/Helpers/StringBodyWriter.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.ServiceModel.Channels;
25 | using System.Xml;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 | class StringBodyWriter : BodyWriter
32 | {
33 | #region Private Fields
34 | private readonly string content;
35 | #endregion
36 |
37 | #region Public Constructor
38 | public StringBodyWriter(string content)
39 | : base(true)
40 | {
41 | this.content = content;
42 | }
43 | #endregion
44 |
45 | #region Protected Methods
46 | protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
47 | {
48 | writer.WriteRaw(content);
49 | }
50 | #endregion
51 | }
52 | }
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Forms/CreateEventGridTopicForm.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Utilities.Helpers;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Data;
6 | using System.Diagnostics.Tracing;
7 | using System.Drawing;
8 | using System.Globalization;
9 | using System.Linq;
10 | using System.Reflection;
11 | using System.Runtime.ExceptionServices;
12 | using System.Text;
13 | using System.Threading.Tasks;
14 | using System.Windows.Forms;
15 |
16 | namespace ServiceBusExplorer.Forms
17 | {
18 | public partial class CreateEventGridTopicForm : Form
19 | {
20 | #region Private Constants
21 | private const string ExceptionFormat = "Exception: {0}";
22 | private readonly WriteToLogDelegate writeToLog = default!;
23 | #endregion
24 |
25 | #region Public Fields
26 | public string TopicName;
27 | #endregion
28 |
29 | public CreateEventGridTopicForm(WriteToLogDelegate writeToLog)
30 | {
31 | this.writeToLog = writeToLog;
32 | InitializeComponent();
33 | }
34 |
35 | private void btnOk_Click(object sender, EventArgs e)
36 | {
37 | try
38 | {
39 | TopicName = txtTopicName.Text;
40 | }
41 | catch (Exception ex)
42 | {
43 | HandleException(ex);
44 | }
45 |
46 | DialogResult = DialogResult.OK;
47 | }
48 |
49 | private void btnCancel_Click(object sender, EventArgs e)
50 | {
51 | DialogResult = DialogResult.Cancel;
52 | Close();
53 | }
54 |
55 | private void HandleException(Exception ex)
56 | {
57 | if (string.IsNullOrWhiteSpace(ex?.Message))
58 | {
59 | return;
60 | }
61 |
62 | writeToLog(string.Format(CultureInfo.CurrentCulture, ExceptionFormat, ex?.Message));
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/TestControlHelper.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Forms;
2 | using ServiceBusExplorer.Utilities.Helpers;
3 |
4 | using System;
5 | using System.Threading.Tasks;
6 |
7 | namespace ServiceBusExplorer.UIHelpers
8 | {
9 | internal class TestControlHelper
10 | {
11 | #region Public Constants
12 | //***************************
13 | // Formats
14 | //***************************
15 | public const string ExceptionFormat = "Exception: {0}";
16 | public const string InnerExceptionFormat = "InnerException: {0}";
17 | public const string LabelFormat = "{0:0.000}";
18 | #endregion
19 |
20 | #region Public instance properties
21 | public bool IsReadyToStoreMessageText { get; set; }
22 | public ServiceBusHelper ServiceBusHelper { get; }
23 | public MainForm MainForm { get; }
24 | public WriteToLogDelegate WriteToLog { get; }
25 | public Action StartLog { get; }
26 | public Func StopLog { get; }
27 | #endregion
28 |
29 | #region Public constructor
30 | public TestControlHelper(MainForm mainForm,
31 | WriteToLogDelegate writeToLog,
32 | Func stopLog,
33 | Action startLog,
34 | ServiceBusHelper serviceBusHelper)
35 | {
36 | MainForm = mainForm ?? throw new ArgumentNullException(nameof(mainForm));
37 | WriteToLog = writeToLog;
38 | StopLog = stopLog;
39 | StartLog = startLog;
40 | ServiceBusHelper = serviceBusHelper;
41 | }
42 | #endregion
43 |
44 | #region Public methods
45 | public void OnMessageTextChanged(string text)
46 | {
47 | if (IsReadyToStoreMessageText)
48 | {
49 | MainForm.MessageText = text;
50 | }
51 | }
52 | #endregion
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/Common/Helpers/IdAttribute.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
31 | public class IdAttribute : Attribute
32 | {
33 | #region Public Constructors
34 | public IdAttribute()
35 | {
36 | PropertyId = 0;
37 | CategoryId = 0;
38 | }
39 |
40 | public IdAttribute(int propertyId, int categoryId)
41 | {
42 | PropertyId = propertyId;
43 | CategoryId = categoryId;
44 | }
45 | #endregion
46 |
47 | #region Public Properties
48 | public int PropertyId { get; set; }
49 | public int CategoryId { get; set; }
50 | #endregion
51 | }
52 | }
--------------------------------------------------------------------------------
/src/Common/Helpers/EventProcessorCheckpointManager.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Threading.Tasks;
25 | using Microsoft.ServiceBus.Messaging;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 | public class EventProcessorCheckpointManager : ICheckpointManager
32 | {
33 | #region Public Properties
34 | public string Namespace { get; set; }
35 | public string EventHub { get; set; }
36 | public string ConsumerGroup { get; set; }
37 | #endregion
38 |
39 | #region ICheckpointManager Methods
40 | public Task CheckpointAsync(Lease lease, string offset, long sequenceNumber)
41 | {
42 | return EventProcessorCheckpointHelper.CheckpointAsync(Namespace, EventHub, ConsumerGroup, lease, offset);
43 | }
44 | #endregion
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/ServiceBus/Helpers/PurgeOperationCompletedEventArgs.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | using System;
23 |
24 | namespace ServiceBusExplorer.ServiceBus.Helpers
25 | {
26 | public class PurgeOperationCompletedEventArgs : EventArgs
27 | {
28 | public bool IsDeadLetterQueue { get; set; }
29 | public string EntityPath { get; set; }
30 | public long ElapsedMilliseconds { get; set; }
31 | public long TotalMessagesPurged { get; set; }
32 |
33 | public PurgeOperationCompletedEventArgs(string entityPath, long elapsedMilliseconds, long totalMessagesPurged, bool isDeadLetterQueue)
34 | {
35 | this.EntityPath = entityPath;
36 | this.ElapsedMilliseconds = elapsedMilliseconds;
37 | this.TotalMessagesPurged = totalMessagesPurged;
38 | this.IsDeadLetterQueue = isDeadLetterQueue;
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/AccidentalDeletionPreventionCheckControl.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace ServiceBusExplorer.Controls
6 | {
7 | public partial class AccidentalDeletionPreventionCheckControl : UserControl
8 | {
9 | #region Private Constants
10 | private const string DeletionBlockedTitle = "Deletion Blocked";
11 | private const string DeletionBlockedMessage = "The deletion will not proceed unless you indicate your intention by typing the name of the item shown.";
12 | #endregion
13 |
14 | #region Public Constructors
15 | public AccidentalDeletionPreventionCheckControl()
16 | {
17 | InitializeComponent();
18 | }
19 | #endregion
20 |
21 | #region Public Properties
22 | public string DeletionScopePromptText
23 | {
24 | get => lblDeletionScopePromptText.Text;
25 | set => lblDeletionScopePromptText.Text = value;
26 | }
27 |
28 | public bool DisableFurtherChecks
29 | {
30 | get => chkDisableAccidentalDeletionPrevention.Checked;
31 | set => chkDisableAccidentalDeletionPrevention.Checked = value;
32 | }
33 | #endregion
34 |
35 | #region Public Methods
36 | public bool CheckAcceptanceAndNotifyUser()
37 | {
38 | bool isAccepted = string.Equals(
39 | txtDeletionScopePromptCheck.Text.Trim(),
40 | lblDeletionScopePromptText.Text,
41 | StringComparison.InvariantCultureIgnoreCase);
42 |
43 | if (!isAccepted)
44 | {
45 | MessageBox.Show(
46 | FindForm(),
47 | DeletionBlockedMessage,
48 | DeletionBlockedTitle,
49 | MessageBoxButtons.OK,
50 | MessageBoxIcon.Warning);
51 | }
52 |
53 | return isAccepted;
54 | }
55 | #endregion
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/MonitorRuleList.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections.Generic;
25 | using System.Xml.Serialization;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.UIHelpers
30 | {
31 | [XmlRoot(ElementName = "MonitorRules", Namespace = "http://schemas.microsoft.com/servicebusexplorer")]
32 | [XmlType(TypeName = "MonitorRules", Namespace = "http://schemas.microsoft.com/servicebusexplorer")]
33 | public class MonitorRuleList : List
34 | {
35 | #region Public Constructors
36 | public MonitorRuleList()
37 | {}
38 |
39 | public MonitorRuleList(int capacity): base(capacity)
40 | {}
41 |
42 | public MonitorRuleList(IEnumerable collection)
43 | : base(collection)
44 | {}
45 | #endregion
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/Utilities/Helpers/XmlLinqExtensions.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Xml.Linq;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Utilities.Helpers
29 | {
30 | public static class XmlLinqExtensions
31 | {
32 | public static XElement AquireElement(this XContainer container,
33 | string name, bool addFirst = false)
34 | {
35 | var element = container.Element(name);
36 |
37 | if (null != element)
38 | {
39 | return element;
40 | }
41 |
42 | element = new XElement(name);
43 |
44 | if (addFirst)
45 | {
46 | container.AddFirst(element);
47 | }
48 | else
49 | {
50 | container.Add(element);
51 | }
52 |
53 | return element;
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/ProviderInstaller.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.ComponentModel;
25 | using ServiceBusExplorer.Helpers;
26 |
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.UIHelpers
31 | {
32 | public static class ProviderInstaller
33 | {
34 | #region Public Static Methods
35 | public static DynamicCustomTypeDescriptor Install(object instance)
36 | {
37 | var parentProvider = TypeDescriptor.GetProvider(instance);
38 | var parentCtd = parentProvider.GetTypeDescriptor(instance);
39 | var ourCtd = new DynamicCustomTypeDescriptor(parentCtd, instance);
40 | var ourProvider = new CustomTypeDescriptionProvider(parentProvider, ourCtd);
41 | TypeDescriptor.AddProvider(ourProvider, instance);
42 | return ourCtd;
43 | }
44 | #endregion
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/ServiceBusExplorer.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 | servicebusexplorer
4 | Service Bus Explorer
5 | $version$
6 | Paolo Salvatori
7 | Paolo Salvatori
8 | The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.
9 | The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.
10 | https://github.com/paolosalvatori/ServiceBusExplorer
11 | https://github.com/paolosalvatori/ServiceBusExplorer
12 | https://github.com/paolosalvatori/ServiceBusExplorer
13 | servicebusexplorer azure azureservicebus servicebus explorer eventhub queue subscription relay notificationhub
14 | Copyright 2017 Paolo Salvatori
15 | https://github.com/paolosalvatori/ServiceBusExplorer#license
16 | false
17 | https://raw.githubusercontent.com/paolosalvatori/ServiceBusExplorer/main/src/ServiceBusExplorer/Icons/NewServiceBusExplorerLogo.ico
18 | https://github.com/paolosalvatori/ServiceBusExplorer/wiki
19 | https://github.com/paolosalvatori/ServiceBusExplorer/releases
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/NotificationHubs/NotificationHubs.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {E836C914-9BFE-4C1C-96E5-6A414CDEF485}
4 | ServiceBusExplorer.NotificationHubs
5 | ServiceBusExplorer.NotificationHubs
6 | 1.0.0.1
7 | net472
8 | NotificationHubs
9 | NotificationHubs
10 | Copyright © 2019
11 | bin\$(Configuration)\
12 | 7035
13 |
14 |
15 | full
16 | True
17 |
18 |
19 | pdbonly
20 | True
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | ExeInternalDependencyValidation.layerdiagram
35 | False
36 |
37 |
38 | AssemblyDependencyValidation.layerdiagram
39 | False
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/Relay/Helpers/RelayWrapper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Relay.Helpers
29 | {
30 | ///
31 | /// This class contains the information of a Relay
32 | ///
33 | public class RelayWrapper
34 | {
35 | #region Public Constructors
36 | ///
37 | /// Initializes a new instance of the RelayWrapper class.
38 | ///
39 | /// The service name.
40 | /// The service uri.
41 | public RelayWrapper(string name, Uri uri)
42 | {
43 | Name = name;
44 | Uri = uri;
45 | }
46 | #endregion
47 |
48 | #region Public Properties
49 | public string Name { get; set; }
50 | public Uri Uri { get; set; }
51 | #endregion
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/.github/workflows/winget-submission.yml:
--------------------------------------------------------------------------------
1 | name: WinGet submission on release
2 | # based off of https://github.com/microsoft/PowerToys/blob/main/.github/workflows/package-submissions.yml and https://github.com/microsoft/terminal/blob/main/.github/workflows/winget.yml
3 |
4 | on:
5 | release:
6 | types: [published]
7 |
8 | env:
9 | VERSION_REGEX: 'ServiceBusExplorer-([\d.]+)(?:-preview)?\.zip$'
10 |
11 | # winget-create will read the following environment variable to access the GitHub token needed for submitting a PR
12 | # See https://aka.ms/winget-create-token
13 | WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.WINGET_TOKEN }}
14 |
15 | jobs:
16 | winget:
17 | name: Publish winget package
18 | runs-on: windows-2022
19 | steps:
20 | - name: Submit PaoloSalvatori.ServiceBusExplorer ${{ github.event.release.prerelease && 'Preview' || 'Stable' }}
21 | run: |
22 |
23 | $assets = '${{ toJSON(github.event.release.assets) }}' | ConvertFrom-Json
24 | $wingetRelevantAsset = $assets | Where-Object { $_.name -like '*.zip' } | Select-Object -First 1
25 | $regex = [Regex]::New($env:VERSION_REGEX)
26 | $version = $regex.Match($wingetRelevantAsset.name).Groups[1].Value
27 |
28 | if ($version -eq '') {
29 | Write-Error "Version not found in asset name: $($wingetRelevantAsset.name)"
30 | exit 1
31 | } else {
32 | Write-Host "Version found: $version"
33 | }
34 |
35 | $wingetPackage = "PaoloSalvatori.ServiceBusExplorer${{ github.event.release.prerelease && '.Preview' || '' }}"
36 | Write-Host "Winget package: $wingetPackage"
37 |
38 | # URL
39 | $zipUrl = $wingetRelevantAsset.browser_download_url
40 | write-host "URL: $zipUrl"
41 |
42 | # Get the latest wingetcreate file
43 | Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe
44 |
45 | # Submit a PR for the package
46 | .\wingetcreate.exe update $wingetPackage --submit --version $version --urls "$zipUrl|x64"
47 |
48 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Forms/EventGridConnectForm.cs:
--------------------------------------------------------------------------------
1 | using ServiceBusExplorer.Helpers;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Windows.Forms;
6 |
7 | namespace ServiceBusExplorer.Forms
8 | {
9 | public partial class EventGridConnectForm : Form
10 | {
11 | #region Public Fields
12 | public string ResourceGroup;
13 | public string NamespaceName;
14 | public string SubscriptionId;
15 | public string ApiVersion;
16 | public int RetryTimeout;
17 | public string CloudTenant;
18 | public string CustomId;
19 | public List SelectedEntities = new List { Constants.TopicEntities, Constants.SubscriptionEntities };
20 | #endregion
21 |
22 | public EventGridConnectForm()
23 | {
24 | InitializeComponent();
25 | }
26 |
27 | private void customCloud_CheckedChanged(object sender, EventArgs e)
28 | {
29 | txtCustomId.Enabled = btnCustomCloud.Checked;
30 | }
31 |
32 | private void btnOk_Click(object sender, EventArgs e)
33 | {
34 | ResourceGroup = txtResourceGroupName.Text.Trim();
35 | NamespaceName = txtNamespaceName.Text.Trim();
36 | SubscriptionId = txtSubscriptionId.Text.Trim();
37 | ApiVersion = cboApiVersion.Text.Trim();
38 |
39 | int.TryParse(txtRetryTimeout.Text, out var retryTimoutInSeconds);
40 | RetryTimeout = retryTimoutInSeconds;
41 | CloudTenant = cloudGroupBox.Controls.OfType().FirstOrDefault(r => r.Checked).Text;
42 | CustomId = txtCustomId.Text?.Trim();
43 |
44 | DialogResult = DialogResult.OK;
45 | }
46 |
47 | private void btnCancel_Click(object sender, EventArgs e)
48 | {
49 | DialogResult = DialogResult.Cancel;
50 | Close();
51 | }
52 |
53 | private void EventGridConnectForm_Load(object sender, EventArgs e)
54 | {
55 | cboApiVersion.SelectedIndex = 0;
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/AssemblyVersionShould.cs:
--------------------------------------------------------------------------------
1 | using FluentAssertions;
2 | using System;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Reflection;
6 | using System.Xml;
7 | using Xunit;
8 |
9 | namespace ServiceBusExplorer.Tests
10 | {
11 | public class AssemblyVersionShould
12 | {
13 | private const string CSharpProjectExtension = ".csproj";
14 |
15 | [Fact]
16 | public void BeSameAsSetInProject()
17 | {
18 | var assemblyNames = Directory.GetFiles(".", "ServiceBus*.*")
19 | .Where(x=>x.EndsWith(".dll") || x.EndsWith(".exe"));
20 |
21 | var projectFiles = Directory.GetFiles("../../../../", $"*{CSharpProjectExtension}", SearchOption.AllDirectories);
22 |
23 | var xmlDocument = new XmlDocument();
24 |
25 | var expectedVersions = projectFiles.Select(x =>
26 | {
27 | xmlDocument.Load(x);
28 | var assemblyVersionNode = xmlDocument.SelectSingleNode("//AssemblyVersion");
29 | var assemblyNameNode = xmlDocument.SelectSingleNode("//AssemblyName");
30 |
31 | return new
32 | {
33 | assemblyName = assemblyNameNode?.InnerText ?? ExtractProjectName(x),
34 | assemblyVersion= assemblyVersionNode.InnerText
35 | };
36 | }).ToArray() ;
37 |
38 | var actualAssemblyVersions = assemblyNames.Select(x=>
39 | {
40 | var assembly = Assembly.LoadFrom(x);
41 | return new
42 | {
43 | assemblyName = assembly.GetName().Name,
44 | assemblyVersion = assembly.GetName().Version.ToString()
45 | };
46 | }).ToArray();
47 |
48 | actualAssemblyVersions.Should().HaveCount(9).And.BeEquivalentTo(expectedVersions);
49 | }
50 |
51 | private string ExtractProjectName(string x)
52 | {
53 | return new FileInfo(x).Name.Replace(CSharpProjectExtension, string.Empty);
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/Common/Helpers/LockDurationTooLowException.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Runtime.Serialization;
26 |
27 | #endregion
28 |
29 |
30 | namespace ServiceBusExplorer.Helpers
31 | {
32 | [Serializable]
33 | public class LockDurationTooLowException : Exception
34 | {
35 | #region Public constructors
36 | public LockDurationTooLowException()
37 | {
38 | }
39 |
40 | public LockDurationTooLowException(string message) : base(message)
41 | {
42 | }
43 |
44 | public LockDurationTooLowException(string message, Exception innerException) : base(message, innerException)
45 | {
46 | }
47 | #endregion
48 |
49 | #region Protected constructor
50 | protected LockDurationTooLowException(SerializationInfo info, StreamingContext context) : base(info, context)
51 | {
52 | }
53 | #endregion
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/Common/Helpers/CustomTypeDescriptionProvider.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.ComponentModel;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 | public class CustomTypeDescriptionProvider : TypeDescriptionProvider
32 | {
33 | #region Private Fields
34 |
35 | private readonly ICustomTypeDescriptor customTypeDescriptor;
36 | #endregion
37 |
38 | #region Public Constructors
39 | public CustomTypeDescriptionProvider(TypeDescriptionProvider parent, ICustomTypeDescriptor ctd)
40 | : base(parent)
41 | {
42 | customTypeDescriptor = ctd;
43 | }
44 | #endregion
45 |
46 | #region Public Methods
47 | public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
48 | {
49 | return customTypeDescriptor;
50 | }
51 | #endregion
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/Common/Helpers/ServiceBusHelperEventArgs.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using ServiceBusExplorer.Enums;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 | ///
32 | /// This class represents the arguments for the events of the ServiceBusHelper
33 | ///
34 | public class ServiceBusHelperEventArgs : EventArgs
35 | {
36 | #region Public Constructors
37 | public ServiceBusHelperEventArgs()
38 | {
39 | EntityInstance = null;
40 | }
41 |
42 | public ServiceBusHelperEventArgs(dynamic entityInstance, EntityType entityType)
43 | {
44 | EntityInstance = entityInstance;
45 | EntityType = entityType;
46 | }
47 | #endregion
48 |
49 | #region Public Constructors
50 | public dynamic EntityInstance { get; set; }
51 | public EntityType EntityType { get; set; }
52 | #endregion
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/Common/Helpers/UrlSegmentWrapper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using ServiceBusExplorer.Enums;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 |
32 | ///
33 | /// This class contains the information of a Url Segment
34 | ///
35 | public class UrlSegmentWrapper
36 | {
37 | #region Public Constructors
38 | ///
39 | /// Initializes a new instance of the UrlSegmentWrapper class.
40 | ///
41 | /// The entity type.
42 | /// The url segment uri.
43 | public UrlSegmentWrapper(EntityType type, Uri uri)
44 | {
45 | EntityType = type;
46 | Uri = uri;
47 | }
48 | #endregion
49 |
50 | #region Public Properties
51 | public EntityType EntityType { get; set; }
52 | public Uri Uri { get; set; }
53 | #endregion
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/ServiceBusExplorer.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {41D3C27D-37FF-43B8-AAC0-4F483E507698}
4 | net472
5 | latest
6 | ServiceBusExplorer.Tests
7 | 1.0.0.1
8 | Microsoft
9 | ServiceBusExplorer.Tests
10 | Copyright © Microsoft 2016
11 | bin\$(Configuration)\
12 | 7035
13 |
14 |
15 | True
16 |
17 |
18 | True
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/ScrollBarHelper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Runtime.InteropServices;
26 | using System.Windows.Forms;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.UIHelpers
31 | {
32 | class ScrollBarHelper
33 | {
34 | public static ScrollBars GetVisibleScrollbars(Control ctl)
35 | {
36 | var wndStyle = NativeMethods.GetWindowLong(ctl.Handle, Win32.GwlStyle);
37 | var hsVisible = (wndStyle & Win32.WsHscroll) != 0;
38 | var vsVisible = (wndStyle & Win32.WsVscroll) != 0;
39 |
40 | if (hsVisible)
41 | return vsVisible ? ScrollBars.Both : ScrollBars.Horizontal;
42 | return vsVisible ? ScrollBars.Vertical : ScrollBars.None;
43 | }
44 | }
45 |
46 | public class Win32
47 | {
48 | // offset of window style value
49 | public const int GwlStyle = -16;
50 |
51 | // window style constants for scrollbars
52 | public const int WsVscroll = 0x00200000;
53 | public const int WsHscroll = 0x00100000;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/Controls/ReadOnlyPropertyGrid.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 | using System;
24 | using System.ComponentModel;
25 | using System.Windows.Forms;
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Controls
29 | {
30 | public class ReadOnlyPropertyGrid : PropertyGrid
31 | {
32 | private bool readOnly;
33 |
34 | public bool ReadOnly
35 | {
36 | get { return readOnly; }
37 | set
38 | {
39 | readOnly = value;
40 | SetObjectAsReadOnly();
41 | }
42 | }
43 |
44 | protected override void OnSelectedObjectsChanged(EventArgs e)
45 | {
46 | SetObjectAsReadOnly();
47 | base.OnSelectedObjectsChanged(e);
48 | }
49 |
50 | private void SetObjectAsReadOnly()
51 | {
52 | if (SelectedObject == null)
53 | {
54 | return;
55 | }
56 | TypeDescriptor.AddAttributes(SelectedObject, new Attribute[] { new ReadOnlyAttribute(readOnly) });
57 | Refresh();
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/DictionaryPropertyDescriptor.cs:
--------------------------------------------------------------------------------
1 | namespace ServiceBusExplorer.UIHelpers
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using System.ComponentModel;
6 | using System.Drawing.Design;
7 |
8 | public class DictionaryPropertyDescriptor : PropertyDescriptor
9 | where TValue : class
10 | {
11 | private readonly IDictionary _dictionary;
12 | private readonly TKey _key;
13 |
14 | internal DictionaryPropertyDescriptor(IDictionary dictionary, TKey key, bool isReadOnly)
15 | : base(key.ToString(), null)
16 | {
17 | _dictionary = dictionary;
18 | _key = key;
19 | IsReadOnly = isReadOnly;
20 | }
21 |
22 | public override Type PropertyType => _dictionary[_key]?.GetType();
23 |
24 | public override void SetValue(object component, object value)
25 | {
26 | _dictionary[_key] = value as TValue;
27 | }
28 |
29 | public override object GetValue(object component)
30 | {
31 | return _dictionary[_key];
32 | }
33 |
34 | public override bool IsReadOnly { get; }
35 |
36 | public override Type ComponentType => null;
37 |
38 | public override bool CanResetValue(object component)
39 | {
40 | return false;
41 | }
42 |
43 | public override void ResetValue(object component)
44 | {
45 | }
46 |
47 | public override bool ShouldSerializeValue(object component)
48 | {
49 | return false;
50 | }
51 |
52 | public override object GetEditor(Type editorBaseType)
53 | {
54 | if (editorBaseType == typeof(UITypeEditor))
55 | {
56 | if (PropertyType == typeof(string))
57 | {
58 | var value = _dictionary[_key] as string;
59 | if (value != null && (value.Contains("\n") || value.Contains("\r")))
60 | {
61 | return new System.ComponentModel.Design.MultilineStringEditor();
62 | }
63 | }
64 | }
65 |
66 | return base.GetEditor(editorBaseType);
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/ControlHelper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Runtime.InteropServices;
26 | using System.Windows.Forms;
27 |
28 | #endregion
29 |
30 | namespace ServiceBusExplorer.UIHelpers
31 | {
32 | public static class ControlHelper
33 | {
34 | #region Redraw Suspend/Resume
35 | private const int WmSetredraw = 0xB;
36 | public static void SuspendDrawing(this Control target)
37 | {
38 | NativeMethods.SendMessage(target.Handle, WmSetredraw, 0, 0);
39 | }
40 |
41 | public static void ResumeDrawing(this Control target)
42 | {
43 | ResumeDrawing(target, true);
44 | }
45 |
46 | public static void ResumeDrawing(this Control target, bool redraw)
47 | {
48 | NativeMethods.SendMessage(target.Handle, WmSetredraw, 1, 0);
49 | if (redraw)
50 | {
51 | target.Refresh();
52 | }
53 | }
54 | #endregion
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/Common/Helpers/CustomMessageSessionAsyncHandlerFactory.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using Microsoft.ServiceBus.Messaging;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public class CustomMessageSessionAsyncHandlerFactory : IMessageSessionAsyncHandlerFactory
31 | {
32 | #region Public Properties
33 | public CustomMessageSessionAsyncHandlerConfiguration Configuration { get; set; }
34 | #endregion
35 |
36 | #region Public Constructor
37 | public CustomMessageSessionAsyncHandlerFactory(CustomMessageSessionAsyncHandlerConfiguration configuration)
38 | {
39 | Configuration = configuration;
40 | }
41 | #endregion
42 |
43 | #region IMessageSessionAsyncHandlerFactory Methods
44 | public IMessageSessionAsyncHandler CreateInstance(MessageSession session, BrokeredMessage message)
45 | {
46 | return new CustomMessageSessionAsyncHandler(Configuration);
47 | }
48 |
49 | public void DisposeInstance(IMessageSessionAsyncHandler handler)
50 | {
51 | }
52 | #endregion
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/Common/Helpers/PropertyStateFlagsAttribute.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using ServiceBusExplorer.Utilities.Helpers;
25 | using System;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.Helpers
30 | {
31 | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
32 | public class PropertyStateFlagsAttribute : Attribute
33 | {
34 | #region Private Fields
35 | private PropertyFlags mFlags = PropertyFlags.All & ~PropertyFlags.ExclusiveStandardValues;
36 | #endregion
37 |
38 | #region Public Constructors
39 | public PropertyStateFlagsAttribute()
40 | {
41 |
42 | }
43 | public PropertyStateFlagsAttribute(PropertyFlags flags)
44 | {
45 | mFlags = flags;
46 | }
47 | #endregion
48 |
49 | #region Public Properties
50 | public PropertyFlags Flags
51 | {
52 | get
53 | {
54 | return mFlags;
55 | }
56 | set
57 | {
58 | mFlags = value;
59 | }
60 | }
61 | #endregion
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/Common/Helpers/CustomMessageSessionAsyncHandlerConfiguration.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.ServiceModel.Channels;
26 | using ServiceBusExplorer.Utilities.Helpers;
27 | using Microsoft.ServiceBus.Messaging;
28 |
29 | #endregion
30 |
31 | namespace ServiceBusExplorer.Helpers
32 | {
33 | public class CustomMessageSessionAsyncHandlerConfiguration
34 | {
35 | #region Public Properties
36 | public bool Logging { get; set; }
37 | public bool Tracking { get; set; }
38 | public bool Verbose { get; set; }
39 | public bool AutoComplete { get; set; }
40 | public MessageEncoder MessageEncoder { get; set; }
41 | public ReceiveMode ReceiveMode { get; set; }
42 | public Func TrackMessage { get; set; }
43 | public Func GetElapsedTime { get; set; }
44 | public Action UpdateStatistics { get; set; }
45 | public IBrokeredMessageInspector MessageInspector { get; set; }
46 | public WriteToLogDelegate WriteToLog { get; set; }
47 | public ServiceBusHelper ServiceBusHelper { get; set; }
48 | #endregion
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/.github/workflows/handle-tag.yml:
--------------------------------------------------------------------------------
1 | name: Handle tag
2 |
3 | on:
4 | push:
5 | tags:
6 | - '[0-9]+.[0-9]+.[0-9]+*'
7 | workflow_dispatch:
8 |
9 | jobs:
10 | check-tag-branch:
11 | # This job is based on replies in https://github.community/t/how-to-create-filter-on-both-tag-and-branch/16936/6
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Get tag commit hash
15 | id: tag-commit-hash
16 | run: |
17 | hash=${{ github.sha }}
18 | echo "{name}=tag-hash::${hash}" >> $GITHUB_OUTPUT
19 | echo $hash
20 |
21 | - name: Checkout main
22 | uses: actions/checkout@v4
23 | with:
24 | ref: main
25 |
26 | - name: Get latest main commit hash
27 | id: main-commit-hash
28 | run: |
29 | hash=$(git log -n1 --format=format:"%H")
30 | echo "{name}=main-hash::${hash}" >> $GITHUB_OUTPUT
31 | echo $hash
32 |
33 | - name: Verify tag commit matches main commit - exit if they don't match
34 | if: steps.tag-commit-hash.outputs.tag-hash != steps.main-commit-hash.outputs.main-hash
35 | run: |
36 | echo "Tag was not on the main branch. Exiting."
37 | exit 1
38 |
39 | get-version:
40 | runs-on: windows-2022
41 | steps:
42 | - name: Get version from tag
43 | id: extract-tag
44 | shell: bash
45 | run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
46 |
47 | - name: Check output to get version number
48 | run: |
49 | echo "release_version is $env:RELEASE_VERSION"
50 | if ($env:RELEASE_VERSION -eq $null -or $env:RELEASE_VERSION -eq '') {
51 | echo "Setting release version to 0.0.0"
52 | echo "RELEASE_VERSION=0.0.0" >> $env:GITHUB_ENV
53 | }
54 |
55 | outputs:
56 | release-version: ${{ env.RELEASE_VERSION }}
57 |
58 | call-build-test:
59 | needs: [check-tag-branch, get-version]
60 | uses: ./.github/workflows/build-test.yml
61 | with:
62 | release-version: ${{ needs.get-version.outputs.release-version }}
63 | cache-build: true
64 |
65 | publish-it:
66 | needs: [check-tag-branch, get-version, call-build-test]
67 | uses: ./.github/workflows/publish.yml
68 | secrets:
69 | CHOCO_TOKEN: ${{ secrets.CHOCOTOKEN }}
70 | with:
71 | release-version: ${{ needs.get-version.outputs.release-version }}
72 |
73 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer/UIHelpers/MonitorRule.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Windows.Forms.DataVisualization.Charting;
25 | using System.Xml.Serialization;
26 |
27 | #endregion
28 |
29 | namespace ServiceBusExplorer.UIHelpers
30 | {
31 | public enum MonitorState
32 | {
33 | Normal,
34 | Warning,
35 | Critical
36 | }
37 |
38 | public class MonitorRule
39 | {
40 | #region Private Fields
41 | private MonitorState monitorState = MonitorState.Normal;
42 | #endregion
43 |
44 | #region Public Properties
45 | public string Entity { get; set; }
46 | public string Type { get; set; }
47 | public string Monitor { get; set; }
48 | public long Warning { get; set; }
49 | public long Critical { get; set; }
50 | public long Current { get; set; }
51 | public bool Valid { get; set; }
52 | [XmlIgnore]
53 | public Series Series { get; set; }
54 | [XmlIgnore]
55 | public MonitorState State
56 | {
57 | get { return monitorState; }
58 | set { monitorState = value; }
59 | }
60 | #endregion
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/Common/Helpers/CustomMessageHeaderInfo.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System.Collections.Generic;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | public class CustomMessageHeaderInfo
31 | {
32 | #region Public Constructors
33 | public CustomMessageHeaderInfo()
34 | {
35 |
36 | Name = null;
37 | Namespace = null;
38 | Value = null;
39 | }
40 |
41 | public CustomMessageHeaderInfo(string key, string type, string value)
42 | {
43 | Name = key;
44 | Namespace = type;
45 | Value = value;
46 | }
47 | #endregion
48 |
49 | #region Static Constructor
50 | static CustomMessageHeaderInfo()
51 | {
52 | Headers = new List();
53 | }
54 | #endregion
55 |
56 | #region Public Instance Properties
57 | public string Name { get; set; }
58 | public string Namespace { get; set; }
59 | public string Value { get; set; }
60 | #endregion
61 |
62 | #region Public Static Properties
63 | public static List Headers { get; set; }
64 | #endregion
65 | }
66 | }
--------------------------------------------------------------------------------
/src/Common/Helpers/UserPropertyWrapper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using System;
25 | using System.Collections.Generic;
26 | using System.Linq;
27 |
28 | #endregion
29 |
30 |
31 | namespace ServiceBusExplorer.Helpers
32 | {
33 | public class UserPropertyWrapper
34 | {
35 | #region Private Fields
36 | private string name;
37 | private object val;
38 | #endregion
39 |
40 | #region Public Constructor
41 | public UserPropertyWrapper()
42 | {
43 | }
44 |
45 | public UserPropertyWrapper(KeyValuePair property)
46 | {
47 | name = property.Key;
48 | val = property.Value;
49 | }
50 | #endregion
51 |
52 | #region Public Properties
53 | public string Name
54 | {
55 | get
56 | {
57 | return name;
58 | }
59 | set
60 | {
61 | name = value;
62 | }
63 | }
64 |
65 | public object Value
66 | {
67 | get
68 | {
69 | return val;
70 | }
71 | set
72 | {
73 | val = value;
74 | }
75 | }
76 | #endregion
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/Common/Helpers/RuleWrapper.cs:
--------------------------------------------------------------------------------
1 | #region Copyright
2 | //=======================================================================================
3 | // Microsoft Azure Customer Advisory Team
4 | //
5 | // This sample is supplemental to the technical guidance published on my personal
6 | // blog at http://blogs.msdn.com/b/paolos/.
7 | //
8 | // Author: Paolo Salvatori
9 | //=======================================================================================
10 | // Copyright (c) Microsoft Corporation. All rights reserved.
11 | //
12 | // LICENSED UNDER THE APACHE LICENSE, VERSION 2.0 (THE "LICENSE"); YOU MAY NOT USE THESE
13 | // FILES EXCEPT IN COMPLIANCE WITH THE LICENSE. YOU MAY OBTAIN A COPY OF THE LICENSE AT
14 | // http://www.apache.org/licenses/LICENSE-2.0
15 | // UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE DISTRIBUTED UNDER THE
16 | // LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 | // KIND, EITHER EXPRESS OR IMPLIED. SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING
18 | // PERMISSIONS AND LIMITATIONS UNDER THE LICENSE.
19 | //=======================================================================================
20 | #endregion
21 |
22 | #region Using Directives
23 |
24 | using Microsoft.ServiceBus.Messaging;
25 |
26 | #endregion
27 |
28 | namespace ServiceBusExplorer.Helpers
29 | {
30 | ///
31 | /// This class adds a Subscriptions collection to the TopicDescription class
32 | ///
33 | public class RuleWrapper
34 | {
35 | #region Public Constructors
36 | ///
37 | /// Initializes a new instance of the RuleWrapper class.
38 | ///
39 | public RuleWrapper()
40 | {
41 | RuleDescription = null;
42 | SubscriptionDescription = null;
43 | }
44 |
45 | ///
46 | /// Initializes a new instance of the RuleWrapper class.
47 | ///
48 | /// A rule.
49 | /// A subscription.
50 | public RuleWrapper(RuleDescription rule, SubscriptionDescription subscription)
51 | {
52 | RuleDescription = rule;
53 | SubscriptionDescription = subscription;
54 | }
55 | #endregion
56 |
57 | #region Public Properties
58 | public RuleDescription RuleDescription { get; set; }
59 | public SubscriptionDescription SubscriptionDescription { get; set; }
60 | #endregion
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/ServiceBusExplorer.Tests/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------