2015. június 9., kedd

dynaTrace Nagios Plugin

A KH Bank igényei alapján nemrég fejlesztettem egy dynaTrace plugin-t, ami a dynaTrace által rögzített riasztásokat, a Nagios ill. klónjai számára (OP5, Icinga) képes automatikusan továbbítani. A pluginnál felhasználtam a jsendnsca API-t, ami elvégzi a Passive Check-ek elküldését a Nagios NSCA add-on számára.


Az elkészült plugin-t felraktam a dynaTrace community portálra, ahonnan szabadon letölthető a dynaTrace és a Nagios oldali konfigurációs dokumentációval együtt. Jó monitorozást!

2015. május 3., vasárnap

Maidenhead - dynaTrace 6.2 workshop

Az elmúlt héten részt vettem a Maidenhead-ben megtartott, dynaTrace 6.2 újdonságait bemutató 2 napos workshop-on. A dynaTraceWeb keretében, a GWTgridster.js és highcharts alapokon egy olyan webes felületet hoztak létre, ahol a meglévő dashbordjaink nézegetése mellett akár sajátokat is gyorsan összepattinthatunk. Az újdonságok között volt a Smart Analysis Engine továbbfejlesztése, az instrumentációs cache-elés, az exception szenzor feljavítása, a külső szolgáltatások nevesítésének megoldása és a licence kezelési módosítások. Az új feature-ök mellett szó volt az agenteket és a dynaTrace architektúrát is nagyban érintő jövőbeli fejlesztésekről, melyekről a dynaTrace Product Manager-e mesélt személyesen. A dT 6.2 a jövő hónapban fog megérkezni, várjuk szeretettel! :)


A workshop után még 3 napot Londonban töltöttem, ahol megnéztem a város főbb nevezetességeit és persze a híres múzeumokat is melyekre már nagyon kíváncsi voltam. Ez a kis pihenés most pont jól jött a munkával, tanulással és vizsgákkal tele zsúfolt elmúlt félév lezárásaként.

2015. április 2., csütörtök

Java SE 8 - Stream API további példák

A Stream API lehetőségeit érdemes minél jobban kihasználni, ha már Java SE 8-on fejlesztünk, ezért a múltkori cikket folytatva nézzünk meg még néhány használati példát.

Az alábbi kód megjeleníti a legtöbb karaktert tartalmazó String-et a listából. Látható, hogy milyen elegánsan használható a Comparator funkcionális interfész comparing() statikus metódusa mivel nem kell mindkét összehasonlítandó objektumot definiálni, csak azt kell meghatározni egy lambda kifejezéssel, hogy miszerint végezzük el az összehasonlítást. A max() hívás visszatérési értéke egy Optional<T> típusú objektum, amitől lekérdezhetjük az eredményt egy get() hívással vagy akár azt is hogy volt-e egyáltalán valamilyen eredmény: isPresent().
List<string> fruitList = 
 Arrays.asList("Alma","BaNÁN","KÖRTE","szILVA","BaracKok","kiwi");

String max=fruitList.stream()
 .max(Comparator.comparing(s -> s.length())).get()

System.out.println(max); //BaracKok
A következő példa a listában található sztringeket összefűzi az első 3 karakterük felhasználásával. A sztringeket 3 karakteres formára leképező map() már ismerős lehet az előző cikkből, azonban van itt egy újdonság is a reduce(). A reduce segítségével a Collection elemeit egy adott értékre redukálhatjuk le, hasonlóan ahogy a korábban bemutatott max() is működik. A példánál maradva, itt a reduce feladata az lesz, hogy a 3 karakteres sztringeket összefűzze egy String-be.
String concat=fruitList.stream().map(s -> s.substring(0, 3))
 .reduce("",(acc,curr) -> acc+curr);

System.out.println(concat); //AlmBaNKÖRszIBarkiw
A végére hagytam a kedvencemet a flatMap metódust, amivel egy listákat tartalmazó lista elemeit a lehető legelegánsabb módon dolgozhatunk fel. A Java 8 előtti időkben ehhez még 2 for ciklust kellett volna használnunk...
List<List<String>> list = new ArrayList<>();
List<String> sList1 = Arrays.asList("aaa", "bbb", "ccc");
List<String> sList2 = Arrays.asList("ddd", "eee", "fff");
List<String> sList3 = Arrays.asList("ggg", "hhh", "iii");  
list.add(sList1);list.add(sList2);list.add(sList3);

// external iteration
for(List<String> ls: list)
 for(String s: ls)
  System.out.println(s);  

// internal iteration
list.stream().flatMap(l->l.stream())
       .forEach(e->System.out.println(e)); 
Hát ennyi lett volna a Stream API, a folytatás hamarosan következik.