API: C#

Given example written on C# contains the following patterns:

Pattern
Code Line
Login 262
Platforms listing 282
Device list by Platform 299
ServerView (SV) Device by ID 315
Edit Device 319
Get Monitors 334
Get Frequencies 342
Get notification groups 350
Create new SV Device 357
Add new HTTP task 392
Schedule listing 419
Create new Schedule 426
CODE:

using System;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;
namespace example
{
 class Program
 {
 class OperatioResult
 {
 public bool Success { get; set; }
 public string Result { get; set; }
 public override string ToString()
 {
 return String.Format("Success: {0}; Result: {1}", Success, Result);
 }
 }
 class ErrorResult
 {
 public bool Success { get; set; }
 public string[] ErrorDescription { get; set; }
 public override string ToString()
 {
 return String.Join(Environment.NewLine, ErrorDescription);
 }
 }
 class Platform
 {
 public int Id { get; set; }
 public string Name { get; set; }
 public bool Available { get; set; }
 public override string ToString()
 {
 return String.Format("Id: {0}; Name: {1}; Available: {2}", Id, Name, Available);
 }
 }
 class Monitor
 {
 public int Id { get; set; }
 public string Name { get; set; }
 public bool Available { get; set; }
 public bool IsDeleted { get; set; }
 public bool IsPrivate { get; set; }
 public override string ToString()
 {
 return String.Format("Id: {0}; Name: {1}; Available: {2}; IsDeleted: {3}; IsPrivate: {4}",
 Id, Name, Available, IsDeleted, IsPrivate);
 }
 }
 class WeeklyInterval
 {
 public string[] Days { get; set; }
 public int From_Min { get; set; }
 public int To_Min { get; set; }
 public bool Included { get; set; }
 public override string ToString()
 {
 return String.Format("Days: [{0}]; From_Min: {1} (Time: {4}); To_Min: {2} (Time: {5}); Included: {3}",
 String.Join(", ", Days), From_Min, To_Min, Included, TimeSpan.FromMinutes(From_Min), TimeSpan.FromMinutes(To_Min));
 }
 }
 class DateTimeInterval
 {
 public long From { get; set; }
 public long To { get; set; }
 public override string ToString()
 {
 return String.Format("From: {0} (Time: {2}); To: {1} (Time: {3})",
 From, To, UnixBaseTime.AddMilliseconds(From), UnixBaseTime.AddMilliseconds(To));
 }
 }
 class AssignedToInfo
 {
 /// summary
 /// read only
 /// /summary
 public int[] Devices { get; set; }
 /// summary
 /// read only
 /// /summary
 public int[] Notification_Groups { get; set; }
 public override string ToString()
 {
 return String.Format("Devices: [{0}]; Notification_Groups: [{1}]",
 String.Join(", ", Devices.Select(id => id.ToString()).ToArray()),
 String.Join(", ", Notification_Groups.Select(id => id.ToString()).ToArray()));
 }
 }
 class Scheduler
 {
 public int Id { get; set; }
 public string Name { get; set; }
 public string Description { get; set; }
 public WeeklyInterval[] Weekly_Intervals { get; set; }
 public DateTimeInterval[] Date_Time_Intervals { get; set; }
 public AssignedToInfo Assigned_To { get; set; }
 public override string ToString()
 {
 return String.Format("Id: {0}; Name: {1}; Description: {2}; Weekly_Intervals: [{3}]; Date_Time_Intervals: [{4}]; AssignedToInfo: {5}",
 Id, Name, Description,
 String.Join(", ", Weekly_Intervals.Select(wi => wi.ToString()).ToArray()),
 String.Join(", ", Date_Time_Intervals.Select(dti => dti.ToString()).ToArray()), Assigned_To);
 }
 }
 class SiteNotifyGroup
 {
 public int Id { get; set; }
 public int Time_Shift_Min { get; set; }
 }
 class Notifications
 {
 public bool E_Mail_Flag { get; set; }
 public string E_Mail_Address { get; set; }
 public int E_Mail_TimeInterval_Min { get; set; }
 public bool WL_Device_Flag { get; set; }
 public string WL_Device_Email_Address { get; set; }
 public int WL_Device_TimeInterval_Min { get; set; }
 public bool Pager_Flag { get; set; }
 public string Pager_Area_Code { get; set; }
 public string Pager_Phone { get; set; }
 public string Pager_Num_Code { get; set; }
 public int Pager_TimeInterval_Min { get; set; }
 public bool Phone_Flag { get; set; }
 public string Phone_Area_Code { get; set; }
 public string Phone_Phone { get; set; }
 public int Phone_TimeInterval_Min { get; set; }
 public bool SMS_Flag { get; set; }
 public string SMS_Phone { get; set; }
 public int SMS_TimeInterval_Min { get; set; }
 public bool Script_Flag { get; set; }
 public string Script_Batch_File_Name { get; set; }
 public int Script_TimeInterval_Min { get; set; }
 public int SNMP_TimeInterval_Min { get; set; }
 public SiteNotifyGroup[] Notification_Groups { get; set; }
 }
 class ServerViewDevice
 {
 public int Id { get; set; }
 public int Platform_Id { get; set; }
 public string Name { get; set; }
 public int Number_Of_Tasks { get; set; }
 public string Status_Description { get; set; }
 public bool Postpone { get; set; }
 public bool Send_Uptime_Alert { get; set; }
 public int Owner_Device_Id { get; set; }
 public int Frequency { get; set; }
 public int Filter_Id { get; set; }
 public int Scheduler_Id { get; set; }
 public Notifications Notifications { get; set; }
 public bool Avoid_Simultaneous_Checks { get; set; }
 public bool False_Positive_Check { get; set; }
 public int Alert_Silence_Min { get; set; }
 public int[] Locations { get; set; }
 }
 class TaskType
 {
 public int Id { get; set; }
 public string Name { get; set; }
 }
 class NameValuePair
 {
 public string Name { get; set; }
 public string Value { get; set; }
 }
 class HTTPTask
 {
 public int Device_Id { get; set; }
 public int Id { get; set; }
 public int Task_Type_Id { get; set; }
 public string Name { get; set; }
 public int Timeout { get; set; }
 public string RequestType { get; set; }
 public string Url { get; set; }
 public string Keyword1 { get; set; }
 public string Keyword2 { get; set; }
 public string Keyword3 { get; set; }
 public string UserName { get; set; }
 public string UserPass { get; set; }
 public bool FullPageDownload { get; set; }
 public bool Download_Html { get; set; }
 public bool Download_Frames { get; set; }
 public bool Download_StyleSheets { get; set; }
 public bool Download_Scripts { get; set; }
 public bool Download_Images { get; set; }
 public bool Download_Objects { get; set; }
 public bool Download_Applets { get; set; }
 public bool Download_Additional { get; set; }
 public NameValuePair[] GetParams { get; set; }
 public NameValuePair[] PostParams { get; set; }
 public NameValuePair[] HeaderParams { get; set; }
 string PrepareScript { get; set; }
 }
 enum RequestMethod
 {
 GET,
 POST
 }
 private static CookieContainer container;
 public static readonly DateTime UnixBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
 // setting up request function
 private static string Request(string action, RequestMethod requestType, string data)
 {
 WebRequest request = WebRequest.Create("https://api.dotcom-monitor.com/config_api_v1/" + action);
 request.Method = requestType.ToString();
 ((HttpWebRequest) request).CookieContainer = container;
 if (requestType == RequestMethod.POST)
 {
 string postData = data;
 if (postData.Length > 0)
 {
 byte[] byteArray = Encoding.UTF8.GetBytes(postData);
 request.ContentType = "application/json";
 request.ContentLength = byteArray.Length;
 Stream dataStream = request.GetRequestStream();
 dataStream.Write(byteArray, 0, byteArray.Length);
 }
 else
 {
 request.ContentLength = 0;
 }
 }
 try
 {
 using (var response = request.GetResponse())
 {
 using (var stream = response.GetResponseStream())
 {
 if (stream != null)
 {
 using (var reader = new StreamReader(stream))
 {
 return reader.ReadToEnd();
 }
 }
 }
 }
 }
 catch (Exception ex)
 {
 using (var stream = ex.Response.GetResponseStream())
 {
 using (var reader = new StreamReader(stream))
 {
 throw new Exception(reader.ReadToEnd());
 }
 }
 }
 return String.Empty;
 }

