From d1014eed19906e7621d08ee4a0dbee9dbd4cdd9a Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 19 Dec 2016 21:33:29 -0800 Subject: [PATCH] fix created date Signed-off-by: Jess Frazelle --- server/server.go | 44 ++++++++++++++++++++++++++++++------ server/static/js/scripts.js | 4 ++-- server/templates/layout.html | 6 ++++- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/server/server.go b/server/server.go index 1fc1c8f4..d85fa9e6 100644 --- a/server/server.go +++ b/server/server.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "errors" "fmt" "html/template" @@ -12,6 +13,7 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/distribution/manifest/schema1" "github.com/docker/docker/cliconfig" "github.com/docker/engine-api/types" "github.com/jessfraz/reg/registry" @@ -224,9 +226,14 @@ type data struct { type repository struct { Name string - Tags string + Tag string RegistryURL string - // TODO: add date last uploaded + CreatedDate string +} + +type v1Compatibility struct { + ID string `json:"id"` + Created time.Time `json:"created"` } func createStaticIndex(r *registry.Registry, staticDir string) error { @@ -240,15 +247,38 @@ func createStaticIndex(r *registry.Registry, staticDir string) error { logrus.Info("fetching tags") var repos []repository for _, repo := range repoList { + // get the tags tags, err := r.Tags(repo) if err != nil { return fmt.Errorf("getting tags for %s failed: %v", repo, err) } - repos = append(repos, repository{ - Name: repo, - Tags: strings.Join(tags, " | "), - RegistryURL: r.Domain, - }) + for _, tag := range tags { + // get the manifest + + manifest, err := r.Manifest(repo, tag) + if err != nil { + return fmt.Errorf("getting tags for %s:%s failed: %v", repo, tag, err) + } + + var createdDate string + if m1, ok := manifest.(schema1.SignedManifest); ok { + history := m1.History + for _, h := range history { + var comp v1Compatibility + if err := json.Unmarshal([]byte(h.V1Compatibility), &comp); err != nil { + return fmt.Errorf("unmarshal v1compatibility failed: %v", err) + } + createdDate = comp.Created.Format(time.RFC1123) + } + } + + repos = append(repos, repository{ + Name: repo, + Tag: tag, + RegistryURL: r.Domain, + CreatedDate: createdDate, + }) + } } // create temporoary file to save template to diff --git a/server/static/js/scripts.js b/server/static/js/scripts.js index d0fa3886..1face9a1 100644 --- a/server/static/js/scripts.js +++ b/server/static/js/scripts.js @@ -23,7 +23,7 @@ function prettyDate(time){ function search(search_val){ var suche = search_val.toLowerCase(); var table = document.getElementById("directory"); - var cellNr = 1; + var cellNr = 0; var ele; for (var r = 1; r < table.rows.length; r++){ ele = table.rows[r].cells[cellNr].innerHTML.replace(/<[^>]+>/g,""); @@ -88,4 +88,4 @@ search_input.addEventListener('keypress', function(e){ clear_button.addEventListener('click', function(e){ search_input.value = ''; search(''); -}); \ No newline at end of file +}); diff --git a/server/templates/layout.html b/server/templates/layout.html index 873538c3..8d2fb210 100644 --- a/server/templates/layout.html +++ b/server/templates/layout.html @@ -23,6 +23,7 @@ Name Tags + Created Pull Command {{ range $key, $value := .Repos }} @@ -31,7 +32,10 @@ {{ $value.Name }} - {{ $value.Tags }} + {{ $value.Tag }} + + + {{ $value.CreatedDate }} docker pull {{ $value.RegistryURL }}/{{ $value.Name }}