Skip to content

Commit 6428389

Browse files
author
Rick Butterfield
committed
Add sustainability dashboard, rename App_Plugins folder
1 parent 89f9c99 commit 6428389

File tree

23 files changed

+631
-82
lines changed

23 files changed

+631
-82
lines changed

src/Umbraco.Community.Sustainability.TestSite.10.x/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,5 +478,6 @@ appsettings-schema.json
478478
/wwwroot/media/
479479

480480
# Test Site App_Plugins packages folder (exclude here as in Umbraco.Community.Sustainability project)
481+
/App_Plugins/UmbracoCommunitySustainability/
481482
/App_Plugins/Umbraco.Community.Sustainability/
482483
/App_Plugins/Bergmania.OpenStreetMap/

src/Umbraco.Community.Sustainability.TestSite.13.x/Views/Home.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
22
@using Umbraco.Extensions
33
@using Umbraco.Cms.Web.Common.PublishedModels;
44
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Home>
@@ -42,4 +42,4 @@
4242
</div>
4343
</div>
4444

45-
</section>
45+
</section>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace Umbraco.Community.Sustainability
2+
{
3+
public static partial class Constants
4+
{
5+
public static string Alias => "sustainability";
6+
public static string Name => "Sustainability";
7+
public static string SectionAlias => Alias;
8+
public static string DashboardAlias => $"{Alias}Dashboard";
9+
}
10+
}

src/Umbraco.Community.Sustainability/ContentApps/SustainabilityContentApp.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class SustainabilityContentApp : IContentAppFactory
2323
Alias = "sustainabilityCheck",
2424
Name = "Sustainability",
2525
Icon = "icon-eco",
26-
View = "/App_Plugins/Umbraco.Community.Sustainability/views/sustainability-content-app.html",
26+
View = "/App_Plugins/UmbracoCommunitySustainability/views/sustainability-content-app.html",
2727
Weight = 0
2828
};
2929
}

src/Umbraco.Community.Sustainability/Controllers/SustainabilityController.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Text.Json;
22
using Microsoft.AspNetCore.Mvc;
33
using Umbraco.Cms.Core;
4+
using Umbraco.Cms.Core.Models;
45
using Umbraco.Cms.Core.Models.PublishedContent;
56
using Umbraco.Cms.Web.BackOffice.Controllers;
67
using Umbraco.Community.Sustainability.Models;
@@ -26,6 +27,54 @@ public SustainabilityController(
2627
_sustainabilityService = sustainabilityService;
2728
}
2829

