Skip to content

Releases: Particular/ServiceControl

1.4.1

27 Nov 07:21

Choose a tag to compare

As part of this release we had 3 issues closed.

This hotfix addresses two issues within ServiceControl that impacted the data presented to ServicePulse.

Bugs

#421 ServiceControl returns old results on /eventlogs

From google groups - https://groups.google.com/forum/#!topic/particularsoftware/6SxoYrHDjMA

New events are shown on the ServiceControl dashboard until a page refresh, then items are replaced with old results.

#416 Sometimes the error indicator count on the dashboard in ServicePulse may be out of sync

At the moment, ServiceControl publishes events and ServicePulse updates the UI with the appropriate counts on the dashboard.
However, sometimes the count that is published by ServiceControl may not be correct due to stale indexes. In this case, the dashboard count may be out of sync with the actual number.

Workaround
Refresh the page in ServicePulse, as refreshing will get query Raven for the data.

Where to get it

You can download this release from:

1.4.0

15 Nov 00:57

Choose a tag to compare

As part of this release we had 7 issues closed.

Overview

This release primarily addresses issues with the database growth and management of the embedded RavenDB database.

Once deployed this release will start deleting expired documents by running period batch deletes. The default values of the settings that control the document expiration process have changed in 1.4. The batch process will (by default) trigger a batch delete every 5 minutes of 65512 of expired documents. These settings can be adjusted via configuration settings - see Customizing ServiceControl configuration on the documentation site.

Deleted documents do not automatically reduce the size of the database. A manual procedure has been developed to compact the database so disk space can be reclaimed. These instructions are available on the documentation site here

Features

#414 Support compacting the embedded RavenDB database

Since RavenDB doesn't support compacting the database while its online we need to provide a maintenance mode where users can:

  1. Export the database
  2. Delete the DB file
  3. Import the database

Full instructions here:
http://docs.particular.net/servicecontrol/db-compaction

Bugs

#408 Error view in SP times out

This occurs when database is under load

#407 Re-import failed messages from error.log on a fresh db

If for some reason the user has deleted the RavenDB database and starting fresh and the user attempts to move messages from error.log back into the error queue for ServiceControl to rehydrate the error messages, in this case, we won't have a corresponding saga. Therefore we are using SingleOrDefault instead of Single.

#405 When a message that is sent by a SendOnly endpoint lands in the error queue when processing, SC does not import the error message properly.

When a send-only self hosted endpoint send a message to another NSB endpoint and handling of this message by this endpoint results in an error, then ServiceControl does not import the error message properly and gets added to the FailedErrorImports collection and therefore does not raise proper notifications in ServicePulse.

#395 ServiceControl.Contracts.dll seems to be missing when doing a choco upgrade

Reported by @Bishbulb

"In my case the ServiceControl.Contracts.dll/pdb files were not present in that directory. I had to do a full uninstall/reinstall of ServiceControl in order to get things working.

I had previously upgraded from SC 1.2.0 to 1.3.0 by using Chocolatey cup ServiceControl.install which appears to have left things in a bad state. I used Chocolatey to upgrade SC to 1.3.0 on three different machines and each one had this same problem.

What ended up working for me was to uninstall SC (choco uninstall ServiceControl.install) and then reinstall (choco install ServiceControl.install)."

Full discussion: #372 (comment)

#387 Expiration fails for large ServiceControl instances

From Google Groups... (Desk Case 7173)

I created the following ServiceControl.exe.config and placed it in ServiceControl install directory:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<configuration>
  <appSettings>
        <add key="ServiceControl/DbPath" value="e:\Particular\ServiceControl\localhost-33333" />
    <add key="ServiceControl/ExpirationProcessTimerInSeconds" value="120" />
    <add key="ServiceControl/HoursToKeepMessagesBeforeExpiring" value="240" />
    <add key="ServiceControl/ExposeRavenDB" value="true" />

Content trimmed. See full issue

#334 better error message for invalid transport on install

eg if someone does this

ServiceControl.exe --install -serviceName="Particular.ServiceControl" -displayName="Particular ServiceControl" -d="ServiceControl/TransportType==NServiceBus.Azure.Transports.WindowsAzureServiceBus" -d="NServiceBus/Transport=Endpoint=sb://<url>;SharedAccessKeyName=<keyname>;SharedAccessKey=<key>"

We get this

Unhandled Exception: System.ArgumentNullException: Value cannot be null.
at System.RuntimeType.MakeGenericType(Type[] instantiation)
at NServiceBus.TransportReceiverConfig.<>c__DisplayClass1.<CreateTransportConfigurer>b__0(Type t) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Transport\Config\TransportReceiverConfig.cs:line 80
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)

Content trimmed. See full issue

Known Issues

#415 Need to also expire and delete saga data

#416 Sometimes the error indicator count on the dashboard in ServicePulse may be out of sync

Where to get it

You can download this release from:

1.3.0

14 Oct 04:21

Choose a tag to compare

As part of this release we had 4 issues closed.

Features

#359 Expose a message failed event via the bus for external integrations

  1. Create a new event contract containing all relevant data (pretty much what you see in SI today for a given failure)
  2. Avoid using IEvent and instead have to users include the message in their conventions
  3. React to the internal MessageFailed event and queue up a event dispatch message
  4. Create a satellite to process the message
  5. Create an index in raven that matched 1-1 to the external event
  6. As dispatch request comes in query raven for data. Throw to retry if data is missing (index stale)
  7. Publish new event when data is available

Notes:
Content trimmed. See full issue

Bugs

#391 Service Pulse shows endpoint error indicators in dashboard for unselected endpoints

