@@ -78,6 +78,66 @@ public void cacheExposesMetricsForHitMissAndEviction() {
78
78
assertThat (convertToOpenMetricsFormat (registry )).isEqualTo (expected );
79
79
}
80
80
81
+ @ Test
82
+ public void cacheExposesMetricsForHitMissAndEvictionForWeightedCache () {
83
+ // Run cleanup in same thread, to remove async behavior with evictions
84
+ final Cache <String , String > cache =
85
+ Caffeine .newBuilder ()
86
+ .weigher ((String k , String v ) -> k .length () + v .length ())
87
+ .maximumWeight (35 )
88
+ .recordStats ()
89
+ .executor (Runnable ::run )
90
+ .build ();
91
+
92
+ final CacheMetricsCollector collector = new CacheMetricsCollector ();
93
+ collector .addCache ("users" , cache );
94
+
95
+ final PrometheusRegistry registry = new PrometheusRegistry ();
96
+ registry .register (collector );
97
+
98
+ cache .getIfPresent ("user1" );
99
+ cache .getIfPresent ("user1" );
100
+ cache .put ("user1" , "First User" );
101
+ cache .getIfPresent ("user1" );
102
+
103
+ // Add to cache to trigger eviction.
104
+ cache .put ("user2" , "Second User" );
105
+ cache .put ("user3" , "Third User" );
106
+ cache .put ("user4" , "Fourth User" );
107
+
108
+ assertCounterMetric (registry , "caffeine_cache_hit" , "users" , 1.0 );
109
+ assertCounterMetric (registry , "caffeine_cache_miss" , "users" , 2.0 );
110
+ assertCounterMetric (registry , "caffeine_cache_requests" , "users" , 3.0 );
111
+ assertCounterMetric (registry , "caffeine_cache_eviction" , "users" , 2.0 );
112
+ assertCounterMetric (registry , "caffeine_cache_eviction_weight" , "users" , 31.0 );
113
+
114
+ final String expected =
115
+ "# TYPE caffeine_cache_estimated_size gauge\n "
116
+ + "# HELP caffeine_cache_estimated_size Estimated cache size\n "
117
+ + "caffeine_cache_estimated_size{cache=\" users\" } 2.0\n "
118
+ + "# TYPE caffeine_cache_eviction counter\n "
119
+ + "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n "
120
+ + "caffeine_cache_eviction_total{cache=\" users\" } 2.0\n "
121
+ + "# TYPE caffeine_cache_eviction_weight counter\n "
122
+ + "# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries\n "
123
+ + "caffeine_cache_eviction_weight_total{cache=\" users\" } 31.0\n "
124
+ + "# TYPE caffeine_cache_hit counter\n "
125
+ + "# HELP caffeine_cache_hit Cache hit totals\n "
126
+ + "caffeine_cache_hit_total{cache=\" users\" } 1.0\n "
127
+ + "# TYPE caffeine_cache_miss counter\n "
128
+ + "# HELP caffeine_cache_miss Cache miss totals\n "
129
+ + "caffeine_cache_miss_total{cache=\" users\" } 2.0\n "
130
+ + "# TYPE caffeine_cache_requests counter\n "
131
+ + "# HELP caffeine_cache_requests Cache request totals, hits + misses\n "
132
+ + "caffeine_cache_requests_total{cache=\" users\" } 3.0\n "
133
+ + "# TYPE caffeine_cache_weighted_size gauge\n "
134
+ + "# HELP caffeine_cache_weighted_size Approximate accumulated weight of cache entries\n "
135
+ + "caffeine_cache_weighted_size{cache=\" users\" } 31.0\n "
136
+ + "# EOF\n " ;
137
+
138
+ assertThat (convertToOpenMetricsFormat (registry )).isEqualTo (expected );
139
+ }
140
+
81
141
@ SuppressWarnings ("unchecked" )
82
142
@ Test
83
143
public void loadingCacheExposesMetricsForLoadsAndExceptions () throws Exception {
0 commit comments