func (u *Unstructured) GetDeletionTimestamp() *unversioned.Time { var timestamp unversioned.Time timestamp.UnmarshalQueryParameter(getNestedString(u.Object, "metadata", "deletionTimestamp")) if timestamp.IsZero() { return nil } return ×tamp }
// hasIngressBeenTouched returns true if the route appears to have been touched since the last time func (a *StatusAdmitter) hasIngressBeenTouched(route *routeapi.Route, lastTouch *unversioned.Time) bool { glog.V(4).Infof("has last touch %v for %s/%s", lastTouch, route.Namespace, route.Name) if lastTouch.IsZero() { return false } old, ok := a.expected.Get(route.UID) if !ok || old.(time.Time).Equal(lastTouch.Time) { return false } return true }
func printImageStream(stream *imageapi.ImageStream, w io.Writer, opts kctl.PrintOptions) error { name := formatResourceName(opts.Kind, stream.Name, opts.WithKind) tags := "" const numOfTagsShown = 3 var latest unversioned.Time for _, list := range stream.Status.Tags { if len(list.Items) > 0 { if list.Items[0].Created.After(latest.Time) { latest = list.Items[0].Created } } } latestTime := "" if !latest.IsZero() { latestTime = fmt.Sprintf("%s ago", formatRelativeTime(latest.Time)) } list := imageapi.SortStatusTags(stream.Status.Tags) more := false if len(list) > numOfTagsShown { list = list[:numOfTagsShown] more = true } tags = strings.Join(list, ",") if more { tags = fmt.Sprintf("%s + %d more...", tags, len(stream.Status.Tags)-numOfTagsShown) } if opts.WithNamespace { if _, err := fmt.Fprintf(w, "%s\t", stream.Namespace); err != nil { return err } } repo := stream.Spec.DockerImageRepository if len(repo) == 0 { repo = stream.Status.DockerImageRepository } if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", name, repo, tags, latestTime); err != nil { return err } if err := appendItemLabels(stream.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { return err } return nil }
func describeBuildPhase(build *buildapi.Build, t *unversioned.Time, parentName string, pushTargetResolved bool) string { imageStreamFailure := "" // if we're using an image stream and that image stream is the internal registry and that registry doesn't exist if (build.Spec.Output.To != nil) && !pushTargetResolved { imageStreamFailure = " (can't push to image)" } if t == nil { ts := buildTimestamp(build) t = &ts } var time string if t.IsZero() { time = "<unknown>" } else { time = strings.ToLower(formatRelativeTime(t.Time)) } buildIdentification := fmt.Sprintf("build/%s", build.Name) prefix := parentName + "-" if strings.HasPrefix(build.Name, prefix) { suffix := build.Name[len(prefix):] if buildNumber, err := strconv.Atoi(suffix); err == nil { buildIdentification = fmt.Sprintf("build #%d", buildNumber) } } revision := describeSourceRevision(build.Spec.Revision) if len(revision) != 0 { revision = fmt.Sprintf(" - %s", revision) } switch build.Status.Phase { case buildapi.BuildPhaseComplete: return fmt.Sprintf("%s succeeded %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) case buildapi.BuildPhaseError: return fmt.Sprintf("%s stopped with an error %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) case buildapi.BuildPhaseFailed: return fmt.Sprintf("%s failed %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) default: status := strings.ToLower(string(build.Status.Phase)) return fmt.Sprintf("%s %s for %s%s%s", buildIdentification, status, time, revision, imageStreamFailure) } }
// hasIngressBeenTouched returns true if the route appears to have been touched since the last time func (a *StatusAdmitter) hasIngressBeenTouched(route *routeapi.Route, lastTouch *unversioned.Time) bool { glog.V(4).Infof("has last touch %v for %s/%s", lastTouch, route.Namespace, route.Name) if lastTouch.IsZero() { return false } old, ok := a.expected.Get(route.UID) if ok && old.(time.Time).Before(nowFn().Add(-a.contentionInterval)) { // throw out cache entries from before the contention interval, in case this is no longer valid // (e.g. the previous updater no longer exists due to scale down) glog.V(4).Infof("expired cached last touch of %s", old.(time.Time)) a.expected.Remove(route.UID) ok = false } if !ok || old.(time.Time).Equal(lastTouch.Time) { glog.V(4).Infof("missing or equal cached last touch") return false } glog.V(4).Infof("different cached last touch of %s", old.(time.Time)) return true }
func printImageStream(stream *imageapi.ImageStream, w io.Writer, withNamespace, wide, showAll bool, columnLabels []string) error { tags := "" const numOfTagsShown = 3 var latest unversioned.Time for _, list := range stream.Status.Tags { if len(list.Items) > 0 { if list.Items[0].Created.After(latest.Time) { latest = list.Items[0].Created } } } latestTime := "" if !latest.IsZero() { latestTime = fmt.Sprintf("%s ago", formatRelativeTime(latest.Time)) } list := imageapi.SortStatusTags(stream.Status.Tags) more := false if len(list) > numOfTagsShown { list = list[:numOfTagsShown] more = true } tags = strings.Join(list, ",") if more { tags = fmt.Sprintf("%s + %d more...", tags, len(stream.Status.Tags)-numOfTagsShown) } if withNamespace { if _, err := fmt.Fprintf(w, "%s\t", stream.Namespace); err != nil { return err } } repo := stream.Spec.DockerImageRepository if len(repo) == 0 { repo = stream.Status.DockerImageRepository } _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", stream.Name, repo, tags, latestTime) return err }
// translateTimestamp returns the elapsed time since timestamp in // human-readable approximation. func translateTimestamp(timestamp unversioned.Time) string { if timestamp.IsZero() { return "<unknown>" } return shortHumanDuration(time.Now().Sub(timestamp.Time)) }
// translateTimestamp returns the elapsed time since timestamp in // human-readable approximation. func TranslateTimestamp(timestamp api_uv.Time) string { if timestamp.IsZero() { return "<unknown>" } return shortHumanDuration(time.Now().Sub(timestamp.Time)) }