 static void Main()
 {
 // ignore certificate errors
 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
 // initialize cookie container
 container = new CookieContainer();
 // initialize javascript serializer
 var serializer = new JavaScriptSerializer();
 // login
 Console.WriteLine("==Login==");
 string resultStr;
 try
 {
 resultStr = Request("login", RequestMethod.POST,
 serializer.Serialize(
 new {
 UserName = "1",
 Password = "1"
 }
 ));
 var result = serializer.Deserialize<OperatioResult>(resultStr);
 Console.WriteLine(result.ToString());
 }
 catch (Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }
 // get platforms
 Console.WriteLine("==Get platforms==");
 IEnumerable<Platform> platforms = null;
 try
 {
 resultStr = Request("platforms", RequestMethod.GET, String.Empty);
 platforms = serializer.Deserialize<Platform[]>(resultStr);
 }
 catch(Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }
 foreach (var platform in platforms)
 {
 Console.WriteLine(platform);
 }
 // get devices by platform
 Console.WriteLine("==Get devices by platform==");
 int svDeviceId = 0;
 foreach (var platform in platforms.Where(p => p.Available))
 {
 resultStr = Request(String.Format("devices/{0}", platform.Name), RequestMethod.GET, String.Empty);
 var ds = serializer.Deserialize<int[]>(resultStr);
 foreach (var id in ds)
 {
 if (svDeviceId == 0 && platform.Id == 1)
 {
 svDeviceId = id;
 }
 Console.WriteLine("{0} - {1}", platform.Name, id);
 }
 }
 // get ServerView device by id
 Console.WriteLine("==Get device by id==");
 resultStr = Request(String.Format("device/{0}", svDeviceId), RequestMethod.GET, String.Empty);
 var device = serializer.Deserialize<ServerViewDevice>(resultStr);
 // edit device
 Console.WriteLine("==Edit device==");
 device.Name = device.Name + " (edited)";
 try
 {
 resultStr = Request(String.Format("device/{0}", device.Id), RequestMethod.POST,
 serializer.Serialize(device));
 var result = serializer.Deserialize<OperatioResult>(resultStr);
 Console.WriteLine(result.ToString());
 }
 catch (Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }
 // get monitors
 Console.WriteLine("==Get monitors==");
 IEnumerable<Monitor> monitors = serializer.Deserialize<Monitor[]>(Request(String.Format("locations/{0}", device.Platform_Id),
 RequestMethod.GET, String.Empty));
 foreach (var monitor in monitors)
 {
 Console.WriteLine(monitor);
 }
 // get frequencies
 Console.WriteLine("==Get frequencies==");
 var frequencies = serializer.Deserialize<int[]>(Request(String.Format("frequencies/{0}", device.Platform_Id),
 RequestMethod.GET, String.Empty));
 foreach (var frequency in frequencies)
 {
 Console.WriteLine(frequency);
 }
 // get notification groups
 Console.WriteLine("==Get notification groups==");
 var ngs = serializer.Deserialize<int[]>(Request("groups", RequestMethod.GET, String.Empty));
 foreach (var ng in ngs)
 {
 Console.WriteLine(ng);
 }
 // create new device
 Console.WriteLine("==Create device==");
 device = new ServerViewDevice
 {
 Platform_Id = platforms.Single(p => p.Name.ToLower() == "serverview").Id,
 Name = "new device",
 Frequency = frequencies[0],
 Postpone = true,
 Locations = monitors.Where(m => m.Available && !m.IsPrivate && (m.Id%2 == 0)).Select(m => m.Id).ToArray(),
 Avoid_Simultaneous_Checks = true,
 Notifications = new Notifications
 {
 E_Mail_Flag = false,
 Pager_Flag = false,
 Phone_Flag = false,
 SMS_Flag = false,
 Script_Flag = false,
 WL_Device_Flag = false,
 Notification_Groups = ngs.Take(1).Select(ng => new SiteNotifyGroup {Id = ng, Time_Shift_Min = 0 /*0 = Immediate*/}).ToArray()
 }
 };
 int newDeviceId = 0;
 try
 {
 resultStr = Request("devices?verb=PUT", RequestMethod.POST,
 serializer.Serialize(device));
 var result = serializer.Deserialize<OperatioResult>(resultStr);
 newDeviceId = int.Parse(result.Result);
 Console.WriteLine(result.ToString());
 }
 catch (Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }
 // add new HTTP task
 Console.WriteLine("==Create HTTP task==");
 resultStr = Request("tasktypes/" + device.Platform_Id, RequestMethod.GET, String.Empty);
 var tts = serializer.Deserialize<TaskType[]>(resultStr);
 var httpTT = tts.Single(tt => tt.Name.ToLower() == "http");
 var task = new HTTPTask
 {
 Device_Id = newDeviceId,
 Task_Type_Id = httpTT.Id,
 Name = "New HTTP Task",
 Timeout = 100500,
 RequestType = "GET",
 Url = "amazon.de"
 };
 try
 {
 resultStr = Request("tasks?verb=PUT", RequestMethod.POST,
 serializer.Serialize(task));
 var result = serializer.Deserialize<OperatioResult>(resultStr);
 Console.WriteLine(result.ToString());
 }
 catch (Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }

 // get schedulers
 Console.WriteLine("==Get schedulers==");
 var ss = serializer.Deserialize<int[]>(Request("schedulers", RequestMethod.GET, String.Empty));
 foreach (var s in ss)
 {
 Console.WriteLine(serializer.Deserialize<Scheduler>(Request("scheduler/" + s, RequestMethod.GET, String.Empty)));
 }
 // create new schedulers
 Console.WriteLine("==Create new schedulers==");
 var scheduler = new Scheduler
 {
 Name = "New",
 Description = "descr",
 Date_Time_Intervals = new[]
 {
 new DateTimeInterval
 {
 From = (long) (new DateTime(2013, 2, 2, 2, 0, 0, 0) - UnixBaseTime).TotalMilliseconds,
 To = (long) (new DateTime(2013, 2, 2, 2, 30, 0, 0) - UnixBaseTime).TotalMilliseconds,
 }
 },
 Weekly_Intervals = new[]
 {
 new WeeklyInterval
 {
 Days = new[] {"mo", "tu", "sa"},
 From_Min = (int) new TimeSpan(7, 0, 0).TotalMinutes,
 To_Min = (int) new TimeSpan(13, 0, 0).TotalMinutes,
 Included = false
 }
 }
 };
 try
 {
 resultStr = Request("schedulers?verb=PUT", RequestMethod.POST,
 serializer.Serialize(scheduler));
 var result = serializer.Deserialize<OperatioResult>(resultStr);
 Console.WriteLine(result.ToString());
 }
 catch (Exception ex)
 {
 var err = serializer.Deserialize<ErrorResult>(ex.Message);
 Console.WriteLine(err.ToString());
 }
 Console.ReadKey();
 }
 }
}