Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ npm-debug.log
*.ipr
*.iws
/.project
/packages

/packages
.vs/

6 changes: 6 additions & 0 deletions BuildMonitor/BuildMonitor.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,15 @@
<Compile Include="Helpers\BuildMonitorModelHandlerBase.cs" />
<Compile Include="Helpers\CustomBuildMonitorModelHandler.cs" />
<Compile Include="Helpers\IBuildMonitorModelHandler.cs" />
<Compile Include="Helpers\OctopusHandler.cs" />
<Compile Include="Helpers\RequestHelper.cs" />
<Compile Include="Helpers\DefaultBuildMonitorModelHandler.cs" />
<Compile Include="Models\Home\HiddenJob.cs" />
<Compile Include="Models\Home\MainMonitorViewMod.cs" />
<Compile Include="Models\Home\OctopusEnvironment.cs" />
<Compile Include="Models\Home\OctopusItem.cs" />
<Compile Include="Models\Home\OctopusMonitorViewModel.cs" />
<Compile Include="Models\Home\OctopusProject.cs" />
<Compile Include="Models\Home\Settings\Group.cs" />
<Compile Include="Models\Home\Settings\Job.cs" />
<Compile Include="Models\Home\Settings\Settings.cs" />
Expand Down
23 changes: 18 additions & 5 deletions BuildMonitor/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,39 @@ namespace BuildMonitor.Controllers
{
public class HomeController : Controller
{
private readonly IBuildMonitorModelHandler modelHandler;
private readonly IBuildMonitorModelHandler _modelHandler;
private readonly IOctopusHandler _octopusHandler;

public HomeController()
{
modelHandler = new DefaultBuildMonitorModelHandler();
_modelHandler = new DefaultBuildMonitorModelHandler();
//modelHandler = new CustomBuildMonitorModelHandler();
_octopusHandler = new OctopusHandler();

RequestHelper.Username = ConfigurationManager.AppSettings["teamcity_username"];
RequestHelper.Password = ConfigurationManager.AppSettings["teamcity_password"];
}

public ActionResult Index()
{
var model = modelHandler.GetModel();
return View(model);
var model = _modelHandler.GetModel();
var octoViewModel = _octopusHandler.GetModel();
var mainModel = new MainMonitorViewMod()
{
BuildMonitor = model,
OctopusMonitor = octoViewModel
};
return View(mainModel);
}

public string GetOctopus()
{
return _octopusHandler.GetJson();
}

public JsonResult GetBuilds()
{
var model = modelHandler.GetModel();
var model = _modelHandler.GetModel();

var builds = model.Projects.SelectMany(p => p.Builds).ToList();

Expand Down
90 changes: 90 additions & 0 deletions BuildMonitor/Helpers/OctopusHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Web.Helpers;
using System.Web.Mvc;
using BuildMonitor.Models.Home;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace BuildMonitor.Helpers
{
public class OctopusHandler : IOctopusHandler
{
private dynamic json;
public string GetJson()
{
return HttpGet();
}

public OctopusMonitorViewModel GetModel()
{
json = JsonConvert.DeserializeObject<dynamic>(GetJson());
var model = new OctopusMonitorViewModel();

var projects = json.Projects;
foreach (var project in projects)
{
var octopusProject = new OctopusProject
{
Id = project.Id,
Name = project.Name
};

List<dynamic> environmentList = json.Environments.ToObject<List<dynamic>>();
List<dynamic> currentEnvironmentList = project.EnvironmentIds.ToObject<List<dynamic>>();
List<dynamic> itemList = json.Items.ToObject<List<dynamic>>();

octopusProject.OctopusEnvironments.AddRange(environmentList
.Where(e => currentEnvironmentList.Contains(e.Id.ToString()))
.Select(e => new OctopusEnvironment()
{
Id = e.Id,
Name = e.Name,
OctopusItem = itemList
.Select(i => new OctopusItem()
{
EnvironmentId = i.EnvironmentId,
Id = i.Id,
ProjectId = i.ProjectId,
State = i.State,
ReleaseVersion = i.ReleaseVersion
})
.FirstOrDefault(i => (i.ProjectId.Equals(project.Id.ToString()) && i.EnvironmentId.Equals( e.Id.ToString())))
}));

model.OctopusProjects.Add(octopusProject);
}



return model;
}

public string HttpGet()
{
var octopusKey = ConfigurationManager.AppSettings["octopus_api_key"];
var octopusUrl = ConfigurationManager.AppSettings["octopus_api_url"];

WebClient client = new WebClient();
client.Headers.Add("X-Octopus-ApiKey", octopusKey);
Stream data = client.OpenRead(octopusUrl);
if (data == null) return " ";
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
data.Close();
reader.Close();

return s;
}
}

public interface IOctopusHandler
{
string GetJson();
OctopusMonitorViewModel GetModel();
}
}
8 changes: 8 additions & 0 deletions BuildMonitor/Models/Home/MainMonitorViewMod.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace BuildMonitor.Models.Home
{
public class MainMonitorViewMod
{
public BuildMonitorViewModel BuildMonitor { get; set; }
public OctopusMonitorViewModel OctopusMonitor { get; set; }
}
}
12 changes: 12 additions & 0 deletions BuildMonitor/Models/Home/OctopusEnvironment.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;

namespace BuildMonitor.Models.Home
{
public class OctopusEnvironment
{
public String Name { get; set; }
public String Id { get; set; }
public OctopusItem OctopusItem { get; set; }
}
}
14 changes: 14 additions & 0 deletions BuildMonitor/Models/Home/OctopusItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;

namespace BuildMonitor.Models.Home
{
public class OctopusItem
{
public String Id { get; set; }
public String ProjectId { get; set; }
public String EnvironmentId { get; set; }
public String State { get; set; }
public String ReleaseVersion { get; set; }

}
}
15 changes: 15 additions & 0 deletions BuildMonitor/Models/Home/OctopusMonitorViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;

namespace BuildMonitor.Models.Home
{
public class OctopusMonitorViewModel
{
public List<OctopusProject> OctopusProjects { get; set; }

public OctopusMonitorViewModel()
{
OctopusProjects = new List<OctopusProject>();
}
}
}
16 changes: 16 additions & 0 deletions BuildMonitor/Models/Home/OctopusProject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;

namespace BuildMonitor.Models.Home
{
public class OctopusProject
{
public String Id { get; set; }
public String Name { get; set; }
public List<OctopusEnvironment> OctopusEnvironments { get; set; }
public OctopusProject()
{
OctopusEnvironments = new List<OctopusEnvironment>();
}
}
}
4 changes: 2 additions & 2 deletions BuildMonitor/Views/Home/Index.cshtml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
@model BuildMonitor.Models.Home.BuildMonitorViewModel
@model BuildMonitor.Models.Home.MainMonitorViewMod
@{
ViewBag.Title = "Build Monitor";
}

@foreach (var project in Model.Projects)
@foreach (var project in Model.BuildMonitor.Projects)
{
if (project.Builds.Count == 0)
{
Expand Down
12 changes: 8 additions & 4 deletions BuildMonitor/Web.config
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,19 @@
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

<!-- TeamCity setup -->
<add key="teamcity_username" value="set_your_username" />
<add key="teamcity_password" value="set_your_password" />
<add key="teamcity_api_url" value="http://set_your_teamcity_url" />
<add key="teamcity_username" value="andersrm" />
<add key="teamcity_password" value="passord123" />
<add key="teamcity_api_url" value="http://10.1.8.23" />
<add key="teamcity_api_projects" value="/httpAuth/app/rest/projects" />
<add key="teamcity_api_buildtypes" value="/httpAuth/app/rest/buildTypes" />
<add key="teamcity_api_buildstatus" value="/httpAuth/app/rest/buildTypes/id:{0}/builds/branch:(default:any)" />
<add key="teamcity_api_runningbuilds" value="/httpAuth/app/rest/builds?locator=running:true,branch:(default:any)" />
<add key="teamcity_api_buildqueue" value="/httpAuth/app/rest/buildQueue" />
</appSettings>

<add key="octopus_api_key" value="API-NSNPZKDTS8KET9Y1S2TQSKLA3DO" />
<add key="octopus_api_url" value="http://cen-euaz-oct.northeurope.cloudapp.azure.com/api/dashboard" />

</appSettings>
<system.web>
<customErrors mode="Off" />
<authentication mode="None" />
Expand Down