1.0.0-Beta6
Pre-releaseIntroduction
ServiceInsight provides debugging and analysis capabilities for your NServiceBus system.
I provides under-the-hood view of the your system's behaviour, clearly displayed and visualized, immediately available and up-to-date.
ServiceInsight features are valuable in development, testing and production environments
http://docs.particular.net/ServiceInsight/getting-started-overview
Prerequisites
- Microsoft .NET Framework 4.5
- ServiceControl
- ServiceInsight connects to and relies on ServiceControl' audit database for its information and functionality
- See ServiceControl release notes for guidance on installation and configuration.
- ServiceControl can be installed on the local machine or on a remote machine that is accessible (via HTTP) to ServiceInsight
Optional components
- ServiceMatrix
- ServiceMatrix enables you to generate a fully functional distributed application skeleton in a matter of minutes, dramatically reducing the learning curve, POC effort and time-to-market of distributed systems development with NServicebus.
- ServiceInsight integrates with ServiceMatrix during development and debugging, allowing you to quickly visualize the run-time behavior of your designed NServiceBus system, and quickly iterate from design to run-time views of your system.
- ServicePulse
- ServicePulse is a production monitoring tool that allows you to monitor and detect any issues with your NServiceBus endpoints and messages.
- ServiceInsight integrates with ServicePulse, allowing you to access detailed failure information and context visualizations
- See ServicePulse release notes for guidance on installation and configuration.
Installation
- Run the ServiceInsight installer
- By default, the installer will add desktop and programs shortcuts to ServiceInsight
Connecting to ServiceControl
- Following the installation, when first launching ServiceInsight, it will try to connect to a local ServiceControl instance (http://localhost:33333/api/)
- If there is no ServiceControl instance running on the local machine, you can use the ServiceInsight user interface to connect to any accessible ServiceControl URI, by clicking on the menu "Tools" > "Connect to ServiceControl" or clicking the "Connect" toolbat button
- The ServiceControl URI is comprised of the ServiceControl hostname and IP port. By default it is set to localhost with the default port 33333 (http://localhost:33333/api/). Both are configurable.
Troubleshooting:
- Unable to connect to ServiceControl URI
- See ServiceControl Release Notes troubleshooting section
- ServiceInsight connects to ServiceControl through standard HTTP calls
- You can view the connection and requests logs in the "Logs" tab (at the bottom of the ServiceInsight screen).
- The "Logs" window details every request made to ServiceControl, including its request parameters, headers and response headers (the request info detailed in the "Logs" window can be re-run through any HTTP / REST client application)
- Make sure the ServiceControl URI is accessible from the calling machine, using a standard HTTP / REST client
- Make sure that ServiceInsight is allowed (by firewall / security settings) to make HTTP requests to the ServiceControl URI
- ServiceInsight UI display is not responding
- This may be due to changes in layout engine from previous beta preview versions of ServiceInsight
- To resolve this issue, delete the layout settings file:
- Close ServiceInsight
- Navigate to
C:\Users{current-user}\AppData\Roaming\IsolatedStorage
- Inside the IsolatedStorage directory structure, locate the file
ShellLayout.settings
- Delete
ShellLayout.settings
- Start ServiceInsight (this will re-create
ShellLayout.settings
)
Logging
http://docs.particular.net/ServiceInsight/how-logging-works
Changes from previous Beta releases
- Removal of QueueExplorer MSMQ management feature
- Beta 5 - complete list of changes and updates from previous beta releases
Issues fixed
This release consist of these issues that were achieved through these commits.
Features
#240 Create a Chocolatey package
- Since chocolatey packages are limited in size the large binary component will be stored in github releases
- Dependency on .net 4.5 http://chocolatey.org/packages/DotNet4.5
- Remove hard coding of version here https://github.com/Particular/ServiceInsight/blob/develop/src/Chocolatey/chocolateyInstall.ps1
- Add icon Particular/PlatformInstaller#27
- Support uninstall
- Make Silent
- Add logging http://www.advancedinstaller.com/user-guide/qa-log.html
#74 Support Timeout Requested / Timeout Invoked links
- When a timeout is requested, the Saga information displays a title for "Timeout Requested" with the specified timeout timespan (see highlight in image below)
- If the timeout has not yet been invoked, the "Timeout Requested" is not a link
- If the timeout has been invoked, the "Timeout Requested" is a link to the message resulting from the timeout invocation.
- Clicking on the "Timeout Requested" link leads the user to focus on the "Timeout Invoked" message next to the relevant message processed after the timeout period (see highlight in image below)
#73 Support Endpoint toggling for messages in Saga View
Message Endpoint toggling is applicable for Incoming, Outgoing and Timeout messages.
Improvements
#239 Display the message schema in the SagaView
Currently the Saga State Change diagram, displays the incoming messages, the outgoing messages and how each message changes the Saga state.
Enhance the UI such that there is an option available to the user such that:
- By a one click toggle, the user can choose to view the Saga state changes and the message schema for each message that participates in the saga.
- The user can turn off this option so that the saga view defaults to not showing the schema for all the messages.
#232 Remove Loading banner when selecting messages
The following banner is displayed every time we select a different message, that actually prevents a user from interacting with the list for that duration:
I propose we:
- Only show that loading when list is being populated
- Add a new loading to the bottom screen widgets when message is selected (the ones that are actually doing the loading at that stage)
The loading of message details should not lock the list.
#226 Add support for "Archived" status indication
- See Particular/ServiceControl#211
- We need to add a status icon (to be displayed in the status column of Message list) for "Archived"
- "Archived" messages are failed messages that the user chose (through an explicit action in SP) to archive (i.e. remove from failed message list, since they are not longer retry-able, for various reasons). See Particular/ServicePulse#73
- "Archived" messages cannot be "retried"
#221 Timeout messages should have a dedicated icon
- Timeout messages (like "BuyersRemorseIsOver" in VideoStore) currently have a standard "Command" icons (see image below)
- It would be more accurate to provide them with a "timer" icon
- Tooltip should be changed to:
- When hovering above message icon: "Saga Timeout Message"
- When hovering above the connecting line from the message sending the Timeout message to the timeout message: "Requested Saga Timeout"
- Note this applies to all timeout message, also in Saga View (identified by the "IsSagaTimeoutMessage" = True)
// CC @sergioc , @HEskandari, @udidahan
#219 Information Icon design and implementation
- Need to design and update the information "i" icon
- See images below
This also applies to the re-design of the Options dialog. see #208
Raised by @HEskandari on #200
#212 Additional keyboard shortcuts for zooming
Zoom In - CTRL = +
Zoom out - CTRL -
Default Zoom (100%) - CTRL 0
#211 Show Windows Move cursor when mouse pointer is on empty area of diagram canvas
#209 Proper design of No Saga
When there is no saga, the tab is still visible and it loos like this:
I'm sure @sergioc will love it, but maybe suggest a few changes to make it even better?
//cc @dannycohen @HEskandari
#194 Remove the "Copy Message Id" menu item
- Related to #193
- After the implementation of "Select Message" menu item, the "Copy Message Id" menu item is redundant (a user can copy the message id from the message properties or use the Message URI)
#193 Selecting a message in the Message Flow
Goal
- As a user of SI, I would like to be able to select a message in the message flow (or in other visualizations, like Saga View)
- Once that message is selected, the message's information is available in the Message Properties and I can view message body
User experience
- Add a "Select Message" menu item in the context menu of the message entity
- Clicking "Select Message" menu item performs a search for the specific message (i.e. using the search functionality, displaying the Message Id in the search textbox etc.)
- Change the selected endpoint to be the processing endpoint of that message
- Multiple messages may have the same message id, for example, if multiple endpoints receive an event, all the received event messages will have the same message id, but different processing endpoints.
Content trimmed. See full issue
- Multiple messages may have the same message id, for example, if multiple endpoints receive an event, all the received event messages will have the same message id, but different processing endpoints.
#191 Clear old data from Logs tab after X requests
Current status
- When leaving SI running in the background with Auto-Refresh on, the Logs data in the Logs pane becomes very large, up to the point of resource exhaustion on the SI client machine
Requested behavior
- When the data in the Logs pane reaches size X, clear the older data
- Lets set X as 10000 lines of text or similar
- X can be be a parameter in the Options window (optional)
@joaquinjares / @HEskandari - thoughts ?
Content trimmed. See full issue
#171 Define "Advanced Search" functionality
Features:
- Filter by date range on message timestamps
- Relevant Fields:
- Sent time
- Processing Started
- Processing Ended
- Relevant Fields:
- Filter by range on perf values
- Relevant Fields:
- ProcessingTime
- DeliveryTime
Content trimmed. See full issue
- Relevant Fields:
#161 Remove "Retries" property from property pane
Due to this bug: Particular/ServiceControl#65 (comment)
// CC @andreasohlund
#160 Remove "Second Level Retries" from Context menu
Due to this bug: Particular/ServiceControl#65 (comment)
// CC @andreasohlund
#158 Implement "Help" Feature in SI
Can Open a browser to http://docs.particular.net/
Can't ship this:
#157 Hide Queue Explorer Functionality
- Queue Explorer functionality will not be included with SI
- There's no need to delete the code. We can hide the UI functionality and refactor the code out of SI later on.
- Specifically:
- Hide Queue Explorer Tab
- Hide/Remove "Connect Queue Explorer to MSMQ" button from Toolbar
- Hide/Remove "Connect to MSMQ" menu item
- Hide/Remove menu items for: "Create Queue", "Purge queue", "Delete Queue", "Delete Messages"
- Hide/Remove Toolbar button for: "Create Queue", "Purge queue", "Delete Queue", "Delete Messages"
// CC @andreasohlund
Content trimmed. See full issue
#151 Add an "Auto-Refresh" toggle button to Toolbar
- Currently, the Auto-Refresh toggling is enabled through Menu item only
- With the addition of integration with SM, it will be best if we can have it more available for quick toggling, via a toggle toolbar button
- The manual refresh button should remain as-is (I, for one, like its functionality and availability there...)
- The "Auto-Refresh" toolbar button should have a tooltip saying:
Auto-Refresh: Automatically update the display every N seconds
(where N is the value specified in the Options settings). - IMO - We can use the same icon as "Refresh" (see image below)
#149 Using correct Icons in Endpoint list
Endpoint Icon
Currently, the SI endpoint list displays a folder-like icon for Endpoints:
in the message flow, Saga and in SM we use the Endpoint Icon:
SC instance icon
Content trimmed. See full issue
#136 Wrong version number generated during the build results the wrong license expiration mechanism
The new installer generates assembly version as 0.2, and license manager thinks the currently installed license is not valid for the version you are looking for.
#106 Create shortcuts by default in Installer
- When running the SI installer, there's the option of creating shortcuts for SI in the desktop and programs.
- Currently it is off by default.
- It should be on by default
#85 Allow panning of Message Flow
Allow a user to pan around the message flow by pressing and holding the mouse's left button.
#72 Clicking on a Saga name in Message Flow opens Saga View with message highlighted
- In Message Flow, click on Saga name in a message entity
- Saga View is opened for the specific Saga (based on Saga Id) with the specific message highlighted
#69 Add Saga data overlay display to Message Flow
In Message Flow view, add the saga data to the relevant message entities.
Details:
- Add the Saga type name (class name only, not fully qualified name) to each message associated with the saga
- Add the relevant icon for initiating / Updating / completing the saga (see below)
- Add the timeout icon when a message is sent with RequestTimeout
- Support zero or more sagas associated with each message (i.e. there may be cases where a single message is associated with more than one saga)
Illustration based on VideoStore samples:
Icons:
Notes:
- Contact @sergioc for icons in proper format, size etc.
- Display a tooltip for each icon (using the description below)
A single message associated with three different saga instances (may be of the same type or of a different type)
Note that the message may perform different actions on each saga instance.
In the example above you can see, based on the icons used, that the same message initiated one saga instance, marked another as completed, and the message itself was originated from another saga.
Bugs
#242 Remove Import / Export options from menu
- Related to #219
- Remove the (already disabled) options from the File menu
#238 Go to last arrow is always disabled
#235 SystemMessage body raises a NullReferenceException
Repro
- Open SI
- Open "Options" and check "Show system messages"
- Restart SI
- Select a system message
- Click on the "Body" tab
- Enjoy the view:
Exception details:
Type: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Particular.ServiceInsight
Stack Trace: at NServiceBus.Profiler.Desktop.ServiceControl.DefaultServiceControl.<GetBody>d__2a.MoveNext() in y:\BuildAgent\work\2be762a799648224\src\ServiceInsight.Desktop\ServiceControl\DefaultServiceControl.cs:line 124
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NServiceBus.Profiler.Desktop.MessageList.MessageListViewModel.<LoadMessageBody>d__26.MoveNext() in y:\BuildAgent\work\2be762a799648224\src\ServiceInsight.Desktop\MessageList\MessageListViewModel.cs:line 353
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NServiceBus.Profiler.Desktop.MessageList.MessageListViewModel.<Handle>d__12.MoveNext() in y:\BuildAgent\work\2be762a799648224\src\ServiceInsight.Desktop\MessageList\MessageListViewModel.cs:line 251
#224 Service Insight Install fails on custom action to setup DTC and MSMQ on Windows 7
Using a clean Win 7 build with .Net 45 installed the Service Insight installer fails with
the errorcode 1603 due to the DTC custom action timing out. If you look at the timestamps either side of the action the whole process takes 12 seconds.
I've re-run the installer after this failure without a reboot and the installation succeeded
This suggests the timeout on the MSMQ start isn't long enough as it does start successfully
Relevant section of install log:...
MSI (s) (F0:20) [05:28:47:766]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIFF02.tmp, Entrypoint: InstallDtc
Content trimmed. See full issue
#216 Fix Status icons transparency
// @sergioc
The Status icons have a transparency issue when the message is selected:
#215 Handling of long message types in Saga View
Should be done similarly to the Message Flow shortening of of the class names.
#204 Recently searched keywords not functional
@HEskandari - what's the status of this feature ?
- This would be nice to have, but _bad_ to have while not implemented.
- To make this useful, we need to have a latest-searches dropdown list appear when user enters a value in the search textbox.
Thoughts ?
// CC @joaquinjares
#198 Request Body URL in Logs tab is faulty
See highlighted below:
Tested on Particular.ServiceInsight-0.2.0-Unstable384
#173 Preserve Context Menu display on Auto-Refresh
Required Behavior
- When auto-refresh is turned on, and the user has a selected message and a context menu displayed, preserve the context menu displayed after the refresh
- Note this is not required for manual refresh (it can be implemented for both, but only required for auto-refresh)
Requires resolving issues #172, #140
#144 Update arrow tooltip to "Published Event" instead of "Sent Event"
Update the verb for events from "Sent" to "Published":
Note: This is a fix for requirements mistake in #51 and for consistency with SM
#143 Inconsistent "Copy Headers" serialization format
"Copy Headers" option in message list context menu item results in XML formatted headers:
"Copy Headers" option in message flow context menu item results in JSON formatted headers:
Lets align on JSON for both.
#141 When launching SI with parameters from SP, SI remains in background
Repro
- Launch SI via invocation parameters from SP (or any other HTML page)
- The browser (in my case- Chrome) displays a validation message
- After the SI window is launched, SI remains in the backgroud;
Expected behavior
When SI is launched with invocation parameters, it should position itself as the foreground window (not "always on top", but foreground until otherwise positioned by user action).
Content trimmed. See full issue
#138 Installer includes all source DLL's
Previous build installed only the SI exe, pdb and (optional) config file:
The latest build (after the various changes) includes all the source DLL's:
Content trimmed. See full issue
#130 Version tag not displayed in About or Splash dialog
Should display "Beta4"
Tested on Particular.ServiceInsight-1.0.0-beta4
#36 System Message causes "value cannot be null" exception
[General Info]
--------------------------
Application:
Version: v4.0-BETA (cc5a4aa)
Region: English (United States)
Date: 10/10/2013
Time: 3:36 PM
[Technical Details]
--------------------------
Top-level Exception
Type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
Stack Trace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at System.Windows.RoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at DevExpress.Xpf.Grid.DataViewBase.<.cctor>b__3(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at DevExpress.Xpf.Grid.DataViewBase.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at DevExpress.Xpf.Core.Locker.DoLockedAction(Action action)
at DevExpress.Xpf.Grid.DataViewBase.UpdateFocusedRow()
at DevExpress.Xpf.Grid.DataViewBase.UpdateFocusedRowData()
at DevExpress.Xpf.Grid.DataViewBase.OnFocusedRowHandleChangedCore(Int32 oldRowHandle)
at DevExpress.Xpf.Grid.DataViewBase.OnFocusedRowHandleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at DevExpress.Xpf.Grid.DataViewBase.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at DevExpress.Xpf.Grid.DataViewBase.set_FocusedRowHandle(Int32 value)
at DevExpress.Xpf.Grid.Native.GridViewInplaceEditorOwner.PerformNavigationOnLeftButtonDown(DependencyObject originalSource)
at DevExpress.Xpf.Editors.InplaceEditorOwnerBase.ProcessMouseButtonDown(MouseButtonEventArgs e, Boolean canShowEditor)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
Inner Exception 1
Type: System.ArgumentNullException
Message: Value cannot be null.
Parameter name: key
Source: mscorlib
Stack Trace: at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)
at NServiceBus.Profiler.Desktop.MessageViewers.MessageBodyViewModel.Handle(MessageBodyLoaded event) in c:\BuildAgent\work\9455e94e999bc3dc\NServiceBus.Profiler.Desktop\MessageViewers\MessageBodyViewModel.cs:line 66
at Caliburn.PresentationFramework.ApplicationModel.DefaultEventAggregator.<>c__DisplayClasse`1.<Publish>b__c()
at Caliburn.PresentationFramework.ApplicationModel.DefaultEventAggregator.Publish[TMessage](TMessage message)
at NServiceBus.Profiler.Desktop.MessageList.MessageListViewModel.OnFocusedMessageChanged() in c:\BuildAgent\work\9455e94e999bc3dc\NServiceBus.Profiler.Desktop\MessageList\MessageListViewModel.cs:line 158
at NServiceBus.Profiler.Desktop.MessageList.MessageListViewModel.set_FocusedMessage(MessageInfo value)
at NServiceBus.Profiler.Desktop.MessageList.MessageListView.OnFocusedMessageChanged(Object sender, FocusedRowChangedEventArgs e) in c:\BuildAgent\work\9455e94e999bc3dc\NServiceBus.Profiler.Desktop\MessageList\MessageListView.xaml.cs:line 53
[System]
--------------------------
Operating System
Microsoft Windows 8
CodeSet = 1252
CSDVersion =
CurrentTimeZone = 180
FreePhysicalMemory = 3574640
OSArchitecture = 64-bit
OSLanguage = 1033
ServicePackMajorVersion = 0
ServicePackMinorVersion = 0
Version = 6.2.9200
#20 Missing Retries message property content / header ?
- the retries header seems to be empty, including on failures:
- A faulted message seems to have the a Retries timestamp, but not a retried count:
[{"key":"NServiceBus.Retries.Timestamp","value":"2013-08-19 09:08:52:052279 Z"}]
Where to get it
You can download this release from: