Holmes 5.0.6

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 5.0.6                
NuGet\Install-Package Holmes -Version 5.0.6                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Holmes" Version="5.0.6" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Holmes --version 5.0.6                
#r "nuget: Holmes, 5.0.6"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Holmes as a Cake Addin
#addin nuget:?package=Holmes&version=5.0.6

// Install Holmes as a Cake Tool
#tool nuget:?package=Holmes&version=5.0.6                

Holmes

Build status

Holmes is a database analysis library. It scans a database and returns suggestions for improvement. Supports .Net Core as well as full .Net

Setting Up the Library

In order to use Holmes, you need to start by wiring it up on your ServiceCollection. However this takes just one extension method call:

serviceCollection.AddCanisterModules();
				

When this is done, Holmes is ready to use.

Basic Usage

The main class of interest is the Sherlock class:

var Results = Sherlock.Analyze(new Connection(...));

The Sherlock class contains one function which is Analyze. This function takes a Connection object defining where the library should be pointed. It will then, based on the provider specified in the connection object, run any analysis classes that it has and returns a list of Finding objects. The Finding class looks like this:

public class Finding
{
	public string Fix { get; }
	public IDictionary<string, object> Metrics { get; }
	public string Text { get; }
}

The Text property contains the explination of what was found, the Metrics property contains the data that was returned by the analysis object, and the Fix property contains the SQL command that can be used to remedy the issue. Note that not all analysis classes will contain a suggested fix. This is optional where as the other two properties will always contain some information.

Adding Your Own Analyzer

The system a couple of built in analyzers:

  • SQL Server
    • Recent expensive queries
    • Missing indexes
    • Overlapping indexes
    • Unused indexes

However you can easily add your own analyzer by simply creating a class that inherits from IAnalyzer. The system will then pick it up automatically and run it as well. For simple analyzers there is also an AnalyzerBaseClass that will simplify the process of setting up your analyzer. The IAnalyzer interface itself is rather simple though:

public interface IAnalyzer
{
    /// <summary>
    /// Gets the factory the analyzer supports.
    /// </summary>
    /// <value>Gets the factory the analyzer supports.</value>
    DbProviderFactory SupportedFactory { get; }

    /// <summary>
    /// Adds the query the analyzer needs to the batch.
    /// </summary>
    /// <param name="batch">The batch.</param>
    /// <returns>This.</returns>
    IAnalyzer AddQuery(SQLHelper.SQLHelper batch);

    /// <summary>
    /// Analyzes the specified connection's source database.
    /// </summary>
    /// <param name="results">The results of the analysis.</param>
    /// <returns>The list of suggestions for the database.</returns>
    IEnumerable<Finding> Analyze(IEnumerable<dynamic> results);
}

The SupportedFactory property is the DbProviderFactory that this analyzer should be run against. All analyzer queries are batched together by the system and run at once. As such there is an AddQuery function. With this function the system passes you the SQLHelper object it is using to batch the various queries. The one method on that you will probably use is AddQuery. The only other method is Analyze. This method recieves the results of the query as a list of dynamic objects. The names of each property is the same as the result set of the query you specified previously. In turn you should return a list of Finding objects.

Installation

The library is available via Nuget with the package name "Holmes". To install it run the following command in the Package Manager Console:

Install-Package Holmes

Build Process

In order to build the library you will require the following:

  1. Visual Studio 2022

Other than that, just clone the project and you should be able to load the solution and build without too much effort.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Holmes:

Package Downloads
Inflatable

