ATTRIBUTE Packet-Transmit-Counter 1134 integer
ATTRIBUTE Cached-Session-Policy 1135 string
-\ATTRIBUTE Cache-TTL 1136 integer
-ATTRIBUTE Cache-Status-Only 1137 integer
+ATTRIBUTE Cache-TTL 1140 integer
+ATTRIBUTE Cache-Status-Only 1141 integer
+ATTRIBUTE Cache-Entry-Hits 1142 integer
VALUE Cache-Status-Only no 0
VALUE Cache-Status-Only yes 1
char *key;
int ttl;
int epoch;
+ int stats;
CONF_SECTION *cs;
rbtree_t *cache;
fr_heap_t *heap;
typedef struct rlm_cache_entry_t {
const char *key;
int offset;
+ long long int hits;
time_t created;
time_t expires;
VALUE_PAIR *control;
/*
* Merge a cached entry into a REQUEST.
*/
-static void cache_merge(REQUEST *request, rlm_cache_entry_t *c)
+static void cache_merge(rlm_cache_t *inst, REQUEST *request,
+ rlm_cache_entry_t *c)
{
VALUE_PAIR *vp;
pairmove(&request->reply->vps, &vp);
pairfree(&vp);
}
+
+ if (inst->stats) {
+ vp = paircreate(PW_CACHE_ENTRY_HITS, 0, PW_TYPE_INTEGER);
+ rad_assert(vp != NULL);
+
+ vp->vp_integer = c->hits;
+
+ pairadd(&request->packet->vps, vp);
+ }
}
c->expires = request->timestamp + ttl;
DEBUG("rlm_cache: Adding %d to the TTL", ttl);
}
+ c->hits++;
return c;
}
offsetof(rlm_cache_t, ttl), NULL, "500" },
{ "epoch", PW_TYPE_INTEGER,
offsetof(rlm_cache_t, epoch), NULL, "0" },
+ { "add-stats", PW_TYPE_BOOLEAN,
+ offsetof(rlm_cache_t, stats), NULL, "no" },
{ NULL, -1, 0, NULL, NULL } /* end the list */
};
}
if (c) {
- cache_merge(request, c);
+ cache_merge(inst, request, c);
return RLM_MODULE_OK;
}
c = cache_add(inst, request, buffer);
if (!c) return RLM_MODULE_NOOP;
- cache_merge(request, c);
+ cache_merge(inst, request, c);
return RLM_MODULE_UPDATED;
}