# UptimeSharp

UptimeSharp is a C# assembly for accessing the UptimeRobot API

`Install-Package UptimeSharp`

## Getting Started

UptimeSharp is a C#.NET class library that integrates the UptimeRobot API.

The wrapper consists of 2 parts:

- Get and modify monitors
- Get and modify alert contacts

## Install using NuGet

    Install-Package UptimeSharp

nuget.org/packages/UptimeSharp

## Usage Example

Get your API Key UptimeRobot (left section under "API Information")

Include the UptimeSharp namespace and it's associated models:

    using UptimeSharp;
    using UptimeSharp.Models;

Initialize UptimeClient with:

    UptimeClient _client = new UptimeClient("[YOUR_API_KEY]");

Do a simple request - e.g. get all your monitors:

    _client.GetMonitors().ForEach(
        item => Console.WriteLine(item.Name + " | " + item.Type)
    );

Which will output:

    frontendplay | HTTP
    google | Keyword
    localhost | Ping
    ...

## Constructor

    UptimeClient(string apiKey)

Get your API Key UptimeRobot (left section under "API Information")

## Monitor Types

- >HTTP
- Keyword
- Ping
- Port

### HTTP Monitoring

Simple HTTP monitor which requests the webpage every 5 minutes and checks for HTTP Status 200 OK.

### Keyword Monitoring

The keyword monitor is sniffing the page content if a specified keyword exists/not exists.

The keyword is submitted via the keywordValue parameter. The keywordType parameter specifies if the value should exist or not exist.

### Ping Monitoring

This type lets you monitor a server by pinging it.

### Port Monitoring

If you want to monitor a port, you need to specify a subType which is a common port a custom one:

- HTTP :80
- HTTPS :443
- FTP :21
- SMTP :25
- POP3 :110
- IMAP :143
- Custom Port (use the port parameter, if this option is selected)

## Release History

- 2013-08-28 v0.2.0 Request Validation
- 2013-08-26 v0.1.1 Adding a Port monitor works now
- 2013-08-25 v0.1.0 Monitor and Alert APIs

## Dependencies

- RestSharp
- ServiceStack.Text

## Contributors

Tobias Klika @ceee

## License

MIT License

## Retrieve

Get list of all monitors:

    List<Monitor> items = _client.GetMonitors();

Get monitors by ID - or a single monitor:

    List<Monitor> items = _client.GetMonitors(new int[]{ 12891, 98711 });
    // or
    Monitor item = _client.GetMonitor(12891);

Provide additional params for more data:

    List<Monitor> items = _client.GetMonitors(
        monitorIDs: new int[]{ 12891, 98711 },
        customUptimeRatio: new float[] { 7, 30, 45 },
        showLog: true,
        showAlerts: true
    );

`monitorIDs`: You can remove this parameter if you want to retrieve all monitors (default: null)
`customUptimeRatio`: the number of days to calculate the uptime ratio(s) for (default: null)
`showLog`: include log, if true (default: false)
`showAlerts`: include alerts, if true (default: true)

## Add

Adds/creates a new monitor.

    bool AddMonitor(
        string name,
        string uri,
        Type type = Type.HTTP,
        Subtype subtype = Subtype.Unknown,
        int? port = null,
        string keywordValue = null,
        KeywordType keywordType = KeywordType.Unknown,
        int[] alerts = null,
        string HTTPUsername = null,
        string HTTPPassword = null
    )

Example - Watch an SMTP Server:

    bool isSuccess = _client.AddMonitor(
        name: "cee",
        uri: "127.0.0.1",
        type: Type.Port,
        subtype: Subtype.SMTP
    );

`name`: A friendly name for the new monitor
`uri`: The URI or IP to watch
`type`: The type of the monitor
`subtype`: The subtype of the monitor (only for Type.Port)
`port`: The port (only for Subtype.Custom)
`keywordValue`: The keyword value (for Type.Keyword)
`keywordType`: Type of the keyword (for Type.Keyword)
`alerts`: An ID list of existing alerts to notify
`HTTPUsername`: The HTTP username
`HTTPPassword`: The HTTP password

As you can see, a lot of these parameters are only available if you've specified the correct `Type`.
If you've selected `Type.Port` for example, UptimeSharp will ignore the `keywordValue` and `keywordType` parameters, even if you submitted valid ones.

## Modify

In order to modify an existing monitor, just alter the properties of the Monitor instance and call the `ModifyMonitor` method:

    // Monitor myMonitor = ...
    myMonitor.Name = "my new name :-)";
    bool isSuccess = _client.ModifyMonitor(myMonitor);

Important: It is not possible to alter the `Type` of a monitor after its creation! In case you want to do this, you have to delete the monitor and create a new one with the changed type.

### Modify Alerts

Retrieve all alerts:

    List<Alert> items = _client.GetAlerts();

Retrieve alerts by IDs:

    List<Alert> items = _client.GetAlerts(new string[]{ "12897", "98711" });

Retrieve a specific alert:

    Alert item = _client.GetAlert("12897");

Adds an alert (Due to UptimeRobot API limitations SMS and Twitter alert contact types are not supported yet):

    bool isSuccess = _client.AddAlert(AlertType.Email, "uptimesharp@outlook.com");

Adds an alert from instance:

    // Alert myAlert = ...
    bool isSuccess = _client.AddAlert(myAlert);

Deletes an alert:

    bool isSuccess = _client.DeleteAlert("12897");

Deletes an alert from instance:

    // Alert myAlert = ...
    bool isSuccess = _client.DeleteAlert(myAlert);

## Delete

Delete a monitor by ID:

    bool isSuccess = _client.DeleteMonitor("12891");

Delete a monitor by a Monitor instance:

    // Monitor myMonitor = ...
    bool isSuccess = _client.DeleteMonitor(myMonitor);