Inflatable is a simple ORM.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.0.15 115 12/17/2024
5.0.14 87 12/16/2024
5.0.13 100 12/10/2024
5.0.12 88 12/9/2024
5.0.11 93 12/6/2024
5.0.10 148 11/27/2024
5.0.9 84 11/26/2024
5.0.8 119 11/26/2024
5.0.7 109 11/24/2024
5.0.6 83 11/24/2024
5.0.5 77 11/23/2024
5.0.4 81 11/23/2024
4.0.270 102 11/19/2024
4.0.269 89 11/11/2024
4.0.268 77 11/7/2024
4.0.267 81 11/5/2024
4.0.266 77 11/4/2024
4.0.265 89 11/1/2024
4.0.264 80 11/1/2024
4.0.263 84 10/30/2024
4.0.262 93 10/29/2024
4.0.261 85 10/29/2024
4.0.260 88 10/26/2024
4.0.259 93 10/24/2024
4.0.258 94 10/21/2024
4.0.257 110 10/17/2024
4.0.256 96 10/15/2024
4.0.255 99 10/11/2024
4.0.254 97 10/10/2024
4.0.253 91 10/9/2024
4.0.252 102 10/9/2024
4.0.251 122 10/3/2024
4.0.250 112 10/2/2024
4.0.249 111 9/30/2024
4.0.248 105 9/28/2024
4.0.247 92 9/24/2024
4.0.246 97 9/23/2024
4.0.245 95 9/23/2024
4.0.244 138 9/17/2024
4.0.243 119 9/16/2024
4.0.242 119 9/10/2024
4.0.241 107 9/9/2024
4.0.240 107 9/6/2024
4.0.239 104 9/6/2024
4.0.238 112 9/3/2024
4.0.237 115 9/2/2024
4.0.236 108 8/30/2024
4.0.235 111 8/30/2024
4.0.234 110 8/28/2024
4.0.233 122 8/27/2024
4.0.232 108 8/26/2024
4.0.231 137 8/24/2024
4.0.230 135 8/23/2024
4.0.229 133 8/21/2024
4.0.228 132 8/21/2024
4.0.227 126 8/20/2024
4.0.226 123 8/19/2024
4.0.225 130 8/16/2024
4.0.224 126 8/16/2024
4.0.223 131 8/14/2024
4.0.222 112 8/5/2024
4.0.221 82 8/2/2024
4.0.220 81 8/1/2024
4.0.219 89 7/31/2024
4.0.218 110 7/26/2024
4.0.217 97 7/25/2024
4.0.216 83 7/25/2024
4.0.215 114 7/11/2024
4.0.214 121 7/10/2024
4.0.213 133 7/9/2024
4.0.212 102 7/9/2024
4.0.211 116 7/9/2024
4.0.210 111 7/5/2024
4.0.209 109 7/4/2024
4.0.208 136 7/3/2024
4.0.207 109 7/2/2024
4.0.206 122 6/27/2024
4.0.205 118 6/26/2024
4.0.204 115 6/25/2024
4.0.203 112 6/24/2024
4.0.202 968 6/19/2024
4.0.201 123 6/19/2024
4.0.200 124 6/17/2024
4.0.199 122 6/14/2024
4.0.198 109 6/14/2024
4.0.197 98 6/12/2024
4.0.196 121 6/3/2024
4.0.195 113 5/31/2024
4.0.194 96 5/30/2024
4.0.193 116 5/29/2024
4.0.192 104 5/28/2024
4.0.191 111 5/27/2024
4.0.190 118 5/23/2024
4.0.189 116 5/22/2024
4.0.188 126 5/21/2024
4.0.187 133 5/20/2024
4.0.186 124 5/18/2024
4.0.185 124 5/16/2024
4.0.184 124 5/15/2024
4.0.183 116 5/8/2024
4.0.182 138 5/7/2024
4.0.181 140 5/6/2024
4.0.180 116 5/3/2024
4.0.179 643 5/2/2024
4.0.178 99 5/2/2024
4.0.177 118 5/1/2024
4.0.176 130 4/29/2024
4.0.175 113 4/29/2024
4.0.174 119 4/25/2024
4.0.173 133 4/24/2024
4.0.172 125 4/16/2024
4.0.171 118 4/15/2024
4.0.170 138 4/13/2024
4.0.169 113 4/12/2024
4.0.168 128 4/11/2024
4.0.167 125 4/10/2024
4.0.166 113 4/9/2024
4.0.165 133 4/9/2024
4.0.164 125 4/1/2024
4.0.163 122 3/29/2024
4.0.162 123 3/29/2024
4.0.161 126 3/27/2024
4.0.160 119 3/22/2024
4.0.159 129 3/22/2024
4.0.158 133 3/18/2024
4.0.157 134 3/15/2024
4.0.156 120 3/14/2024
4.0.155 128 3/14/2024
4.0.154 131 3/11/2024
4.0.153 135 3/8/2024
4.0.152 131 3/7/2024
4.0.151 140 3/6/2024
4.0.150 153 3/5/2024
4.0.149 150 3/4/2024
4.0.148 967 3/2/2024
4.0.147 141 2/29/2024
4.0.146 114 2/29/2024
4.0.145 127 2/27/2024
4.0.144 118 2/26/2024
4.0.143 119 2/23/2024
4.0.142 129 2/22/2024
4.0.141 128 2/22/2024
4.0.140 124 2/21/2024
4.0.139 129 2/20/2024
4.0.138 118 2/19/2024
4.0.137 123 2/19/2024
4.0.136 123 2/16/2024
4.0.135 120 2/16/2024
4.0.134 120 2/15/2024
4.0.133 140 2/14/2024
4.0.132 129 2/14/2024
4.0.131 127 2/13/2024
4.0.130 147 2/9/2024
4.0.129 137 2/9/2024
4.0.128 132 2/7/2024
4.0.127 120 2/6/2024
4.0.126 128 2/6/2024
4.0.125 123 2/5/2024
4.0.124 128 2/3/2024
4.0.123 132 2/1/2024
4.0.122 111 2/1/2024
4.0.121 113 1/31/2024
4.0.120 128 1/29/2024
4.0.119 116 1/25/2024
4.0.118 116 1/24/2024
4.0.117 125 1/23/2024
4.0.116 126 1/22/2024
4.0.115 1,030 1/17/2024
4.0.114 121 1/16/2024
4.0.113 120 1/15/2024
4.0.112 125 1/12/2024
4.0.111 130 1/11/2024
4.0.110 130 1/10/2024
4.0.109 319 1/8/2024
4.0.108 145 1/6/2024
4.0.107 284 12/26/2023
4.0.106 116 12/26/2023
4.0.105 120 12/26/2023
4.0.104 147 12/25/2023
4.0.103 130 12/23/2023
4.0.102 131 12/21/2023
4.0.101 144 12/15/2023
4.0.100 126 12/14/2023
4.0.99 133 12/13/2023
4.0.98 139 12/13/2023
4.0.97 473 12/12/2023
4.0.96 129 12/12/2023
4.0.95 119 12/12/2023
4.0.94 119 12/11/2023
4.0.93 206 12/6/2023
4.0.92 150 12/6/2023
4.0.91 150 12/6/2023
4.0.90 129 12/4/2023
4.0.89 285 11/24/2023
4.0.88 149 11/24/2023
4.0.87 143 11/21/2023
4.0.86 146 11/20/2023
4.0.85 129 11/20/2023
4.0.84 181 11/17/2023
4.0.83 481 11/17/2023
4.0.82 159 11/15/2023
4.0.81 145 11/13/2023
4.0.80 171 11/9/2023
4.0.79 186 11/9/2023
4.0.78 135 11/8/2023
4.0.77 145 11/7/2023
4.0.76 153 11/6/2023
4.0.75 158 11/3/2023
4.0.74 189 11/2/2023
4.0.73 162 11/1/2023
4.0.72 166 10/31/2023
4.0.71 140 10/31/2023
4.0.70 135 10/30/2023
4.0.69 170 10/28/2023
4.0.68 154 10/26/2023
4.0.67 160 10/25/2023
4.0.66 157 10/17/2023
4.0.65 147 10/16/2023
4.0.64 126 10/16/2023
4.0.63 173 10/13/2023
4.0.62 175 10/12/2023
4.0.61 161 10/11/2023
4.0.60 192 10/5/2023
4.0.59 164 10/4/2023
4.0.58 176 9/26/2023
4.0.57 158 9/26/2023
4.0.56 164 9/22/2023
4.0.55 169 9/20/2023
4.0.54 172 9/19/2023
4.0.53 169 9/18/2023
4.0.52 146 9/18/2023
4.0.51 207 9/15/2023
4.0.50 164 9/14/2023
4.0.49 166 9/12/2023
4.0.48 231 9/12/2023
4.0.47 151 9/11/2023
4.0.46 182 9/11/2023
4.0.45 277 9/7/2023
4.0.44 186 9/6/2023
4.0.43 219 9/5/2023
4.0.42 183 9/4/2023
4.0.41 164 9/4/2023
4.0.40 201 9/1/2023
4.0.39 203 8/31/2023
4.0.38 196 8/31/2023
4.0.37 198 8/29/2023
4.0.36 179 8/29/2023
4.0.35 205 8/29/2023
4.0.34 209 8/25/2023
4.0.33 195 8/24/2023
4.0.32 199 8/23/2023
4.0.31 207 8/22/2023
4.0.30 195 8/18/2023
4.0.29 185 8/17/2023
4.0.28 210 8/17/2023
4.0.27 163 8/17/2023
4.0.26 279 8/10/2023
4.0.25 206 8/9/2023
4.0.24 217 8/8/2023
4.0.23 188 8/8/2023
4.0.22 174 8/8/2023
4.0.21 302 8/7/2023
4.0.20 204 8/4/2023
4.0.19 256 8/3/2023
4.0.18 208 8/2/2023
4.0.17 239 7/26/2023
4.0.16 231 7/25/2023
4.0.15 238 7/21/2023
4.0.14 200 7/19/2023
4.0.13 198 7/18/2023
4.0.12 174 7/18/2023
4.0.11 229 7/18/2023
4.0.10 178 7/18/2023
4.0.9 276 7/17/2023
4.0.8 188 7/17/2023
4.0.7 175 7/17/2023
4.0.6 180 7/17/2023
4.0.5 493 1/30/2023
4.0.4 278 1/30/2023
4.0.3 380 1/30/2023
4.0.2 384 1/27/2023
4.0.1 560 12/13/2022
4.0.0 320 12/12/2022
3.0.43 1,513 6/10/2022
3.0.41 945 4/20/2022
3.0.40 983 1/11/2022
3.0.39 765 1/10/2022
3.0.38 1,033 6/17/2021
3.0.37 755 6/16/2021
3.0.36 700 6/16/2021
3.0.35 485 6/16/2021
3.0.34 464 6/16/2021
3.0.33 934 1/7/2021
3.0.32 765 12/16/2020
3.0.31 708 12/14/2020
3.0.29 2,298 9/13/2020
3.0.28 850 6/19/2020
3.0.27 855 6/8/2020
3.0.26 1,606 5/12/2020
3.0.25 1,371 5/12/2020
3.0.24 845 4/28/2020
3.0.23 852 4/24/2020
3.0.22 851 4/16/2020
3.0.21 856 4/16/2020
3.0.20 583 4/15/2020
3.0.19 566 4/15/2020
3.0.18 1,110 4/14/2020
3.0.17 561 4/14/2020
3.0.16 902 4/10/2020
3.0.15 929 4/10/2020
3.0.14 3,023 3/26/2020
3.0.13 842 3/26/2020
3.0.12 588 3/25/2020
3.0.11 570 3/25/2020
3.0.10 561 3/25/2020
3.0.9 602 3/25/2020
3.0.8 593 3/25/2020
3.0.7 1,084 3/25/2020
3.0.6 1,255 3/21/2020
3.0.5 1,594 3/13/2020
3.0.4 626 3/13/2020
3.0.3 1,319 2/28/2020
3.0.2 1,139 2/21/2020
3.0.1 638 2/11/2020
3.0.0 1,814 12/23/2019
2.0.10 1,043 4/17/2019
2.0.9 1,563 2/21/2019
2.0.8 739 2/21/2019
2.0.7 3,855 8/1/2018
2.0.6 1,215 8/1/2018
2.0.5 1,524 6/26/2018
2.0.4 1,613 6/1/2018
2.0.3 1,570 5/22/2018
2.0.2 2,124 5/11/2018
2.0.1 2,197 2/13/2018
2.0.0 2,106 1/2/2018
1.0.10 13,939 6/16/2017
1.0.8 1,061 6/16/2017
1.0.7 1,025 5/30/2017
1.0.6 1,000 5/30/2017
1.0.5 1,013 5/25/2017
1.0.4 1,032 5/24/2017
1.0.0 1,054 5/24/2017