30+
[HttpGet]
31+
public async Task<IActionResult> GetOverviewData(int pageNumber = 1, int pageSize = 10, string orderBy = nameof(PageMetric.CarbonRating), Direction direction = Direction.Ascending)
32+
{
33+
var overviewMetrics = await _pageMetricService.GetOverviewMetrics();
34+
int total = overviewMetrics.Count();
35+
36+
var filteredMetrics = overviewMetrics;
37+
38+
Func<PageMetric, object?>? filter = null;
39+
switch (orderBy)
40+
{
41+
case nameof(PageMetric.CarbonRating):
42+
filter = x => x.CarbonRating;
43+
break;
44+
case nameof(PageMetric.RequestDate):
45+
filter = x => x.RequestDate;
46+
break;
47+
case nameof(PageMetric.TotalSize):
48+
filter = x => x.TotalSize;
49+
break;
50+
case nameof(PageMetric.TotalEmissions):
51+
filter = x => x.TotalEmissions;
52+
break;
53+
}
54+
55+
if (filter != null)
56+
{
57+
filteredMetrics = direction == Direction.Ascending ?
58+
filteredMetrics.OrderBy(filter) : filteredMetrics.OrderByDescending(filter);
59+
}
60+
61+
filteredMetrics = filteredMetrics.Skip((pageNumber - 1) * pageSize).Take(pageSize);
62+
63+
PagedResult<PageMetric> pagedMetrics = new PagedResult<PageMetric>(total, pageNumber, pageSize)
64+
{
65+
Items = filteredMetrics
66+
};
67+
68+
return Ok(pagedMetrics);
69+
}
70+
71+
public async Task<IActionResult> GetAverageData()
72+
{
73+
var averageMetrics = await _pageMetricService.GetAverageMetrics();
74+
75+
return Ok(averageMetrics);
76+
}
77+
2978
[HttpGet]
3079
public async Task<IActionResult> GetPageData([FromQuery] int pageId)
3180
{
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Umbraco.Community.Sustainability.Models
2+
{
3+
public class AveragePageMetrics
4+
{
5+
public AveragePageMetrics() { }
6+
7+
public string? CarbonRating { get; set; }
8+
public decimal? PageSize { get; set; }
9+
public decimal? Emissions { get; set; }
10+
}
11+
}

src/Umbraco.Community.Sustainability/Schemas/PageMetricSchema.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public class PageMetric
1717
[Column("NodeId")]
1818
public int NodeId { get; set; }
1919

20+
[Ignore]
21+
public string? NodeName { get; set; }
22+
2023
[Column("RequestedBy")]
2124
[NullSetting(NullSetting = NullSettings.Null)]
2225
public string? RequestedBy { get; set; }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Umbraco.Cms.Core.Sections;
2+
3+
namespace Umbraco.Community.Sustainability.Sections
4+
{
5+
public class SustainabilitySection : ISection
6+
{
7+
public string Alias => Constants.SectionAlias;
8+
public string Name => Constants.Name;
9+
}
10+
}

src/Umbraco.Community.Sustainability/Services/PageMetricService.cs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,59 @@
1+
using Umbraco.Cms.Core;
12
using Umbraco.Cms.Infrastructure.Scoping;
3+
using Umbraco.Community.Sustainability.Models;
24
using Umbraco.Community.Sustainability.Schemas;
35

46
namespace Umbraco.Community.Sustainability.Services
57
{
68
public interface IPageMetricService
79
{
10+
Task<IEnumerable<PageMetric>> GetOverviewMetrics();
11+
Task<AveragePageMetrics> GetAverageMetrics();
812
Task<IEnumerable<PageMetric>> GetPageMetrics(int pageId);
913
Task AddPageMetric(PageMetric pageMetric);
1014
}
1115

1216
public class PageMetricService : IPageMetricService
1317
{
1418
private readonly IScopeProvider _scopeProvider;
19+
private readonly IPublishedContentQuery _contentQuery;
1520

16-
public PageMetricService(IScopeProvider scopeProvider)
21+
public PageMetricService(
22+
IScopeProvider scopeProvider,
23+
IPublishedContentQuery contentQuery)
1724
{
1825
_scopeProvider = scopeProvider;
26+
_contentQuery = contentQuery;
27+
}
28+
29+
public async Task<IEnumerable<PageMetric>> GetOverviewMetrics()
30+
{
31+
using var scope = _scopeProvider.CreateScope();
32+
var queryResults = await scope.Database.FetchAsync<PageMetric>();
33+
34+
queryResults = queryResults.OrderByDescending(x => x.RequestDate).ToList();
35+
queryResults = queryResults.DistinctBy(x => x.NodeId).ToList();
36+
37+
foreach (var result in queryResults)
38+
{
39+
var node = _contentQuery.Content(result.NodeId);
40+
result.NodeName = node?.Name;
41+
}
42+
43+
scope.Complete();
44+
45+
return queryResults;
46+
}
47+
48+
public async Task<AveragePageMetrics> GetAverageMetrics()
49+
{
50+
var overviewMetrics = await GetOverviewMetrics();
51+
52+
return new AveragePageMetrics()
53+
{
54+
PageSize = overviewMetrics.Sum(x => x.TotalSize) / overviewMetrics.Count(),
55+
Emissions = overviewMetrics.Sum(x => x.TotalEmissions) / overviewMetrics.Count(),
56+
};
1957
}
2058

2159
public async Task<IEnumerable<PageMetric>> GetPageMetrics(int pageId)

src/Umbraco.Community.Sustainability/Services/SustainabilityService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public async Task<SustainabilityResponse> GetSustainabilityData(string url)
2525
// Add our script to report data
2626
await page.AddScriptTagAsync(new PageAddScriptTagOptions()
2727
{
28-
Url = "/App_Plugins/Umbraco.Community.Sustainability/js/resource-checker.js",
28+
Url = "/App_Plugins/UmbracoCommunitySustainability/js/resource-checker.js",
2929
Type = "module"
3030
});
3131

0 commit comments

Comments
 (0)