Moved from ServicePulse issue (Particular/ServicePulse#155)

This is from a support case: https://nservicebus.desk.com/agent/case/6257

In spite of the fact only one endpoint is selected in the endpoint configuration, you continue observing 2 error indicators for endpoints in the dashboard. (the one active, selected endpoint is working
correctly and actively sending heartbeats.)

dashboard
endpoints config
endpoints overview

Content trimmed. See full issue

#344 Audit URL incorrect

When accessing /api this is shown:

audit_url: "http://host:33333/api/audit/{?page,per_page,direction,sort}",

However, there's no handler for /api/audit endpoint.

#336 Latest Events message does not specify retried message type

Logged by @dannycohen - Moved from Particular/ServicePulse#131

Repro
  1. When you retry a message in SI / SP, the Latest event message does not include an indication of the message type (see image below)
  2. We should include the message type in the latest event message (same as other related events)

image

Content trimmed. See full issue

Where to get it

You can download this release from:

1.2.3

22 Sep 12:58

Choose a tag to compare

As part of this release we had 1 issue closed.

This patch addresses a bug with queue creation when installing multiple instances of ServiceControl on the same machine.

To fix this bug we have made some changes to the way the service is registered
Please refer to the following document on our documentation site if you are installing or upgrading a host with multiple instances of ServiceControl

Bugs

#375 Queue name is NOT the same as the endpoint on installation

Where to get it

You can download this release from:

1.2.2

19 Sep 02:44

Choose a tag to compare

This patch release address issues with the gzipping of content in ServiceControl which prevented large message bodies being shown in ServiceInsight

As part of this release we had 1 issue closed.

Bugs

#358 ServiceControl - Body Missing In Xml View - Unable to read data from the transport connection

Where to get it

You can download this release from:

1.2.1

15 Sep 01:00

Choose a tag to compare

As part of this release we had 4 issues closed.

This release patches a localization bug in the installer of v1.2 which prevented installation on Non-English versions of Windows. We've also changed ServiceControl to ensure different log folders and queues are used when running multiple instances on the same computer.

Improvements

#355 Log paths should be different per instance

If a user installs SC multiple times on the same machine with different hostname and/or port, the location for the log paths need to be different per instance.

At the moment is shared.

i would recommend using the same logic as the RavenDB path.

Bugs

#363 Localization error prevents SC 1.2 install on non-english OS

Adv Installler fails to install ServiceControl 1.2 due to localization of group names. This is almost identical to this issue in Particular/ServicePulse#150

#357 Queue names need to be different per instance

If a user installs SC multiple times on the same machine with different hostname and/or port, the queue names need to be different per instance.

At the moment they all share the same name "Particular.ServiceControl", we actually hard coding it, see https://github.com/Particular/ServiceControl/blob/25f51e76b1f9e4369420301b826d32e8d2c93d5b/src/ServiceControl/Bootstrapper.cs#L46

This causes issue because we have separate databases but the same queue.

Content changes

#356 Update installer license text

Where to get it

You can download this release from:

1.2.0

21 Aug 02:40

Choose a tag to compare

As part of this release we had 5 issues closed.

Improvements

#317 Attempt to re-import previously failed messages

If a audit or error messages fails to be imported we do a few things:

  1. Write to the event viewer
  2. Write a text file to disk with the id of the failed message and the stacktrace
  3. We add the messages to the database:
    image

The last point is what this issue is about.
Currently we have bug in SC that fails to import SendOnly messages and those messages are being added to the database see point 3.

Once we release a fix we need a way to re-import those failed messages.
Content trimmed. See full issue

Bugs

#350 Call to /customchecks?status=fail returns passed custom checks

Calls to /customchecks?status=fail sometimes returns passed items. Appears to only happen just after the state is switched. This causes incorrect data to be displayed in Service Pulse under custom checks

image

#331 RegisterEndpointHandler assumes single match for Endpoint.Name and Endpoint.Host

So in RegisterEndpointHandler we have

knownEndpoint = session.Query<KnownEndpoint, KnownEndpointIndex>()
.SingleOrDefault(e => 
    e.EndpointDetails.Name == message.Endpoint.Name && 
    e.EndpointDetails.Host == message.Endpoint.Host);

But because multiple endpoints can be deployed to the same host there could be multiple KnownEndpoint with the same Endpoint.Name and EndpointDetails.Host. So the session.Query returns more than 1 and SingleOrDefault blows up

Content trimmed. See full issue

#324 Unable to start ServiceControl as a standard user

When attempting to run ServiceControl under a standard user by passing in install time parameters, the service does not start

Content trimmed. See full issue

Where to get it

You can download this release from:

1.1.0

25 May 01:36

Choose a tag to compare

1.0.0

16 Apr 06:08

Choose a tag to compare

Introduction

ServiceControl is an auditing and monitoring service for NServiceBus endpoints and applications.

It gathers the audited messages forwarded by NServiceBus endpoints to the configured Audit queue and it exposes HTTP API that provides data and functionality services for ServiceInsight and ServicePulse

Prerequisites

  • .NET Framework 4.5 or later
    • (Note that this is a change from previous beta releases of ServiceControl which depended on .NET 4.0)

Important Note for previous Beta users of ServiceControl:

  • If you installed a previous beta release of ServiceControl you will need to remove the embedded RavenDB database by running the following commands:
net stop "Particular ServiceControl"
RD C:\programdata\particular\ServiceControl\localhost-33333 /S
net start "Particular ServiceControl"
  • (Note the above command assumes you have installed ServiceControl using the default port 33333)
    • Once started, the ServiceControl will re-create a new RavenDB embedded database

Installation

  1. Run the ServiceControl installer and leave the default parameters as-is
    • ServiceControlPort: 33333
      • This is the default IP port ServiceControl will use to expose its HTTP API
    • Transport Type: MSMQ
      • Currently, only MSMQ is available for automatic installation and configuration, although ServiceControl does support all NServiceBus supported transports
      • For guidance on configuring ServiceControl to use transports other than MSMQ, please contact us
    • Instance Name: {free text}
    • Instance Description: {free text}
  2. If you change the default ServiceControl port, please make a note of the custom port you define, since this will be required for connecting ServiceInsight and ServicePulse to the installed instance of ServiceControl
  3. After accepting the license terms and conditions, click "Install" (installer will require elevated privileges)
  4. The installation process performs the following actions:
    1. Installs the Windows Service "Particular ServiceControl"
    2. Expose HTTP API for use by ServiceInsight and ServicePulse (default URI: http://localhost:33333/api)

Troubleshooting:

http://docs.particular.net/ServiceControl/troubleshooting

1.0.0-Beta7

25 Mar 07:27

Choose a tag to compare

1.0.0-Beta7 Pre-release
Pre-release

Introduction

ServiceControl is an auditing and monitoring service for NServiceBus endpoints and applications.

It gathers the audited messages forwarded by NServiceBus endpoints to the configured Audit queue and it exposes HTTP API that provides data and functionality services for ServiceInsight and ServicePulse

Prerequisites

  • .NET Framework 4.5 or later
    • (Note that this is a change from previous beta releases of ServiceControl which depended on .NET 4.0)

Important Note for previous Beta users of ServiceControl:

  • If you installed a previous beta release of ServiceControl (beta 6 or earlier) you will need to remove the embedded RavenDB database by running the following commands:
net stop "Particular ServiceControl"
RD C:\programdata\particular\ServiceControl\localhost-33333 /S
net start "Particular ServiceControl"
  • (Note the above command assumes you have installed ServiceControl using the default port 33333)
    • Once started, the ServiceControl will re-create a new RavenDB embedded database

Installation

  1. Run the ServiceControl installer and leave the default parameters as-is
    • ServiceControlPort: 33333
      • This is the default IP port ServiceControl will use to expose its HTTP API
    • Transport Type: MSMQ
      • Currently, only MSMQ is available for automatic installation and configuration, although ServiceControl does support all NServiceBus supported transports
      • For guidance on configuring ServiceControl to use transports other than MSMQ, please contact us
    • Instance Name: {free text}
    • Instance Description: {free text}
  2. If you change the default ServiceControl port, please make a note of the custom port you define, since this will be required for connecting ServiceInsight and ServicePulse to the installed instance of ServiceControl
  3. After accepting the license terms and conditions, click "Install" (installer will require elevated privileges)
  4. The installation process performs the following actions:
    1. Installs the Windows Service "Particular ServiceControl"
    2. Expose HTTP API for use by ServiceInsight and ServicePulse (default URI: http://localhost:33333/api)

Troubleshooting:

http://docs.particular.net/ServiceControl/troubleshooting

Issues fixed in this Beta

This release consist of these issues that were achieved through these commits.

Features

#230 Create a Chocolatey package

Note this is not dependent on MSMQ or DTC since ServiceControl can target other transports

#229 Facilitate the viewing of the actual message data in Service Insight for the Saga View.

For the saga view feature of ServiceIsnight, ServiceControl needs to be able to provide the message data in addition to the saga state changes. Facilitate any API changes that are needed on SC so that this data can be displayed in SI.

Why?
The benefit of being able to see all of the message data is significant. For example:
From a debugging standpoint a developer that is looking at the SagaView could troubleshoot the saga by being able to see the actual message and its property and the saga states to help determine that the problem was with a certain message that left the saga went out with a wrong data in the message.

#180 Add "Hosting Process" data to Heartbeats

As Opie, I need to be able to uniquely identify the specific endpoint hosting process that sent a heartbeat.
This is especially true when more than one instance of the endpoints is located in the same machine (AKA "side by side") It also applies when the endpoint is hosted in IIS or other custom hosting.

Visualization
  1. In SI, we will be including the "Hosting Process" information in endpoint properties / tooltip info.
  2. In SP, it will be displayed in the Endpoints List (monitored only, since it relies on heartbeats).
Proposed Implementation
  1. As discussed with @andreasohlund
    Content trimmed. See full issue

#116 Support expiration of audit messages

Use the expiration bundle to have raven auto expire audit messages.

Note: We're only expiring audit messages, not errors, heartbeats etc

Replaces Particular/ServicePulse#64

#106 Enrich audit messages returned with saga state information

To support data overlay for the message flow in ServiceInsight:

  • support multiple saga types per message
  • enrich initiating message with saga id + type (can be multiple sagas)
  • saga state change(s) caused by message (initiated/updated/complete)

Replaces: Particular/NServiceBus#1659

#105 Expose a http api to get saga state changes

Request:

GET /api/sagas/{saga-id}

Response

{
   "id":"93bfbbfe-f841-4ea5-a0fe-a2a800d8e08d",
   "saga_id":"93bfbbfe-f841-4ea5-a0fe-a2a800d8e08d",
   "saga_type":"MySaga",
   "changes":[
      {
         "start_time":"2014-01-03T12:09:37.5015257Z",
         "finish_time":"2014-01-03T12:09:37.5577757Z",
         "status":"new",
         "state_after_change":"[{\"$type\":\"MySagaData, ServiceControl.Sample\",\"Id\":\"93bfbbfe-f841-4ea5-a0fe-a2a800d8e08d\",\"Originator\":\"ServiceControl.Plugin.SagaAudit.Sample@ANDREAS\",\"OriginalMessageId\":\"124984c0-9742-460d-a6bc-a2a800d8ddd4\",\"SomeId\":\"00000000-0000-0000-0000-000000000000\"}]",
         "initiating_message":{
            "is_saga_timeout_message":false,
            "originating_endpoint":"ServiceControl.Plugin.SagaAudit.Sample",
            "originating_machine":"ANDREAS",
            "time_sent":"2014-01-03T12:09:35.284928Z",
            "message_type":"Message1"
         },
         "outgoing_messages":[
            {
               "destination":"ServiceC...
Read more