@@ -25,6 +25,7 @@ type Metrics struct {
2525
2626 registry * prometheus.Registry
2727 containerImageVersion * prometheus.GaugeVec
28+ containerImageChecked * prometheus.GaugeVec
2829 containerImageDuration * prometheus.GaugeVec
2930 containerImageErrors * prometheus.CounterVec
3031
@@ -60,6 +61,16 @@ func NewServer(log *logrus.Entry) *Metrics {
6061 "namespace" , "pod" , "container" , "container_type" , "image" , "current_version" , "latest_version" ,
6162 },
6263 )
64+ containerImageChecked := promauto .With (reg ).NewGaugeVec (
65+ prometheus.GaugeOpts {
66+ Namespace : "version_checker" ,
67+ Name : "last_checked" ,
68+ Help : "Timestamp when the image was checked" ,
69+ },
70+ []string {
71+ "namespace" , "pod" , "container" , "container_type" , "image" ,
72+ },
73+ )
6374 containerImageDuration := promauto .With (reg ).NewGaugeVec (
6475 prometheus.GaugeOpts {
6576 Namespace : "version_checker" ,
@@ -84,6 +95,7 @@ func NewServer(log *logrus.Entry) *Metrics {
8495 registry : reg ,
8596 containerImageVersion : containerImageVersion ,
8697 containerImageDuration : containerImageDuration ,
98+ containerImageChecked : containerImageChecked ,
8799 containerImageErrors : containerImageErrors ,
88100 containerCache : make (map [string ]cacheItem ),
89101 roundTripper : NewRoundTripper (reg ),
@@ -135,9 +147,14 @@ func (m *Metrics) AddImage(namespace, pod, container, containerType, imageURL st
135147 }
136148
137149 m .containerImageVersion .With (
138- m .buildLabels (namespace , pod , container , containerType , imageURL , currentVersion , latestVersion ),
150+ m .buildFullLabels (namespace , pod , container , containerType , imageURL , currentVersion , latestVersion ),
139151 ).Set (isLatestF )
140152
153+ // Bump last updated timestamp
154+ m .containerImageChecked .With (
155+ m .buildLastUpdatedLabels (namespace , pod , container , containerType , imageURL ),
156+ ).Set (float64 (time .Now ().Unix ()))
157+
141158 index := m .latestImageIndex (namespace , pod , container , containerType )
142159 m .containerCache [index ] = cacheItem {
143160 image : imageURL ,
@@ -162,6 +179,9 @@ func (m *Metrics) RemoveImage(namespace, pod, container, containerType string) {
162179 m .containerImageDuration .DeletePartialMatch (
163180 m .buildPartialLabels (namespace , pod ),
164181 )
182+ m .containerImageChecked .DeletePartialMatch (
183+ m .buildPartialLabels (namespace , pod ),
184+ )
165185 delete (m .containerCache , index )
166186}
167187
@@ -178,11 +198,10 @@ func (m *Metrics) latestImageIndex(namespace, pod, container, containerType stri
178198}
179199
180200func (m * Metrics ) ErrorsReporting (namespace , pod , container , imageURL string ) {
181-
182201 m .containerImageErrors .WithLabelValues (namespace , pod , container , imageURL ).Inc ()
183202}
184203
185- func (m * Metrics ) buildLabels (namespace , pod , container , containerType , imageURL , currentVersion , latestVersion string ) prometheus.Labels {
204+ func (m * Metrics ) buildFullLabels (namespace , pod , container , containerType , imageURL , currentVersion , latestVersion string ) prometheus.Labels {
186205 return prometheus.Labels {
187206 "namespace" : namespace ,
188207 "pod" : pod ,
@@ -194,6 +213,16 @@ func (m *Metrics) buildLabels(namespace, pod, container, containerType, imageURL
194213 }
195214}
196215
216+ func (m * Metrics ) buildLastUpdatedLabels (namespace , pod , container , containerType , imageURL string ) prometheus.Labels {
217+ return prometheus.Labels {
218+ "namespace" : namespace ,
219+ "pod" : pod ,
220+ "container_type" : containerType ,
221+ "container" : container ,
222+ "image" : imageURL ,
223+ }
224+ }
225+
197226func (m * Metrics ) buildPartialLabels (namespace , pod string ) prometheus.Labels {
198227 return prometheus.Labels {
199228 "namespace" : namespace ,
0 commit comments