пятница, 28 октября 2016 г.

Как понимать javax.cache.expiry.ExpiryPolicy

 
interface ExpiryPolicy
идея интерфейса - определять время через которое запись в кэше устареет, в зависимости от операций, производимых с объектом в кэше. Каждая операция может продлевать время жизни объекта в кэше - устанавливая новое время, до которого объект считается доступным.
В Reference Implementation устанавливается время жизни относительно текущего времени. При чем при использовании всех правил устаревания - не указано как время жизни должно перезаписываться, в каком порядке или меньшее/большее.

Each of the functions return a new Duration that specifies the amount of time that must pass before a cache entry is considered expired. Duration has constants defined for useful durations.
Каждая функция возвращает новый промежуток времени через который должен пройти перед тем как запись в кэше устареет.

Для всех методов справедливо, что
  • если возвращен ZERO (т.е. нулевой отрезок времени) то запись сразу считается устаревшей
  • если возвращен NULL - не нужно изменять время, когда запись устареет


Duration getExpiryForCreation()
This method is called by a caching implementation after a Cache.Entry is created, but before a Cache.Entry is added to a cache, to determine the Duration before an entry expires. 
Этот метод должен быть вызван кодом реализаций после того, как запись будет сделана, но перед тем как запись будет добавлена в кэш, чтобы определить время когда запись устареет. Вероятна ситуация, что к этому моменту запись уже устарела.

Duration getExpiryForAccess()
This method is called by a caching implementation after a Cache.Entry is accessed to determine the Duration before an entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет получена из кэша, чтобы определить время, когда запись устареет.

Duration getExpiryForUpdate()
This method is called by the caching implementation after a Cache.Entry is updated to determine the Duration before the updated entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет изменена, чтобы определить время, когда запись устареет.



пример реализации обработчика ExpiryPolicy
https://gist.github.com/kostapc/727489139e876b7ca391483e3a18a5f3

среда, 5 октября 2016 г.

grep and awk like SQL


easy to understand if map *nix console tools to SQL commands.Its usefull to analyse big files with strict stucture, like logs or dumps.

select * from file where column = "keyword"
cat ./bigfile.log | fgrep "keyword"

select sum(numbers) from file where column = "keyword" 
cat ./bigfile.log | fgrep "keyword" |  awk '{a[$1]+=$2}END{for (i in a){print i,a[i]}}'

select avg(numbers) from file where column = "keyword"
cat ./bigfile.log | fgrep "keyword"  |  awk '{a[$1]["s"]+=$2; a[$1]["c"]+=1;}END{for (i in a){ print i,a[i]["s"]/a[i]["c"]} }'

select count(*) from file group by column
cat ./bigfile.log | perl -pe "s/^(REGEXP_PATTERN).*$/\$1/g"  |  sort | uniq -c

with perl or awk analyzing columns can be extracted from source file for further calculating.

group by date and calculating any speed/avg

for example your log file begin with date: 11:29:37.495 DEBUG - <SOME INFO>
gouping by date can be done by cutting chars from end
seconds: cat ./bigfile.log | cut -c -8  | uniq -c
minutes: cat ./bigfile.log | cut -c -5  | uniq -c