Skip to content

Commit 19a92bb

Browse files
Merge pull request #83 from hmrc/BDOG-302
BDOG-302 added vendor icon, better sorting, jdk kind data
2 parents b491ebb + 5ac18e1 commit 19a92bb

File tree

10 files changed

+57
-44
lines changed

10 files changed

+57
-44
lines changed

app/uk/gov/hmrc/cataloguefrontend/JDKVersionController.scala

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
package uk.gov.hmrc.cataloguefrontend
1818
import javax.inject.{Inject, Singleton}
1919
import play.api.mvc.ControllerComponents
20-
import uk.gov.hmrc.cataloguefrontend.connector.model.{JDKUsageByEnvFormat, JDKVersionFormats}
20+
import uk.gov.hmrc.cataloguefrontend.connector.model.JDKVersion
2121
import uk.gov.hmrc.cataloguefrontend.service.DependenciesService
2222
import uk.gov.hmrc.play.bootstrap.controller.BackendController
23-
import views.html.{JdkVersionPage, JdkAcrossEnvironmentsPage}
23+
import views.html.{JdkAcrossEnvironmentsPage, JdkVersionPage}
2424
import uk.gov.hmrc.cataloguefrontend.connector.SlugInfoFlag
2525

2626
import scala.concurrent.{ExecutionContext, Future}
@@ -36,21 +36,20 @@ class JDKVersionController @Inject()(
3636
extends BackendController(cc) {
3737

3838
def findLatestVersions(flag: String) = Action.async { implicit request =>
39-
implicit val r = JDKVersionFormats.jdkFormat
40-
4139
for {
4240
flag <- Future.successful(SlugInfoFlag.parse(flag.toLowerCase).getOrElse(SlugInfoFlag.Latest))
4341
jdkVersions <- dependenciesService.getJDKVersions(flag)
44-
} yield Ok(jdkPage(jdkVersions, SlugInfoFlag.values, flag))
42+
} yield Ok(jdkPage(jdkVersions.sortBy(byJDKVersion), SlugInfoFlag.values, flag))
4543
}
4644

4745
def compareAllEnvironments() = Action.async { implicit request =>
48-
implicit val r = JDKUsageByEnvFormat.jdkUsageByEnvFormat
4946

5047
for {
5148
envs <- Future.sequence(SlugInfoFlag.values.map(dependenciesService.getJDKCountsForEnv))
52-
jdks = envs.flatMap(_.usage.keys).distinct.sorted
49+
jdks = envs.flatMap(_.usage.keys).distinct.sortBy(byJDKVersion)
5350
} yield Ok(jdkCountsPage(envs, jdks))
5451
}
5552

53+
private def byJDKVersion(v: JDKVersion) = v.version.replaceAll("\\D", "").toInt
54+
5655
}

