From 89c95c76a28ac6ae7768ecd957d1e08e47dc48e7 Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:02:32 +0100 Subject: [PATCH 1/8] Issue #62 add registry ping messages --- grails-app/i18n/messages.properties | 3 +++ grails-app/i18n/messages_cs_CZ.properties | 3 +++ grails-app/i18n/messages_da.properties | 3 +++ grails-app/i18n/messages_de.properties | 3 +++ grails-app/i18n/messages_es.properties | 5 ++++- grails-app/i18n/messages_fr.properties | 3 +++ grails-app/i18n/messages_it.properties | 3 +++ grails-app/i18n/messages_ja.properties | 3 +++ grails-app/i18n/messages_nb.properties | 3 +++ grails-app/i18n/messages_nl.properties | 3 +++ grails-app/i18n/messages_pl.properties | 3 +++ grails-app/i18n/messages_pt_BR.properties | 5 ++++- grails-app/i18n/messages_pt_PT.properties | 3 +++ grails-app/i18n/messages_ru.properties | 3 +++ grails-app/i18n/messages_sv.properties | 5 ++++- grails-app/i18n/messages_th.properties | 3 +++ grails-app/i18n/messages_zh_CN.properties | 3 +++ 17 files changed, 54 insertions(+), 3 deletions(-) diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties index d541ca1..55f8ff0 100644 --- a/grails-app/i18n/messages.properties +++ b/grails-app/i18n/messages.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_cs_CZ.properties b/grails-app/i18n/messages_cs_CZ.properties index 9a38005..b6feede 100644 --- a/grails-app/i18n/messages_cs_CZ.properties +++ b/grails-app/i18n/messages_cs_CZ.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_da.properties b/grails-app/i18n/messages_da.properties index cf2ec92..a312eb3 100644 --- a/grails-app/i18n/messages_da.properties +++ b/grails-app/i18n/messages_da.properties @@ -77,4 +77,7 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_de.properties b/grails-app/i18n/messages_de.properties index 96dc2a8..00017e0 100644 --- a/grails-app/i18n/messages_de.properties +++ b/grails-app/i18n/messages_de.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_es.properties b/grails-app/i18n/messages_es.properties index 2291d3f..38c0628 100644 --- a/grails-app/i18n/messages_es.properties +++ b/grails-app/i18n/messages_es.properties @@ -76,4 +76,7 @@ labels.registry.apiVersion=API Version labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL -ui.dialog.button.deleteTag=Delete tag \ No newline at end of file +ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? \ No newline at end of file diff --git a/grails-app/i18n/messages_fr.properties b/grails-app/i18n/messages_fr.properties index 3041eea..f34947e 100644 --- a/grails-app/i18n/messages_fr.properties +++ b/grails-app/i18n/messages_fr.properties @@ -41,3 +41,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_it.properties b/grails-app/i18n/messages_it.properties index b8f4850..7ad6d95 100644 --- a/grails-app/i18n/messages_it.properties +++ b/grails-app/i18n/messages_it.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_ja.properties b/grails-app/i18n/messages_ja.properties index 49b8c1f..4626474 100644 --- a/grails-app/i18n/messages_ja.properties +++ b/grails-app/i18n/messages_ja.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_nb.properties b/grails-app/i18n/messages_nb.properties index 5bacbb2..0c1a973 100644 --- a/grails-app/i18n/messages_nb.properties +++ b/grails-app/i18n/messages_nb.properties @@ -77,4 +77,7 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_nl.properties b/grails-app/i18n/messages_nl.properties index 20bb177..888c070 100644 --- a/grails-app/i18n/messages_nl.properties +++ b/grails-app/i18n/messages_nl.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_pl.properties b/grails-app/i18n/messages_pl.properties index eab465e..c3c1456 100644 --- a/grails-app/i18n/messages_pl.properties +++ b/grails-app/i18n/messages_pl.properties @@ -81,3 +81,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_pt_BR.properties b/grails-app/i18n/messages_pt_BR.properties index bb74d75..05a53b1 100644 --- a/grails-app/i18n/messages_pt_BR.properties +++ b/grails-app/i18n/messages_pt_BR.properties @@ -80,4 +80,7 @@ labels.registry.apiVersion=API Version labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL -ui.dialog.button.deleteTag=Delete tag \ No newline at end of file +ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? \ No newline at end of file diff --git a/grails-app/i18n/messages_pt_PT.properties b/grails-app/i18n/messages_pt_PT.properties index ff1c7a9..8fafa8c 100644 --- a/grails-app/i18n/messages_pt_PT.properties +++ b/grails-app/i18n/messages_pt_PT.properties @@ -56,3 +56,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_ru.properties b/grails-app/i18n/messages_ru.properties index 47cd264..cd0807b 100644 --- a/grails-app/i18n/messages_ru.properties +++ b/grails-app/i18n/messages_ru.properties @@ -53,3 +53,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_sv.properties b/grails-app/i18n/messages_sv.properties index b0f53fe..344f226 100644 --- a/grails-app/i18n/messages_sv.properties +++ b/grails-app/i18n/messages_sv.properties @@ -76,4 +76,7 @@ labels.registry.apiVersion=API Version labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL -ui.dialog.button.deleteTag=Delete tag \ No newline at end of file +ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? \ No newline at end of file diff --git a/grails-app/i18n/messages_th.properties b/grails-app/i18n/messages_th.properties index 0c7ad8a..267d879 100644 --- a/grails-app/i18n/messages_th.properties +++ b/grails-app/i18n/messages_th.properties @@ -77,3 +77,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? diff --git a/grails-app/i18n/messages_zh_CN.properties b/grails-app/i18n/messages_zh_CN.properties index d30b9c5..0e30869 100644 --- a/grails-app/i18n/messages_zh_CN.properties +++ b/grails-app/i18n/messages_zh_CN.properties @@ -40,3 +40,6 @@ labels.registry.url=URL registry.apiVersion.label=API Version registry.url.label=URL ui.dialog.button.deleteTag=Delete tag +registry.ping.failed=Ping failed\! +registry.ping.succeeded=Ping succeeded +labels.registry.ping=Pingable? From ba0f8460c29f974f3f0c9763606c24df44296c77 Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:02:48 +0100 Subject: [PATCH 2/8] Issue #62 add DWR support --- grails-app/conf/BuildConfig.groovy | 1 + grails-app/conf/DwrConfigBootStrap.groovy | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 grails-app/conf/DwrConfigBootStrap.groovy diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 081df45..8f95b7d 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -70,6 +70,7 @@ grails.project.dependency.resolution = { compile ":jquery-ui:1.10.3" compile ":jquery-datatables:1.7.5" compile ":spring-security-core:2.0-RC3" + compile ":dwr:0.1" // plugins needed at runtime but not for compilation runtime ":hibernate4:4.3.5.3" diff --git a/grails-app/conf/DwrConfigBootStrap.groovy b/grails-app/conf/DwrConfigBootStrap.groovy new file mode 100644 index 0000000..0aff50d --- /dev/null +++ b/grails-app/conf/DwrConfigBootStrap.groovy @@ -0,0 +1,16 @@ +class DwrConfigBootStrap { + + def init = { servletContext -> } + def destroy = {} + + def dwrconfig = { + service(name: 'registryService', javascript: 'RestService') { + exclude('setMetaClass,getMetaClass,setProperty,getProperty') + } + + create(creator: 'new', javascript: 'AddressLookup') { + param(name: 'class') { 'uk.ltd.getahead.dwrdemo.address.AddressLookup' } + } + } +} + From c7cb85ba04ce33917e6ff2bde4be1e8e63e493e4 Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:03:08 +0100 Subject: [PATCH 3/8] Issue #62 show ping status --- grails-app/views/registry/show.gsp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/grails-app/views/registry/show.gsp b/grails-app/views/registry/show.gsp index 886ba1d..f87ce87 100644 --- a/grails-app/views/registry/show.gsp +++ b/grails-app/views/registry/show.gsp @@ -41,6 +41,15 @@ value="${registryInstance?.url}" readonly=""> + +
+ + +
+ ${registryIsUp ? message(code:"registry.ping.succeeded") : message(code:"registry.ping.failed")} +
+
+ From 9502503071667b9000fd67cee6e7613ef292718a Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:03:34 +0100 Subject: [PATCH 4/8] Issue #62 add ping support --- grails-app/domain/docker/registry/web/Registry.groovy | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/grails-app/domain/docker/registry/web/Registry.groovy b/grails-app/domain/docker/registry/web/Registry.groovy index d77e744..aa09cd7 100644 --- a/grails-app/domain/docker/registry/web/Registry.groovy +++ b/grails-app/domain/docker/registry/web/Registry.groovy @@ -9,7 +9,7 @@ class Registry { static constraints = { } - static transients = ['toUrl', 'repositories'] + static transients = ['toUrl', 'repositories', 'ping'] def toUrl() { return "${this.url}/${this.apiVersion}" @@ -19,6 +19,10 @@ class Registry { repositoryService.index(this) } + def ping() { + repositoryService.ping(this) + } + @Override public String toString() { return "Registry{" + From 4421da8b4b2855154f64e9c4656d45002f6dea3a Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:17:09 +0100 Subject: [PATCH 5/8] Issue #62 ping the reg on show() --- .../controllers/docker/registry/web/RegistryController.groovy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grails-app/controllers/docker/registry/web/RegistryController.groovy b/grails-app/controllers/docker/registry/web/RegistryController.groovy index 6538abf..c781288 100644 --- a/grails-app/controllers/docker/registry/web/RegistryController.groovy +++ b/grails-app/controllers/docker/registry/web/RegistryController.groovy @@ -16,7 +16,8 @@ class RegistryController { } def show(Registry registryInstance) { - respond registryInstance + boolean isUp = registryInstance?.ping() + respond registryInstance, model: [registryIsUp: isUp] } def create() { From 10a8132168e2a7977d3b9126dcbf016290b2e8ea Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 13:17:28 +0100 Subject: [PATCH 6/8] Issue #62 add ping() support --- .../registry/web/RepositoryService.groovy | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/grails-app/services/docker/registry/web/RepositoryService.groovy b/grails-app/services/docker/registry/web/RepositoryService.groovy index c5feb41..f4ec640 100644 --- a/grails-app/services/docker/registry/web/RepositoryService.groovy +++ b/grails-app/services/docker/registry/web/RepositoryService.groovy @@ -118,4 +118,25 @@ class RepositoryService { "${url.host}${url.port != -1 ? ':' + url.port : ''}/${repoName}:${tag}" } + boolean ping(Registry registry) { + def url = "${registry.toUrl()}/_ping" + def http = new HTTPBuilder(url) + def result = true + try { + http.request(Method.GET, groovyx.net.http.ContentType.JSON) { + response.success = { resp, json -> + log.info("Ping of $registry succeeded") + } + + response.failure = { resp -> + log.error("Failed to ping $url: ${resp.statusLine.statusCode} : ${resp.statusLine.reasonPhrase}") + result = false + } + } + } catch (final ConnectException|IOException e) { + log.info("Ping failed: $e") + result = false + } + result + } } From dc17dd266c8c19a558414a5b9e8c69a711004314 Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 14:11:39 +0100 Subject: [PATCH 7/8] Closes #62 check registry is up when reading from env --- grails-app/conf/BootStrap.groovy | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/grails-app/conf/BootStrap.groovy b/grails-app/conf/BootStrap.groovy index 04e5411..ac68b2a 100644 --- a/grails-app/conf/BootStrap.groovy +++ b/grails-app/conf/BootStrap.groovy @@ -23,6 +23,11 @@ class BootStrap { reg.url = urlStr.replaceAll("/(v\\d)/", "") // remove API version reg.apiVersion = m.group(1) // extracts e.g. v1 from url reg.save() + + if (!reg.ping()) { + log.warn("Registry '${reg.toUrl()}' ping failed! Check it's up!") + } + } else { log.error("Couldn't parse the API version from $regUrl") } From 5ba725881e91ffd8a51250a9490c464dab4a03ae Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Sat, 26 Jul 2014 14:18:13 +0100 Subject: [PATCH 8/8] Fixes #63 - force /dev/urandom for SecureRandom --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 985a049..adea8af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,3 +9,5 @@ RUN rm -rf /tomcat7/webapps/* VOLUME ["/var/lib/h2/", "/tomcat7"] ADD http://atc.gd/docker-registry-ui.war /tomcat7/webapps/ROOT.war + +CMD sed -i '1iexport CATALINA_OPTS=" -Djava.security.egd=file:/dev/./urandom "' bin/catalina.sh && bin/catalina.sh run