Home

Awesome

Warden Web Watcher

Warden

OPEN SOURCE & CROSS-PLATFORM TOOL FOR SIMPLIFIED MONITORING

getwarden.net

BranchBuild status
mastermaster branch build status
developdevelop branch build status

WebWatcher can be used either for simple website monitoring or more advanced API monitoring.

Installation:

Available as a NuGet package.

dotnet add package Warden.Watchers.Web

Configuration:

WebWatcher can be configured by using the WebWatcherConfiguration class or via the lambda expression passed to a specialized constructor.

Example of configuring the watcher via provided configuration class:

//Website monitoring
var websiteConfiguration = WebWatcherConfiguration
    .Create("http://httpstat.us/200")
    .Build();
var websiteWatcher = WebWatcher.Create("Website watcher", websiteConfiguration);

//API monitoring
var apiConfiguration = WebWatcherConfiguration
    .Create("http://my-api.com", HttpRequest.Post("users", new {name = "test"},
        headers: new Dictionary<string, string>
        {
            ["Authorization"] = "Token MyBase64EncodedString",
        }))
    .EnsureThat(response => response.Headers.Any())
    .Build();
var apiWatcher = WebWatcher.Create("API watcher", apiConfiguration);

var wardenConfiguration = WardenConfiguration
    .Create()
    .AddWatcher(websiteWatcher)
    .AddWatcher(apiWatcher)
    //Configure other watchers, hooks etc.

Example of adding the watcher directly to the Warden via one of the extension methods:

var wardenConfiguration = WardenConfiguration
    .Create()
    .AddWebWatcher("http://httpstat.us/200")
    .AddWebWatcher("http://my-api.com", HttpRequest.Post("users", new {name = "test"},
        headers: new Dictionary<string, string>
        {
            ["Authorization"] = "Token MyBase64EncodedString",
        }), 
        cfg => cfg.EnsureThat(response => response.Headers.Any())
    )
    //Configure other watchers, hooks etc.

Please note that you may either use the lambda expression for configuring the watcher or pass the configuration instance directly. You may also configure the hooks by using another lambda expression available in the extension methods.

Check result type:

WebWatcher provides a custom WebWatcherCheckResult type which contains additional values.

public class WebWatcherCheckResult : WatcherCheckResult
{
    public Uri Uri { get; }
    public IHttpRequest Request { get; }
    public IHttpResponse Response { get; }
}

Custom interfaces:

public enum HttpMethod
{
    Get = 1,
    Put = 2,
    Post = 3,
    Delete = 4
}

public interface IHttpRequest
{
    HttpMethod Method { get; }
    string Endpoint { get; }
    object Data { get; }
    IDictionary<string, string> Headers { get; }
}

IHttpRequest represents the HTTP request that has method type, endpoint (e.g. "/users" or an empty one if only the base URL is being used), headers and data object if it's required either for POST or PUT operation.

public interface IHttpResponse
{
    HttpStatusCode StatusCode { get; }
    bool IsValid { get; }
    string ReasonPhrase { get; }
    IDictionary<string, string> Headers { get; }
    string Data { get; }
}

IHttpResponse is defined as the response returned by the web server, which contains basic fields such as StatusCode or ReasonPhrase. If the response has a body (e.g. JSON object), it will be serialized as a string to the Data property.

public interface IHttpService
{
    Task<IHttpResponse> ExecuteAsync(string baseUrl, IHttpRequest request, TimeSpan? timeout = null);
}

IHttpService is responsible for making an HTTP request. It can be configured via the WithHttpServiceProvider() method. By default it is based on the HttpClient.