app/uk/gov/hmrc/cataloguefrontend/connector/model/JDKVersion.scala

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,4 @@ trait JDKVersionFormats {
3535
object JDKVersionFormats extends JDKVersionFormats
3636

3737

38-
case class JDKUsageByEnv(env: String, usage: Map[String, Int])
39-
40-
41-
trait JDKUsageByEnvFormat {
42-
43-
val jdkUsageByEnvFormat: OFormat[JDKUsageByEnv] =
44-
(
45-
(__ \ "env").format[String]
46-
~ (__ \ "usage").format[Map[String, Int]]
47-
)(JDKUsageByEnv.apply, unlift(JDKUsageByEnv.unapply))
48-
49-
}
50-
51-
object JDKUsageByEnvFormat extends JDKUsageByEnvFormat
38+
case class JDKUsageByEnv(env: String, usage: Map[JDKVersion, Int])

app/uk/gov/hmrc/cataloguefrontend/service/DependenciesService.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class DependenciesService @Inject()(
7979
def getJDKCountsForEnv(env: SlugInfoFlag)(implicit hc: HeaderCarrier) : Future[JDKUsageByEnv] =
8080
for {
8181
versions <- serviceDependenciesConnector.getJDKVersions(env)
82-
counts = versions.groupBy(_.version).mapValues(_.length)
82+
counts = versions.groupBy(j => j.copy(name ="")).mapValues(_.length)
8383
} yield JDKUsageByEnv(env.asString, counts)
8484

8585
}

app/views/JdkAcrossEnvironmentsPage.scala.html

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
@import uk.gov.hmrc.cataloguefrontend.routes
2525
@import uk.gov.hmrc.cataloguefrontend.connector.model.JDKUsageByEnv
2626

27+
28+
@import uk.gov.hmrc.cataloguefrontend.{ routes => appRoutes }
29+
2730
@this(viewMessages: ViewMessages)
2831

29-
@(data: List[JDKUsageByEnv],
30-
jdks: List[String])(implicit request: Request[_])
32+
@(envdata: List[JDKUsageByEnv],
33+
jdks: List[JDKVersion])(implicit request: Request[_])
3134

3235
@standard_layout(s"JDK Versions", "dependencies") {
3336
<header>
@@ -45,13 +48,28 @@ <h1 id="jdk-header">JDK Versions Across Environments</h1>
4548
<thead>
4649
<tr>
4750
<th>Environment</th>
48-
@jdks.map(jdk => {<th>{jdk}</th>})
51+
@jdks.map(jdk => {
52+
53+
{if(jdk.vendor.equalsIgnoreCase("Oracle")){
54+
<th>
55+
<img src="/assets/img/oracle2.gif" width="68px" alt="Oracle"/>
56+
{jdk.version}
57+
</th>
58+
}else {
59+
<th>
60+
<img src="/assets/img/openjdk.png" width="55px" alt="OpenJDK"/>
61+
{jdk.version}
62+
</th>
63+
}
64+
}
65+
66+
})
4967
</tr>
5068

5169
</thead>
5270
<tbody>
5371

54-
@for(d <- data) {
72+
@for(d <- envdata) {
5573
<tr>
5674
<td><a href="@routes.JDKVersionController.findLatestVersions(d.env)">@d.env</a></td>
5775
@for(jdk <- jdks) { <td>@{d.usage.getOrElse(jdk, 0)}</td>}
@@ -93,11 +111,11 @@ <h1 id="jdk-header">JDK Versions Across Environments</h1>
93111
var data = new google.visualization.DataTable();
94112
data.addColumn('string', 'Environment');
95113
@for(jdk <- jdks) {
96-
data.addColumn('number','@jdk');
114+
data.addColumn('number','@{jdk.version} @{jdk.vendor}');
97115
}
98116

99117
data.addRows([
100-
@for(d <- data) {
118+
@for(d <- envdata) {
101119
['@d.env' @for(jdk <- jdks) {,@{d.usage.getOrElse(jdk, 0)}}],
102120
}
103121
]);

app/views/JdkVersionPage.scala.html

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ <h4>Vendors</h4>
6363
<thead>
6464
<tr>
6565
<th>Service</th>
66-
<th>JDK Vendor</th>
66+
<th>Vendor</th>
6767
<th>JDK Version</th>
68+
<th>Type</th>
6869
</tr>
6970
</thead>
7071
<tbody>
@@ -90,10 +91,10 @@ <h4>Vendors</h4>
9091
data.addColumn('string', 'Version');
9192
data.addColumn('number', 'Count');
9293
data.addRows([
93-
@for(r <- jdkVersions.groupBy(_.version).mapValues(_.length)) {
94-
['JDK @r._1', @r._2],
94+
@for(r <- jdkVersions.groupBy(v => s"${v.version} ${v.vendor}").mapValues(_.length).toList.sortBy( _._1.replaceAll("\\D", "").toInt)) {
95+
['@r._1', @r._2],
9596
}
96-
].sort());
97+
]);
9798

9899
var options = {
99100
'width' : "40%",
@@ -112,7 +113,7 @@ <h4>Vendors</h4>
112113
data.addColumn('string', 'Version');
113114
data.addColumn('number', 'Count');
114115
data.addRows([
115-
@for(r <- jdkVersions.groupBy(_.vendor).mapValues(_.length)) {
116+
@for(r <- jdkVersions.groupBy(j => j.vendor + "(" + j.kind + ")").mapValues(_.length)) {
116117
['@r._1', @r._2],
117118
}
118119
].sort());
@@ -136,8 +137,14 @@ <h4>Vendors</h4>
136137
@jdkVersion(version: JDKVersion) = {
137138
<tr id="jdk-slug-@version.name">
138139
<td><a href="@routes.CatalogueController.repository(version.name)">@version.name</a></td>
139-
<td>@version.vendor</td>
140+
<td>@{version.vendor match {
141+
case "Oracle" => <img src="/assets/img/oracle2.gif" width="70px" alt="Oracle"/>
142+
case "OpenJDK" => <img src="/assets/img/openjdk.png" width="70px" alt="OpenJDK"/>
143+
}
144+
}
145+
</td>
140146
<td>@version.version</td>
147+
<td>@version.kind</td>
141148
</tr>
142149
}
143150

public/img/openjdk.png

13.4 KB
Loading

public/img/oracle.gif

3.57 KB
Loading

public/img/oracle2.gif

3.19 KB
Loading

test/uk/gov/hmrc/cataloguefrontend/service/DependenciesServiceSpec.scala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ class SlugInfoServiceSpec
8383
"return totals of each jdk in an environment" in {
8484
val boot = Boot.init
8585

86+
val jdk1 = JDKVersion(name = "test1", version = "1.181.1", vendor = "Oracle", kind = "JDK")
87+
val jdk2 = JDKVersion(name = "test2", version = "1.181.1", vendor = "Oracle", kind = "JDK")
88+
val jdk3 = JDKVersion(name = "test3", version = "1.191.1", vendor = "OpenJDK", kind = "JRE")
89+
val jdk4 = JDKVersion(name = "test4", version = "1.121.1", vendor = "OpenJDK", kind = "JRE")
90+
8691
when(boot.mockedServiceDependenciesConnector.getJDKVersions(SlugInfoFlag.Latest))
87-
.thenReturn(Future(List(
88-
JDKVersion(name = "test1", version = "1.181.1", vendor = "Oracle", kind = "JDK"),
89-
JDKVersion(name = "test2", version = "1.181.1", vendor = "Oracle", kind = "JDK"),
90-
JDKVersion(name = "test3", version = "1.191.1", vendor = "OpenJDK", kind = "JRE"),
91-
JDKVersion(name = "test4", version = "1.121.1", vendor = "OpenJDK", kind = "JRE"))))
92+
.thenReturn(Future(List(jdk1, jdk2, jdk3, jdk4)))
9293

93-
await(boot.service.getJDKCountsForEnv(SlugInfoFlag.Latest)) shouldBe JDKUsageByEnv(SlugInfoFlag.Latest.asString, Map("1.181.1"-> 2, "1.191.1"->1, "1.121.1" -> 1))
94+
await(boot.service.getJDKCountsForEnv(SlugInfoFlag.Latest)) shouldBe JDKUsageByEnv(SlugInfoFlag.Latest.asString, Map(jdk1.copy(name="") -> 2, jdk3.copy(name="") ->1, jdk4.copy(name="") -> 1))
9495
}
9596

9697
"still returns a value when no matches are found for env" in {
@@ -99,7 +100,7 @@ class SlugInfoServiceSpec
99100
when(boot.mockedServiceDependenciesConnector.getJDKVersions(SlugInfoFlag.Latest))
100101
.thenReturn(Future(List.empty[JDKVersion]))
101102

102-
await(boot.service.getJDKCountsForEnv(SlugInfoFlag.Latest)) shouldBe JDKUsageByEnv(SlugInfoFlag.Latest.asString, Map.empty[String, Int])
103+
await(boot.service.getJDKCountsForEnv(SlugInfoFlag.Latest)) shouldBe JDKUsageByEnv(SlugInfoFlag.Latest.asString, Map.empty[JDKVersion, Int])
103104
}
104105
}
105106

test/view/JDKVersionPageSpec.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ class JDKVersionPageSpec extends WordSpec with MockitoSugar with Matchers {
4545
val slug1 = document.select("#jdk-slug-test-slug")
4646
val slug2 = document.select("#jdk-slug-thing-service")
4747

48-
slug1.select("#jdk-slug-test-slug").text() shouldBe "test-slug OpenJDK 1.181.0"
49-
slug2.select("#jdk-slug-thing-service").text() shouldBe "thing-service Oracle 1.171.0"
50-
48+
slug1.select("#jdk-slug-test-slug").text() shouldBe "test-slug 1.181.0 JDK"
49+
slug1.select("#jdk-slug-test-slug img").attr("src") shouldBe "/assets/img/openjdk.png"
50+
slug2.select("#jdk-slug-thing-service").text() shouldBe "thing-service 1.171.0 JRE"
51+
slug2.select("#jdk-slug-thing-service img").attr("src") shouldBe "/assets/img/oracle2.gif"
5152
}
5253

5354

0 commit comments

Comments
 (0)